name: CI/CD on: push: branches: [main] tags: ['v*'] paths-ignore: - '*.md' - 'docs/**' env: CHART_NAME: infra-report jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set image tag and chart version id: tag run: | SHORT_SHA=$(echo ${GITHUB_SHA} | cut -c1-7) if [[ "${GITHUB_REF}" == refs/tags/* ]]; then echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV else echo "TAG=sha-${SHORT_SHA}" >> $GITHUB_ENV fi echo "IMAGE_NAME=${{ secrets.REGISTRY_URL }}/infra/infra-report" >> $GITHUB_ENV TIMESTAMP=$(date +%Y%m%d%H%M%S) echo "CHART_VERSION=0.1.${TIMESTAMP}" >> $GITHUB_ENV - name: Login to Harbor run: | for i in 1 2 3; do echo '${{ secrets.REGISTRY_PASSWORD }}' | docker login ${{ secrets.REGISTRY_URL }} -u ${{ secrets.REGISTRY_USER }} --password-stdin && break echo "Retry $i..." sleep 5 done - name: Build and push Docker image run: | docker build -t ${{ env.IMAGE_NAME }}:${{ env.TAG }} . docker tag ${{ env.IMAGE_NAME }}:${{ env.TAG }} ${{ env.IMAGE_NAME }}:latest docker push ${{ env.IMAGE_NAME }}:${{ env.TAG }} docker push ${{ env.IMAGE_NAME }}:latest - name: Install Helm run: | curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash - name: Package Helm chart run: | sed -i "s/appVersion: .*/appVersion: \"${{ env.TAG }}\"/" charts/infra-report/Chart.yaml sed -i "s/version: .*/version: ${{ env.CHART_VERSION }}/" charts/infra-report/Chart.yaml helm package charts/infra-report - name: Push Helm chart to Harbor (OCI) run: | echo '${{ secrets.REGISTRY_PASSWORD }}' | helm registry login ${{ secrets.REGISTRY_URL }} -u ${{ secrets.REGISTRY_USER }} --password-stdin helm push ${CHART_NAME}-${{ env.CHART_VERSION }}.tgz oci://${{ secrets.REGISTRY_URL }}/infra