From 6e95db3aa60d756a393e82168b3dbe469a9121bb Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Fri, 17 Jan 2025 10:40:42 +0100 Subject: [PATCH 1/2] ci: switch from jenkins to gha for arm64 build and tests Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> (cherry picked from commit 8c236de73536e4fb978b480a7afef74870bfbaed) Signed-off-by: Sebastiaan van Stijn --- .github/workflows/arm64.yml | 275 ++++++++++++++++++++++++++++++++++++ Jenkinsfile | 171 ---------------------- 2 files changed, 275 insertions(+), 171 deletions(-) create mode 100644 .github/workflows/arm64.yml delete mode 100644 Jenkinsfile diff --git a/.github/workflows/arm64.yml b/.github/workflows/arm64.yml new file mode 100644 index 0000000000..0f8bfa78e6 --- /dev/null +++ b/.github/workflows/arm64.yml @@ -0,0 +1,275 @@ +name: arm64 + +# Default to 'contents: read', which grants actions to read commits. +# +# If any permission is set, any permission not included in the list is +# implicitly set to "none". +# +# see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + workflow_dispatch: + push: + branches: + - 'master' + - '[0-9]+.[0-9]+' + pull_request: + +env: + GO_VERSION: "1.23.4" + TESTSTAT_VERSION: v0.1.25 + DESTDIR: ./build + SETUP_BUILDX_VERSION: edge + SETUP_BUILDKIT_IMAGE: moby/buildkit:latest + DOCKER_EXPERIMENTAL: 1 + +jobs: + validate-dco: + uses: ./.github/workflows/.dco.yml + + build: + runs-on: ubuntu-22.04-arm + timeout-minutes: 20 # guardrails timeout for the whole job + needs: + - validate-dco + strategy: + fail-fast: false + matrix: + target: + - binary + - dynbinary + steps: + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: ${{ env.SETUP_BUILDX_VERSION }} + driver-opts: image=${{ env.SETUP_BUILDKIT_IMAGE }} + buildkitd-flags: --debug + - + name: Build + uses: docker/bake-action@v6 + with: + targets: ${{ matrix.target }} + - + name: List artifacts + run: | + tree -nh ${{ env.DESTDIR }} + - + name: Check artifacts + run: | + find ${{ env.DESTDIR }} -type f -exec file -e ascii -- {} + + + build-dev: + runs-on: ubuntu-22.04-arm + timeout-minutes: 120 # guardrails timeout for the whole job + needs: + - validate-dco + steps: + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: ${{ env.SETUP_BUILDX_VERSION }} + driver-opts: image=${{ env.SETUP_BUILDKIT_IMAGE }} + buildkitd-flags: --debug + - + name: Build dev image + uses: docker/bake-action@v6 + with: + targets: dev + set: | + *.cache-from=type=gha,scope=dev-arm64 + *.cache-to=type=gha,scope=dev-arm64,mode=max + *.output=type=cacheonly + + test-unit: + runs-on: ubuntu-22.04-arm + timeout-minutes: 120 # guardrails timeout for the whole job + needs: + - build-dev + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Set up runner + uses: ./.github/actions/setup-runner + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: ${{ env.SETUP_BUILDX_VERSION }} + driver-opts: image=${{ env.SETUP_BUILDKIT_IMAGE }} + buildkitd-flags: --debug + - + name: Build dev image + uses: docker/bake-action@v6 + with: + targets: dev + set: | + dev.cache-from=type=gha,scope=dev-arm64 + - + name: Test + run: | + make -o build test-unit + - + name: Prepare reports + if: always() + run: | + mkdir -p bundles /tmp/reports + find bundles -path '*/root/*overlay2' -prune -o -type f \( -name '*-report.json' -o -name '*.log' -o -name '*.out' -o -name '*.prof' -o -name '*-report.xml' \) -print | xargs sudo tar -czf /tmp/reports.tar.gz + tar -xzf /tmp/reports.tar.gz -C /tmp/reports + sudo chown -R $(id -u):$(id -g) /tmp/reports + tree -nh /tmp/reports + - + name: Send to Codecov + uses: codecov/codecov-action@v4 + with: + directory: ./bundles + env_vars: RUNNER_OS + flags: unit + token: ${{ secrets.CODECOV_TOKEN }} # used to upload coverage reports: https://github.com/moby/buildkit/pull/4660#issue-2142122533 + - + name: Upload reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-reports-unit-arm64-graphdriver + path: /tmp/reports/* + retention-days: 1 + + test-unit-report: + runs-on: ubuntu-20.04 + timeout-minutes: 10 + continue-on-error: ${{ github.event_name != 'pull_request' }} + if: always() + needs: + - test-unit + steps: + - + name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + cache-dependency-path: vendor.sum + - + name: Download reports + uses: actions/download-artifact@v4 + with: + pattern: test-reports-unit-arm64-* + path: /tmp/reports + - + name: Install teststat + run: | + go install github.com/vearutop/teststat@${{ env.TESTSTAT_VERSION }} + - + name: Create summary + run: | + find /tmp/reports -type f -name '*-go-test-report.json' -exec teststat -markdown {} \+ >> $GITHUB_STEP_SUMMARY + + test-integration: + runs-on: ubuntu-22.04-arm + timeout-minutes: 120 # guardrails timeout for the whole job + continue-on-error: ${{ github.event_name != 'pull_request' }} + needs: + - build-dev + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Set up runner + uses: ./.github/actions/setup-runner + - + name: Set up tracing + uses: ./.github/actions/setup-tracing + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: ${{ env.SETUP_BUILDX_VERSION }} + driver-opts: image=${{ env.SETUP_BUILDKIT_IMAGE }} + buildkitd-flags: --debug + - + name: Build dev image + uses: docker/bake-action@v6 + with: + targets: dev + set: | + dev.cache-from=type=gha,scope=dev-arm64 + - + name: Test + run: | + make -o build test-integration + env: + TEST_SKIP_INTEGRATION_CLI: 1 + TESTCOVERAGE: 1 + - + name: Prepare reports + if: always() + run: | + reportsPath="/tmp/reports/arm64-graphdriver" + mkdir -p bundles $reportsPath + find bundles -path '*/root/*overlay2' -prune -o -type f \( -name '*-report.json' -o -name '*.log' -o -name '*.out' -o -name '*.prof' -o -name '*-report.xml' \) -print | xargs sudo tar -czf /tmp/reports.tar.gz + tar -xzf /tmp/reports.tar.gz -C $reportsPath + sudo chown -R $(id -u):$(id -g) $reportsPath + tree -nh $reportsPath + curl -sSLf localhost:16686/api/traces?service=integration-test-client > $reportsPath/jaeger-trace.json + - + name: Send to Codecov + uses: codecov/codecov-action@v4 + with: + directory: ./bundles/test-integration + env_vars: RUNNER_OS + flags: integration + token: ${{ secrets.CODECOV_TOKEN }} # used to upload coverage reports: https://github.com/moby/buildkit/pull/4660#issue-2142122533 + - + name: Test daemon logs + if: always() + run: | + cat bundles/test-integration/docker.log + - + name: Upload reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-reports-integration-arm64-graphdriver + path: /tmp/reports/* + retention-days: 1 + + test-integration-report: + runs-on: ubuntu-20.04 + timeout-minutes: 10 + continue-on-error: ${{ github.event_name != 'pull_request' }} + if: always() + needs: + - test-integration + steps: + - + name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + cache-dependency-path: vendor.sum + - + name: Download reports + uses: actions/download-artifact@v4 + with: + path: /tmp/reports + pattern: test-reports-integration-arm64-* + merge-multiple: true + - + name: Install teststat + run: | + go install github.com/vearutop/teststat@${{ env.TESTSTAT_VERSION }} + - + name: Create summary + run: | + find /tmp/reports -type f -name '*-go-test-report.json' -exec teststat -markdown {} \+ >> $GITHUB_STEP_SUMMARY diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index aebbbced3a..0000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,171 +0,0 @@ -#!groovy -pipeline { - agent none - - options { - buildDiscarder(logRotator(daysToKeepStr: '30')) - timeout(time: 2, unit: 'HOURS') - timestamps() - } - parameters { - booleanParam(name: 'arm64', defaultValue: true, description: 'ARM (arm64) Build/Test') - booleanParam(name: 'dco', defaultValue: true, description: 'Run the DCO check') - } - environment { - DOCKER_BUILDKIT = '1' - DOCKER_EXPERIMENTAL = '1' - DOCKER_GRAPHDRIVER = 'overlay2' - CHECK_CONFIG_COMMIT = '33a3680e08d1007e72c3b3f1454f823d8e9948ee' - TESTDEBUG = '0' - TIMEOUT = '120m' - } - stages { - stage('pr-hack') { - when { changeRequest() } - steps { - script { - echo "Workaround for PR auto-cancel feature. Borrowed from https://issues.jenkins-ci.org/browse/JENKINS-43353" - def buildNumber = env.BUILD_NUMBER as int - if (buildNumber > 1) milestone(buildNumber - 1) - milestone(buildNumber) - } - } - } - stage('DCO-check') { - when { - beforeAgent true - expression { params.dco } - } - agent { label 'arm64 && ubuntu-2004' } - steps { - sh ''' - docker run --rm \ - -v "$WORKSPACE:/workspace" \ - -e VALIDATE_REPO=${GIT_URL} \ - -e VALIDATE_BRANCH=${CHANGE_TARGET} \ - alpine sh -c 'apk add --no-cache -q bash git openssh-client && git config --system --add safe.directory /workspace && cd /workspace && hack/validate/dco' - ''' - } - } - stage('Build') { - parallel { - stage('arm64') { - when { - beforeAgent true - expression { params.arm64 } - } - agent { label 'arm64 && ubuntu-2004' } - environment { - TEST_SKIP_INTEGRATION_CLI = '1' - } - - stages { - stage("Load kernel modules") { - steps { - sh ''' - sudo modprobe ip6table_filter - sudo modprobe -va br_netfilter - sudo systemctl restart docker.service - ''' - } - } - stage("Print info") { - steps { - sh 'docker version' - sh 'docker info' - sh ''' - echo "check-config.sh version: ${CHECK_CONFIG_COMMIT}" - curl -fsSL -o ${WORKSPACE}/check-config.sh "https://raw.githubusercontent.com/moby/moby/${CHECK_CONFIG_COMMIT}/contrib/check-config.sh" \ - && bash ${WORKSPACE}/check-config.sh || true - ''' - } - } - stage("Build dev image") { - steps { - sh 'docker build --force-rm -t docker:${GIT_COMMIT} .' - } - } - stage("Unit tests") { - steps { - sh ''' - docker run --rm -t --privileged \ - -v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \ - --name docker-pr$BUILD_NUMBER \ - -e DOCKER_EXPERIMENTAL \ - -e DOCKER_GITCOMMIT=${GIT_COMMIT} \ - -e DOCKER_GRAPHDRIVER \ - -e VALIDATE_REPO=${GIT_URL} \ - -e VALIDATE_BRANCH=${CHANGE_TARGET} \ - docker:${GIT_COMMIT} \ - hack/test/unit - ''' - } - post { - always { - junit testResults: 'bundles/junit-report*.xml', allowEmptyResults: true - } - } - } - stage("Integration tests") { - environment { TEST_SKIP_INTEGRATION_CLI = '1' } - steps { - sh ''' - docker run --rm -t --privileged \ - -v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \ - --name docker-pr$BUILD_NUMBER \ - -e DOCKER_EXPERIMENTAL \ - -e DOCKER_GITCOMMIT=${GIT_COMMIT} \ - -e DOCKER_GRAPHDRIVER \ - -e TESTDEBUG \ - -e TEST_INTEGRATION_USE_SNAPSHOTTER \ - -e TEST_SKIP_INTEGRATION_CLI \ - -e TIMEOUT \ - -e VALIDATE_REPO=${GIT_URL} \ - -e VALIDATE_BRANCH=${CHANGE_TARGET} \ - docker:${GIT_COMMIT} \ - hack/make.sh \ - dynbinary \ - test-integration - ''' - } - post { - always { - junit testResults: 'bundles/**/*-report.xml', allowEmptyResults: true - } - } - } - } - - post { - always { - sh ''' - echo "Ensuring container killed." - docker rm -vf docker-pr$BUILD_NUMBER || true - ''' - - sh ''' - echo "Chowning /workspace to jenkins user" - docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace - ''' - - catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') { - sh ''' - bundleName=arm64-integration - echo "Creating ${bundleName}-bundles.tar.gz" - # exclude overlay2 directories - find bundles -path '*/root/*overlay2' -prune -o -type f \\( -name '*-report.json' -o -name '*.log' -o -name '*.prof' -o -name '*-report.xml' \\) -print | xargs tar -czf ${bundleName}-bundles.tar.gz - ''' - - archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true - } - } - cleanup { - sh 'make clean' - deleteDir() - } - } - } - } - } - } -} From 2af1a28b19aa4cd510b4aaecccb4546a3992ec91 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 20 Jan 2025 10:48:57 +0100 Subject: [PATCH 2/2] gha: set arm64 GO_VERSION to 1.22.10 Signed-off-by: Sebastiaan van Stijn (cherry picked from commit 6c832d05c49a30e44d845cc782b121c2af0f25e3) Signed-off-by: Sebastiaan van Stijn --- .github/workflows/arm64.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/arm64.yml b/.github/workflows/arm64.yml index 0f8bfa78e6..d8f6fa4efc 100644 --- a/.github/workflows/arm64.yml +++ b/.github/workflows/arm64.yml @@ -22,7 +22,7 @@ on: pull_request: env: - GO_VERSION: "1.23.4" + GO_VERSION: "1.22.10" TESTSTAT_VERSION: v0.1.25 DESTDIR: ./build SETUP_BUILDX_VERSION: edge