mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
Merge pull request #49320 from thaJeztah/26.1_backport_gha_arm64
[26.1 backport] ci: switch from jenkins to gha for arm64 build and tests (and set correct go version for branch)
This commit is contained in:
275
.github/workflows/arm64.yml
vendored
Normal file
275
.github/workflows/arm64.yml
vendored
Normal file
@@ -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.22.10"
|
||||||
|
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
|
||||||
171
Jenkinsfile
vendored
171
Jenkinsfile
vendored
@@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user