From 92a2270373cdf3a78bb0f72907c90540aa31a542 Mon Sep 17 00:00:00 2001 From: Maycon Santos Date: Sat, 12 Sep 2026 09:15:20 +0000 Subject: [PATCH] [ci] Temporary branch workflow to profile the management unit suite Runs the management unit tests per store engine on pushes to this branch with a 45 minute budget, through tools/gotestsummary, and keeps the raw go test -json events as an artifact. To be dropped before merge. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01EsVtbd7MxMVsS9vP1H6KPS --- .github/workflows/tmp-management-timing.yml | 90 +++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 .github/workflows/tmp-management-timing.yml diff --git a/.github/workflows/tmp-management-timing.yml b/.github/workflows/tmp-management-timing.yml new file mode 100644 index 000000000..ee9508a23 --- /dev/null +++ b/.github/workflows/tmp-management-timing.yml @@ -0,0 +1,90 @@ +# Temporary: profiles the management unit suite per store engine from a working +# branch. Delete before merging. +name: Management timing (temporary) + +on: + push: + branches: + - "work/amazing-wright-6xehqh" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + test_management: + name: "Management / Unit timing" + strategy: + fail-fast: false + matrix: + arch: ["amd64"] + store: ["sqlite", "postgres", "mysql"] + runs-on: ubuntu-22.04 + steps: + - name: Checkout code + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false + + - name: Install Go + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 + with: + go-version-file: "go.mod" + cache: false + + - name: Get Go environment + run: | + echo "cache=$(go env GOCACHE)" >> $GITHUB_ENV + echo "modcache=$(go env GOMODCACHE)" >> $GITHUB_ENV + + - name: Cache Go modules + uses: actions/cache/restore@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 + with: + path: | + ${{ env.cache }} + ${{ env.modcache }} + key: ${{ runner.os }}-gotest-cache-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-gotest-cache- + + - name: Install modules + run: go mod tidy + + - name: Login to Docker hub + uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_TOKEN }} + + - name: docker login for root user + env: + DOCKER_USER: ${{ secrets.DOCKER_USER }} + DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }} + run: echo "$DOCKER_TOKEN" | sudo docker login --username "$DOCKER_USER" --password-stdin + + - name: download mysql image + if: matrix.store == 'mysql' + run: docker pull mlsmaycon/warmed-mysql:8 + + - name: Build test summarizer + run: go build -o /tmp/gotestsummary ./tools/gotestsummary + + - name: Test + shell: bash + run: | + set -o pipefail + CGO_ENABLED=1 GOARCH=${{ matrix.arch }} \ + NETBIRD_STORE_ENGINE=${{ matrix.store }} \ + CI=true \ + go test -json -tags=devcert -coverprofile=coverage.txt \ + -exec "sudo --preserve-env=CI,NETBIRD_STORE_ENGINE" \ + -timeout 45m ./management/... ./shared/management/... \ + | tee test-output.jsonl | /tmp/gotestsummary -slowest 80 + + - name: Upload raw test events + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a #v7.0.1 + with: + name: test-output-${{ matrix.store }} + path: test-output.jsonl + if-no-files-found: ignore