name: API - Build and Push containers on: push: branches: - "master" paths: - "api/**" - ".github/workflows/api-build-lint-push-containers.yml" # Uncomment the code below to test this action on PRs # pull_request: # branches: # - "master" # paths: # - "api/**" # - ".github/workflows/api-build-lint-push-containers.yml" release: types: [published] env: # Tags LATEST_TAG: latest RELEASE_TAG: ${{ github.event.release.tag_name }} STABLE_TAG: stable WORKING_DIRECTORY: ./api # Container Registries PROWLERCLOUD_DOCKERHUB_REPOSITORY: prowlercloud PROWLERCLOUD_DOCKERHUB_IMAGE: prowler-api jobs: repository-check: name: Repository check runs-on: ubuntu-latest outputs: is_repo: ${{ steps.repository_check.outputs.is_repo }} steps: - name: Repository check id: repository_check working-directory: /tmp run: | if [[ ${{ github.repository }} == "prowler-cloud/prowler" ]] then echo "is_repo=true" >> "${GITHUB_OUTPUT}" else echo "This action only runs for prowler-cloud/prowler" echo "is_repo=false" >> "${GITHUB_OUTPUT}" fi # Build Prowler OSS container container-build-push: needs: repository-check if: needs.repository-check.outputs.is_repo == 'true' runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.WORKING_DIRECTORY }} steps: - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set short git commit SHA id: vars run: | shortSha=$(git rev-parse --short ${{ github.sha }}) echo "SHORT_SHA=${shortSha}" >> $GITHUB_ENV - name: Login to DockerHub uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0 - name: Build and push container image (latest) # Comment the following line for testing if: github.event_name == 'push' uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 with: context: ${{ env.WORKING_DIRECTORY }} # Set push: false for testing push: true tags: | ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ env.LATEST_TAG }} ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ env.SHORT_SHA }} cache-from: type=gha cache-to: type=gha,mode=max - name: Build and push container image (release) if: github.event_name == 'release' uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 with: context: ${{ env.WORKING_DIRECTORY }} push: true tags: | ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ env.RELEASE_TAG }} ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ env.STABLE_TAG }} cache-from: type=gha cache-to: type=gha,mode=max - name: Trigger deployment if: github.event_name == 'push' uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3.0.0 with: token: ${{ secrets.PROWLER_BOT_ACCESS_TOKEN }} repository: ${{ secrets.CLOUD_DISPATCH }} event-type: prowler-api-deploy client-payload: '{"sha": "${{ github.sha }}", "short_sha": "${{ env.SHORT_SHA }}"}'