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: build-and-publish: runs-on: ubuntu-latest 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: Find and process charts env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | echo "๐Ÿ” Searching for Helm charts..." CHARTS_FOUND=0 # Find all directories with Chart.yaml in root for dir in */; do if [ -f "${dir}Chart.yaml" ]; then CHART_NAME="${dir%/}" echo "๐Ÿ“ฆ Found chart: $CHART_NAME" # Lint chart echo "๐Ÿ”ง Linting chart: $CHART_NAME" helm lint "$CHART_NAME/" # Template test echo "๐Ÿงช Template testing chart: $CHART_NAME" helm template test "$CHART_NAME/" --debug > /dev/null # Get chart info VERSION=$(helm show chart "$CHART_NAME/" | grep '^version:' | awk '{print $2}') NAME=$(helm show chart "$CHART_NAME/" | grep '^name:' | awk '{print $2}') echo "Chart: $NAME, Version: $VERSION" # Only publish on main/master branch if [[ "$GITHUB_REF" == "refs/heads/main" || "$GITHUB_REF" == "refs/heads/master" ]]; then echo "๐Ÿ“ค Publishing chart: $CHART_NAME" # Create packages directory mkdir -p packages # Package chart helm package "$CHART_NAME/" --destination ./packages/ CHART_FILE="packages/$NAME-$VERSION.tgz" # Publish to Gitea Registry if [ -n "$GITEA_TOKEN" ]; then echo "Publishing $CHART_FILE to registry..." HTTP_CODE=$(curl -w "%{http_code}" -s -o /dev/null \ -H "Authorization: token $GITEA_TOKEN" \ -X POST \ --upload-file "$CHART_FILE" \ "$GITEA_URL/api/packages/$GITEA_OWNER/helm/api/charts") if [[ "$HTTP_CODE" =~ ^2[0-9][0-9]$ ]]; then echo "โœ… Chart $CHART_NAME published successfully! (HTTP $HTTP_CODE)" # Verify publication echo "๐Ÿ” Verifying publication..." sleep 5 if curl -s -H "Authorization: token $GITEA_TOKEN" \ "$GITEA_URL/api/packages/$GITEA_OWNER/helm/index.yaml" \ | grep -q "$NAME-$VERSION"; then echo "โœ… Chart $CHART_NAME verified in registry!" else echo "โš ๏ธ Chart $CHART_NAME not found in registry index yet (may take time to index)" fi else echo "โŒ Failed to publish chart $CHART_NAME. HTTP status: $HTTP_CODE" exit 1 fi else echo "โš ๏ธ GITEA_TOKEN not set, skipping publication" fi else echo "โ„น๏ธ Skipping publication (not on main/master branch)" fi CHARTS_FOUND=$((CHARTS_FOUND + 1)) fi done if [ $CHARTS_FOUND -eq 0 ]; then echo "โŒ No Helm charts found in repository root" exit 1 else echo "๐Ÿ“Š Summary: Processed $CHARTS_FOUND chart(s)" echo "๐ŸŒ Registry: $GITEA_URL/packages/$GITEA_OWNER" fi