Added CI
This commit is contained in:
6
.github/dependabot.yml
vendored
Normal file
6
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
150
.github/workflows/publish-charts.yml
vendored
Normal file
150
.github/workflows/publish-charts.yml
vendored
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
name: Publish Helm Charts
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main, master ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main, master ]
|
||||||
|
|
||||||
|
env:
|
||||||
|
GITEA_URL: https://gt.hexor.cy:30022
|
||||||
|
GITEA_OWNER: ab
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
detect-charts:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
charts: ${{ steps.list_charts.outputs.charts }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Detect charts
|
||||||
|
id: list_charts
|
||||||
|
run: |
|
||||||
|
CHARTS=()
|
||||||
|
|
||||||
|
# Find all directories with Chart.yaml in root
|
||||||
|
for dir in */; do
|
||||||
|
if [ -f "${dir}Chart.yaml" ]; then
|
||||||
|
CHARTS+=("${dir%/}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Convert to JSON array
|
||||||
|
CHARTS_JSON=$(printf '%s\n' "${CHARTS[@]}" | jq -R . | jq -s .)
|
||||||
|
echo "charts=$CHARTS_JSON" >> $GITHUB_OUTPUT
|
||||||
|
echo "Found charts: ${CHARTS[*]}"
|
||||||
|
|
||||||
|
lint-test:
|
||||||
|
needs: detect-charts
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: needs.detect-charts.outputs.charts != '[]'
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
chart: ${{ fromJson(needs.detect-charts.outputs.charts) }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Helm
|
||||||
|
uses: azure/setup-helm@v4
|
||||||
|
with:
|
||||||
|
version: v3.14.0
|
||||||
|
|
||||||
|
- name: Lint chart - ${{ matrix.chart }}
|
||||||
|
run: |
|
||||||
|
echo "Linting chart: ${{ matrix.chart }}"
|
||||||
|
helm lint ${{ matrix.chart }}/
|
||||||
|
|
||||||
|
- name: Template test - ${{ matrix.chart }}
|
||||||
|
run: |
|
||||||
|
echo "Template testing chart: ${{ matrix.chart }}"
|
||||||
|
helm template test ${{ matrix.chart }}/ --debug
|
||||||
|
|
||||||
|
publish:
|
||||||
|
needs: [detect-charts, lint-test]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master'
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
chart: ${{ fromJson(needs.detect-charts.outputs.charts) }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Helm
|
||||||
|
uses: azure/setup-helm@v4
|
||||||
|
with:
|
||||||
|
version: v3.14.0
|
||||||
|
|
||||||
|
- name: Get chart info - ${{ matrix.chart }}
|
||||||
|
id: chart_info
|
||||||
|
run: |
|
||||||
|
VERSION=$(helm show chart ${{ matrix.chart }}/ | grep '^version:' | awk '{print $2}')
|
||||||
|
NAME=$(helm show chart ${{ matrix.chart }}/ | grep '^name:' | awk '{print $2}')
|
||||||
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||||
|
echo "name=$NAME" >> $GITHUB_OUTPUT
|
||||||
|
echo "Chart: $NAME, Version: $VERSION"
|
||||||
|
|
||||||
|
- name: Create packages directory
|
||||||
|
run: mkdir -p packages
|
||||||
|
|
||||||
|
- name: Package chart - ${{ matrix.chart }}
|
||||||
|
run: |
|
||||||
|
echo "Packaging chart: ${{ matrix.chart }}"
|
||||||
|
helm package ${{ matrix.chart }}/ --destination ./packages/
|
||||||
|
|
||||||
|
- name: Publish to Gitea Registry - ${{ matrix.chart }}
|
||||||
|
env:
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
run: |
|
||||||
|
CHART_FILE="packages/${{ steps.chart_info.outputs.name }}-${{ steps.chart_info.outputs.version }}.tgz"
|
||||||
|
|
||||||
|
echo "Publishing chart: $CHART_FILE"
|
||||||
|
|
||||||
|
response=$(curl -w "%{http_code}" -s -H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
-X POST \
|
||||||
|
--upload-file "$CHART_FILE" \
|
||||||
|
"$GITEA_URL/api/packages/$GITEA_OWNER/helm/api/charts")
|
||||||
|
|
||||||
|
if [[ "$response" =~ ^2[0-9][0-9]$ ]]; then
|
||||||
|
echo "✅ Chart ${{ matrix.chart }} published successfully!"
|
||||||
|
else
|
||||||
|
echo "❌ Failed to publish chart ${{ matrix.chart }}. HTTP status: $response"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Verify publication - ${{ matrix.chart }}
|
||||||
|
env:
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
run: |
|
||||||
|
echo "Checking if chart ${{ matrix.chart }} is available in registry..."
|
||||||
|
|
||||||
|
# Wait for indexing
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
if curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
"$GITEA_URL/api/packages/$GITEA_OWNER/helm/index.yaml" \
|
||||||
|
| grep -q "${{ steps.chart_info.outputs.name }}-${{ steps.chart_info.outputs.version }}"; then
|
||||||
|
echo "✅ Chart ${{ matrix.chart }} verified in registry!"
|
||||||
|
else
|
||||||
|
echo "⚠️ Chart ${{ matrix.chart }} not found in registry index yet"
|
||||||
|
fi
|
||||||
|
|
||||||
|
summary:
|
||||||
|
needs: [detect-charts, publish]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: always() && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
|
||||||
|
steps:
|
||||||
|
- name: Summary
|
||||||
|
run: |
|
||||||
|
echo "📦 Helm Charts Publication Summary"
|
||||||
|
echo "Charts processed: ${{ join(fromJson(needs.detect-charts.outputs.charts), ', ') }}"
|
||||||
|
echo "Registry: $GITEA_URL/packages/$GITEA_OWNER"
|
||||||
Reference in New Issue
Block a user