b7e8868235
go1.20.4 (released 2023-05-02) includes three security fixes to the html/template package, as well as bug fixes to the compiler, the runtime, and the crypto/subtle, crypto/tls, net/http, and syscall packages. See the Go 1.20.4 milestone on our issue tracker for details: https://github.com/golang/go/issues?q=milestone%3AGo1.20.4+label%3ACherryPickApproved release notes: https://go.dev/doc/devel/release#go1.20.4 full diff: https://github.com/golang/go/compare/go1.20.3...go1.20.4 from the announcement: > These minor releases include 3 security fixes following the security policy: > > - html/template: improper sanitization of CSS values > > Angle brackets (`<>`) were not considered dangerous characters when inserted > into CSS contexts. Templates containing multiple actions separated by a '/' > character could result in unexpectedly closing the CSS context and allowing > for injection of unexpected HMTL, if executed with untrusted input. > > Thanks to Juho Nurminen of Mattermost for reporting this issue. > > This is CVE-2023-24539 and Go issue https://go.dev/issue/59720. > > - html/template: improper handling of JavaScript whitespace > > Not all valid JavaScript whitespace characters were considered to be > whitespace. Templates containing whitespace characters outside of the character > set "\t\n\f\r\u0020\u2028\u2029" in JavaScript contexts that also contain > actions may not be properly sanitized during execution. > > Thanks to Juho Nurminen of Mattermost for reporting this issue. > > This is CVE-2023-24540 and Go issue https://go.dev/issue/59721. > > - html/template: improper handling of empty HTML attributes > > Templates containing actions in unquoted HTML attributes (e.g. "attr={{.}}") > executed with empty input could result in output that would have unexpected > results when parsed due to HTML normalization rules. This may allow injection > of arbitrary attributes into tags. > > Thanks to Juho Nurminen of Mattermost for reporting this issue. > > This is CVE-2023-29400 and Go issue https://go.dev/issue/59722. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
559 lines
15 KiB
YAML
559 lines
15 KiB
YAML
name: test
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches:
|
|
- 'master'
|
|
- '[0-9]+.[0-9]+'
|
|
tags:
|
|
- 'v*'
|
|
pull_request:
|
|
|
|
env:
|
|
GO_VERSION: "1.20.4"
|
|
GOTESTLIST_VERSION: v0.3.1
|
|
TESTSTAT_VERSION: v0.1.3
|
|
ITG_CLI_MATRIX_SIZE: 6
|
|
DOCKER_EXPERIMENTAL: 1
|
|
DOCKER_GRAPHDRIVER: overlay2
|
|
|
|
jobs:
|
|
validate-dco:
|
|
uses: ./.github/workflows/.dco.yml
|
|
|
|
build-dev:
|
|
runs-on: ubuntu-20.04
|
|
needs:
|
|
- validate-dco
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
mode:
|
|
- ""
|
|
- systemd
|
|
steps:
|
|
-
|
|
name: Prepare
|
|
run: |
|
|
if [ "${{ matrix.mode }}" = "systemd" ]; then
|
|
echo "SYSTEMD=true" >> $GITHUB_ENV
|
|
fi
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
-
|
|
name: Build dev image
|
|
uses: docker/bake-action@v2
|
|
with:
|
|
targets: dev
|
|
set: |
|
|
*.cache-from=type=gha,scope=dev${{ matrix.mode }}
|
|
*.cache-to=type=gha,scope=dev${{ matrix.mode }},mode=max
|
|
*.output=type=cacheonly
|
|
|
|
validate-prepare:
|
|
runs-on: ubuntu-20.04
|
|
needs:
|
|
- validate-dco
|
|
outputs:
|
|
matrix: ${{ steps.scripts.outputs.matrix }}
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
-
|
|
name: Create matrix
|
|
id: scripts
|
|
run: |
|
|
scripts=$(jq -ncR '[inputs]' <<< "$(ls -I .validate -I all -I default -I dco -I golangci-lint.yml -I yamllint.yaml -A ./hack/validate/)")
|
|
echo "matrix=$scripts" >> $GITHUB_OUTPUT
|
|
-
|
|
name: Show matrix
|
|
run: |
|
|
echo ${{ steps.scripts.outputs.matrix }}
|
|
|
|
validate:
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 120
|
|
needs:
|
|
- validate-prepare
|
|
- build-dev
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
script: ${{ fromJson(needs.validate-prepare.outputs.matrix) }}
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
-
|
|
name: Set up runner
|
|
uses: ./.github/actions/setup-runner
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
-
|
|
name: Build dev image
|
|
uses: docker/bake-action@v2
|
|
with:
|
|
targets: dev
|
|
set: |
|
|
dev.cache-from=type=gha,scope=dev
|
|
-
|
|
name: Validate
|
|
run: |
|
|
make -o build validate-${{ matrix.script }}
|
|
|
|
unit:
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 120
|
|
needs:
|
|
- build-dev
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
-
|
|
name: Set up runner
|
|
uses: ./.github/actions/setup-runner
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
-
|
|
name: Build dev image
|
|
uses: docker/bake-action@v2
|
|
with:
|
|
targets: dev
|
|
set: |
|
|
dev.cache-from=type=gha,scope=dev
|
|
-
|
|
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@v3
|
|
with:
|
|
directory: ./bundles
|
|
env_vars: RUNNER_OS
|
|
flags: unit
|
|
-
|
|
name: Upload reports
|
|
if: always()
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: unit-reports
|
|
path: /tmp/reports/*
|
|
|
|
unit-report:
|
|
runs-on: ubuntu-20.04
|
|
if: always()
|
|
needs:
|
|
- unit
|
|
steps:
|
|
-
|
|
name: Set up Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: ${{ env.GO_VERSION }}
|
|
-
|
|
name: Download reports
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: unit-reports
|
|
path: /tmp/reports
|
|
-
|
|
name: Install teststat
|
|
run: |
|
|
go install github.com/vearutop/teststat@${{ env.TESTSTAT_VERSION }}
|
|
-
|
|
name: Create summary
|
|
run: |
|
|
teststat -markdown $(find /tmp/reports -type f -name '*.json' -print0 | xargs -0) >> $GITHUB_STEP_SUMMARY
|
|
|
|
docker-py:
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 120
|
|
needs:
|
|
- build-dev
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
-
|
|
name: Set up runner
|
|
uses: ./.github/actions/setup-runner
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
-
|
|
name: Build dev image
|
|
uses: docker/bake-action@v2
|
|
with:
|
|
targets: dev
|
|
set: |
|
|
dev.cache-from=type=gha,scope=dev
|
|
-
|
|
name: Test
|
|
run: |
|
|
make -o build test-docker-py
|
|
-
|
|
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: Test daemon logs
|
|
if: always()
|
|
run: |
|
|
cat bundles/test-docker-py/docker.log
|
|
-
|
|
name: Upload reports
|
|
if: always()
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: docker-py-reports
|
|
path: /tmp/reports/*
|
|
|
|
integration-flaky:
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 120
|
|
needs:
|
|
- build-dev
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
-
|
|
name: Set up runner
|
|
uses: ./.github/actions/setup-runner
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
-
|
|
name: Build dev image
|
|
uses: docker/bake-action@v2
|
|
with:
|
|
targets: dev
|
|
set: |
|
|
dev.cache-from=type=gha,scope=dev
|
|
-
|
|
name: Test
|
|
run: |
|
|
make -o build test-integration-flaky
|
|
env:
|
|
TEST_SKIP_INTEGRATION_CLI: 1
|
|
|
|
integration:
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 120
|
|
needs:
|
|
- build-dev
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-20.04
|
|
- ubuntu-22.04
|
|
mode:
|
|
- ""
|
|
- rootless
|
|
- systemd
|
|
#- rootless-systemd FIXME: https://github.com/moby/moby/issues/44084
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
-
|
|
name: Set up runner
|
|
uses: ./.github/actions/setup-runner
|
|
-
|
|
name: Prepare
|
|
run: |
|
|
CACHE_DEV_SCOPE=dev
|
|
if [[ "${{ matrix.mode }}" == *"rootless"* ]]; then
|
|
echo "DOCKER_ROOTLESS=1" >> $GITHUB_ENV
|
|
fi
|
|
if [[ "${{ matrix.mode }}" == *"systemd"* ]]; then
|
|
echo "SYSTEMD=true" >> $GITHUB_ENV
|
|
CACHE_DEV_SCOPE="${CACHE_DEV_SCOPE}systemd"
|
|
fi
|
|
echo "CACHE_DEV_SCOPE=${CACHE_DEV_SCOPE}" >> $GITHUB_ENV
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
-
|
|
name: Build dev image
|
|
uses: docker/bake-action@v2
|
|
with:
|
|
targets: dev
|
|
set: |
|
|
dev.cache-from=type=gha,scope=${{ env.CACHE_DEV_SCOPE }}
|
|
-
|
|
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/${{ matrix.os }}"
|
|
if [ -n "${{ matrix.mode }}" ]; then
|
|
reportsPath="$reportsPath-${{ matrix.mode }}"
|
|
fi
|
|
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
|
|
-
|
|
name: Send to Codecov
|
|
uses: codecov/codecov-action@v3
|
|
with:
|
|
directory: ./bundles/test-integration
|
|
env_vars: RUNNER_OS
|
|
flags: integration,${{ matrix.mode }}
|
|
-
|
|
name: Test daemon logs
|
|
if: always()
|
|
run: |
|
|
cat bundles/test-integration/docker.log
|
|
-
|
|
name: Upload reports
|
|
if: always()
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: integration-reports
|
|
path: /tmp/reports/*
|
|
|
|
integration-report:
|
|
runs-on: ubuntu-20.04
|
|
if: always()
|
|
needs:
|
|
- integration
|
|
steps:
|
|
-
|
|
name: Set up Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: ${{ env.GO_VERSION }}
|
|
-
|
|
name: Download reports
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: integration-reports
|
|
path: /tmp/reports
|
|
-
|
|
name: Install teststat
|
|
run: |
|
|
go install github.com/vearutop/teststat@${{ env.TESTSTAT_VERSION }}
|
|
-
|
|
name: Create summary
|
|
run: |
|
|
teststat -markdown $(find /tmp/reports -type f -name '*.json' -print0 | xargs -0) >> $GITHUB_STEP_SUMMARY
|
|
|
|
integration-cli-prepare:
|
|
runs-on: ubuntu-20.04
|
|
needs:
|
|
- validate-dco
|
|
outputs:
|
|
matrix: ${{ steps.tests.outputs.matrix }}
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
-
|
|
name: Set up Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: ${{ env.GO_VERSION }}
|
|
-
|
|
name: Install gotestlist
|
|
run:
|
|
go install github.com/crazy-max/gotestlist/cmd/gotestlist@${{ env.GOTESTLIST_VERSION }}
|
|
-
|
|
name: Create matrix
|
|
id: tests
|
|
working-directory: ./integration-cli
|
|
run: |
|
|
# This step creates a matrix for integration-cli tests. Tests suites
|
|
# are distributed in integration-cli job through a matrix. There is
|
|
# also overrides being added to the matrix like "./..." to run
|
|
# "Test integration" step exclusively and specific tests suites that
|
|
# take a long time to run.
|
|
matrix="$(gotestlist -d ${{ env.ITG_CLI_MATRIX_SIZE }} -o "./..." -o "DockerSwarmSuite" -o "DockerNetworkSuite|DockerExternalVolumeSuite" ./...)"
|
|
echo "matrix=$matrix" >> $GITHUB_OUTPUT
|
|
-
|
|
name: Show matrix
|
|
run: |
|
|
echo ${{ steps.tests.outputs.matrix }}
|
|
|
|
integration-cli:
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 120
|
|
needs:
|
|
- build-dev
|
|
- integration-cli-prepare
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
test: ${{ fromJson(needs.integration-cli-prepare.outputs.matrix) }}
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
-
|
|
name: Set up runner
|
|
uses: ./.github/actions/setup-runner
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
-
|
|
name: Build dev image
|
|
uses: docker/bake-action@v2
|
|
with:
|
|
targets: dev
|
|
set: |
|
|
dev.cache-from=type=gha,scope=dev
|
|
-
|
|
name: Test
|
|
run: |
|
|
make -o build test-integration
|
|
env:
|
|
TEST_SKIP_INTEGRATION: 1
|
|
TESTCOVERAGE: 1
|
|
TESTFLAGS: "-test.run (${{ matrix.test }})/"
|
|
-
|
|
name: Prepare reports
|
|
if: always()
|
|
run: |
|
|
reportsPath=/tmp/reports/$(echo -n "${{ matrix.test }}" | sha256sum | cut -d " " -f 1)
|
|
mkdir -p bundles $reportsPath
|
|
echo "${{ matrix.test }}" | tr -s '|' '\n' | tee -a "$reportsPath/tests.txt"
|
|
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
|
|
-
|
|
name: Send to Codecov
|
|
uses: codecov/codecov-action@v3
|
|
with:
|
|
directory: ./bundles/test-integration
|
|
env_vars: RUNNER_OS
|
|
flags: integration-cli
|
|
-
|
|
name: Test daemon logs
|
|
if: always()
|
|
run: |
|
|
cat bundles/test-integration/docker.log
|
|
-
|
|
name: Upload reports
|
|
if: always()
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: integration-cli-reports
|
|
path: /tmp/reports/*
|
|
|
|
integration-cli-report:
|
|
runs-on: ubuntu-20.04
|
|
if: always()
|
|
needs:
|
|
- integration-cli
|
|
steps:
|
|
-
|
|
name: Set up Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: ${{ env.GO_VERSION }}
|
|
-
|
|
name: Download reports
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: integration-cli-reports
|
|
path: /tmp/reports
|
|
-
|
|
name: Install teststat
|
|
run: |
|
|
go install github.com/vearutop/teststat@${{ env.TESTSTAT_VERSION }}
|
|
-
|
|
name: Create summary
|
|
run: |
|
|
teststat -markdown $(find /tmp/reports -type f -name '*.json' -print0 | xargs -0) >> $GITHUB_STEP_SUMMARY
|
|
|
|
prepare-smoke:
|
|
runs-on: ubuntu-20.04
|
|
needs:
|
|
- validate-dco
|
|
outputs:
|
|
matrix: ${{ steps.platforms.outputs.matrix }}
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
-
|
|
name: Create matrix
|
|
id: platforms
|
|
run: |
|
|
matrix="$(docker buildx bake binary-smoketest --print | jq -cr '.target."binary-smoketest".platforms')"
|
|
echo "matrix=$matrix" >> $GITHUB_OUTPUT
|
|
-
|
|
name: Show matrix
|
|
run: |
|
|
echo ${{ steps.platforms.outputs.matrix }}
|
|
|
|
smoke:
|
|
runs-on: ubuntu-20.04
|
|
needs:
|
|
- prepare-smoke
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform: ${{ fromJson(needs.prepare-smoke.outputs.matrix) }}
|
|
steps:
|
|
-
|
|
name: Checkout
|
|
uses: actions/checkout@v3
|
|
-
|
|
name: Prepare
|
|
run: |
|
|
platform=${{ matrix.platform }}
|
|
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
|
-
|
|
name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
-
|
|
name: Test
|
|
uses: docker/bake-action@v2
|
|
with:
|
|
targets: binary-smoketest
|
|
set: |
|
|
*.platform=${{ matrix.platform }}
|