--- name: CI # yamllint disable-line rule:truthy on: pull_request: branches: - '*' push: branches: - 'master' concurrency: group: build-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true env: INSTALL_DOCKER_REPO: 1 jobs: check-commit: runs-on: ubuntu-24.04 outputs: skip: ${{ steps.check-commit.outputs.skip }} steps: - uses: actions/checkout@v5 with: ref: ${{ github.event.pull_request.head.sha }} - name: check if message contain keywords ace scopeid id: check-commit run: | # checking for "docs" or "[ci skip]" messages message=$(git log -1 --pretty=format:'%s') if [[ "$message" =~ "\[(ci skip)\]" ]]; then echo "Skipping tests due to [ci skip] message" echo "skip=true" >> $GITHUB_OUTPUT elif [[ "$message" =~ "^docs:" ]]; then echo "Skipping tests due to "docs:" prefix on message" echo "skip=true" >> $GITHUB_OUTPUT fi build: name: build runs-on: ubuntu-24.04 needs: check-commit if: ${{ needs.check-commit.outputs.skip != 'true' }} outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} strategy: fail-fast: true timeout-minutes: 45 steps: - uses: actions/checkout@v5 - name: set up qemu uses: docker/setup-qemu-action@v3 - name: set up docker buildx id: buildx uses: docker/setup-buildx-action@v3 - name: build package run: ./tests/ci/setup.sh build env: SKIP_IMAGE_BUILD: true - name: set matrix for build id: set-matrix run: | json=$(python3 .github/commands/matrix) echo $json echo "matrix=$json" >> $GITHUB_OUTPUT - name: upload packages uses: actions/upload-artifact@v5 with: name: build path: build build-image-amd64: name: build-image.linux/amd64 needs: build runs-on: ubuntu-24.04 timeout-minutes: 20 steps: - uses: actions/checkout@v5 - name: build-image uses: ./.github/actions/build-image with: architecture: linux/amd64 build-image-arm64: name: build-image.linux/arm64 needs: build runs-on: ubuntu-24.04-arm timeout-minutes: 20 steps: - uses: actions/checkout@v5 - name: build-image uses: ./.github/actions/build-image with: architecture: linux/arm64 unit-tests: name: unit.${{ matrix.index }} needs: build runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: ${{fromJson(needs.build.outputs.matrix)}} steps: - uses: actions/checkout@v5 - name: download packages uses: actions/download-artifact@v6 with: name: build path: build - name: ci-setup run: ./.github/commands/ci-setup # - name: start ssh session # uses: luchihoratiu/debug-via-ssh@main # with: # NGROK_AUTH_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }} # SSH_PASS: ${{ secrets.NGROK_SSH_PASS }} - name: run ci timeout-minutes: 30 run: sudo -E ./.github/commands/ci-run ${{ matrix.index }} env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} SYNC_GITHUB_PASSWORD: ${{ secrets.SYNC_GITHUB_PASSWORD }} SYNC_GITHUB_USERNAME: ${{ secrets.SYNC_GITHUB_USERNAME }} - uses: actions/upload-artifact@v5 with: name: test-results-${{ matrix.index }} path: test-results docker-deploy-tests: name: docker needs: build runs-on: ubuntu-24.04 strategy: fail-fast: false steps: - uses: actions/checkout@v5 - name: download packages uses: actions/download-artifact@v6 with: name: build path: build - name: ci-setup run: ./.github/commands/ci-setup - name: docker-container-setup run: | ./tests/ci/setup.sh docker - name: test docker deploys shell: bash timeout-minutes: 20 run: | docker exec dokku bash -c "cat /etc/sudoers.d/dokku-nginx" DOKKU_SSH_PORT=3022 sudo -E make -e test-ci-docker go-tests: name: go.${{ matrix.index }} needs: build runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: index: [0, 1, 2, 3] env: GITHUB_NODE_INDEX: ${{ matrix.index }} steps: - uses: actions/checkout@v5 - name: download packages uses: actions/download-artifact@v6 with: name: build path: build - name: ci-setup run: ./.github/commands/ci-setup - name: run go tests run: | export CIRCLE_SHA1=$GITHUB_SHA echo "CODACY_TOKEN=$CODACY_TOKEN" if [ "$CODACY_TOKEN" != "" ]; then echo "Detected value for CODACY_TOKEN" fi case $GITHUB_NODE_INDEX in 0) sudo -E make -e lint-ci go-tests ci-go-coverage ;; 1) sudo -E make -e deploy-test-checks-root deploy-test-config ;; 2) sudo -E make -e deploy-test-multi ;; 3) sudo -E make -e deploy-test-go-fail-predeploy deploy-test-go-fail-postdeploy ;; esac - uses: actions/upload-artifact@v5 with: name: coverage.${{ matrix.index }} path: test-results/coverage publish-test-results: name: publish-test-results needs: unit-tests runs-on: ubuntu-24.04 permissions: checks: write # the build-and-test job might be skipped, we don't need to run this job then if: success() || failure() steps: - name: download test-results uses: actions/download-artifact@v6 with: path: test-results - name: Publish Unit Test Results uses: EnricoMi/publish-unit-test-result-action@v2 with: check_name: Unit Test Results github_token: ${{ secrets.GITHUB_TOKEN }} junit_files: test-results/**/*.xml comment_mode: "off"