go1.18.3 (released 2022-06-01) includes security fixes to the crypto/rand, crypto/tls, os/exec, and path/filepath packages, as well as bug fixes to the compiler, and the crypto/tls and text/template/parse packages. See the Go 1.18.3 milestone on our issue tracker for details: https://github.com/golang/go/issues?q=milestone%3AGo1.18.3+label%3ACherryPickApproved update golang to 1.17.11 go1.17.11 (released 2022-06-01) includes security fixes to the crypto/rand, crypto/tls, os/exec, and path/filepath packages, as well as bug fixes to the crypto/tls package. See the Go 1.17.11 milestone on our issue tracker for details. https://github.com/golang/go/issues?q=milestone%3AGo1.17.11+label%3ACherryPickApproved Hello gophers, We have just released Go versions 1.18.3 and 1.17.11, minor point releases. These minor releases include 4 security fixes following the security policy: - crypto/rand: rand.Read hangs with extremely large buffers On Windows, rand.Read will hang indefinitely if passed a buffer larger than 1 << 32 - 1 bytes. Thanks to Davis Goodin and Quim Muntal, working at Microsoft on the Go toolset, for reporting this issue. This is [CVE-2022-30634][CVE-2022-30634] and Go issue https://go.dev/issue/52561. - crypto/tls: session tickets lack random ticket_age_add Session tickets generated by crypto/tls did not contain a randomly generated ticket_age_add. This allows an attacker that can observe TLS handshakes to correlate successive connections by comparing ticket ages during session resumption. Thanks to GitHub user nervuri for reporting this. This is [CVE-2022-30629][CVE-2022-30629] and Go issue https://go.dev/issue/52814. - `os/exec`: empty `Cmd.Path` can result in running unintended binary on Windows If, on Windows, `Cmd.Run`, `cmd.Start`, `cmd.Output`, or `cmd.CombinedOutput` are executed when Cmd.Path is unset and, in the working directory, there are binaries named either "..com" or "..exe", they will be executed. Thanks to Chris Darroch, brian m. carlson, and Mikhail Shcherbakov for reporting this. This is [CVE-2022-30580][CVE-2022-30580] and Go issue https://go.dev/issue/52574. - `path/filepath`: Clean(`.\c:`) returns `c:` on Windows On Windows, the `filepath.Clean` function could convert an invalid path to a valid, absolute path. For example, Clean(`.\c:`) returned `c:`. Thanks to Unrud for reporting this issue. This is [CVE-2022-29804][CVE-2022-29804] and Go issue https://go.dev/issue/52476. [CVE-2022-30634]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-30634 [CVE-2022-30629]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-30629 [CVE-2022-30580]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-30580 [CVE-2022-29804]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29804 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
525 lines
16 KiB
YAML
525 lines
16 KiB
YAML
name: CI
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
- 'release/**'
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- 'release/**'
|
|
|
|
jobs:
|
|
#
|
|
# golangci-lint
|
|
#
|
|
linters:
|
|
name: Linters
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 10
|
|
|
|
strategy:
|
|
matrix:
|
|
go-version: [1.18.3]
|
|
os: [ubuntu-18.04, macos-10.15, windows-2019]
|
|
|
|
steps:
|
|
- uses: actions/setup-go@v2
|
|
with:
|
|
go-version: ${{ matrix.go-version }}
|
|
|
|
- uses: actions/checkout@v2
|
|
- uses: golangci/golangci-lint-action@v3
|
|
with:
|
|
version: v1.45.0
|
|
skip-cache: true
|
|
args: --timeout=5m
|
|
|
|
#
|
|
# Project checks
|
|
#
|
|
project:
|
|
name: Project Checks
|
|
runs-on: ubuntu-18.04
|
|
timeout-minutes: 5
|
|
|
|
steps:
|
|
- uses: actions/setup-go@v2
|
|
with:
|
|
go-version: '1.18.3'
|
|
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
path: src/github.com/containerd/containerd
|
|
fetch-depth: 100
|
|
|
|
- uses: containerd/project-checks@v1
|
|
with:
|
|
working-directory: src/github.com/containerd/containerd
|
|
|
|
- name: verify go modules and vendor directory
|
|
run: |
|
|
sudo apt-get install -y jq
|
|
make verify-vendor
|
|
working-directory: src/github.com/containerd/containerd
|
|
|
|
#
|
|
# Protobuf checks
|
|
#
|
|
protos:
|
|
name: Protobuf
|
|
runs-on: ubuntu-18.04
|
|
timeout-minutes: 5
|
|
|
|
defaults:
|
|
run:
|
|
working-directory: src/github.com/containerd/containerd
|
|
|
|
steps:
|
|
- uses: actions/setup-go@v2
|
|
with:
|
|
go-version: '1.18.3'
|
|
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
path: src/github.com/containerd/containerd
|
|
|
|
- name: Set env
|
|
shell: bash
|
|
run: |
|
|
echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV
|
|
echo "${{ github.workspace }}/bin" >> $GITHUB_PATH
|
|
|
|
- name: Install protobuf
|
|
run: |
|
|
sudo -E PATH=$PATH script/setup/install-protobuf
|
|
sudo chmod +x /usr/local/bin/protoc
|
|
sudo chmod og+rx /usr/local/include/google /usr/local/include/google/protobuf /usr/local/include/google/protobuf/compiler
|
|
sudo chmod -R og+r /usr/local/include/google/protobuf/
|
|
protoc --version
|
|
|
|
- run: script/setup/install-dev-tools
|
|
- run: make proto-fmt
|
|
- run: make check-protos check-api-descriptors
|
|
|
|
man:
|
|
name: Manpages
|
|
runs-on: ubuntu-18.04
|
|
timeout-minutes: 5
|
|
|
|
steps:
|
|
- uses: actions/setup-go@v2
|
|
with:
|
|
go-version: '1.18.3'
|
|
- uses: actions/checkout@v2
|
|
- run: go install github.com/cpuguy83/go-md2man/v2@v2.0.1
|
|
- run: make man
|
|
|
|
# Make sure binaries compile with other platforms
|
|
crossbuild:
|
|
name: Crossbuild Binaries
|
|
needs: [project, linters, protos, man]
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 10
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- goos: linux
|
|
goarch: arm64
|
|
- goos: linux
|
|
goarch: arm
|
|
goarm: "7"
|
|
- goos: linux
|
|
goarch: arm
|
|
goarm: "5"
|
|
- goos: linux
|
|
goarch: ppc64le
|
|
- goos: linux
|
|
goarch: riscv64
|
|
- goos: freebsd
|
|
goarch: amd64
|
|
- goos: freebsd
|
|
goarch: arm64
|
|
- goos: windows
|
|
goarch: arm
|
|
goarm: "7"
|
|
|
|
steps:
|
|
- uses: actions/setup-go@v2
|
|
with:
|
|
go-version: '1.18.3'
|
|
- uses: actions/checkout@v2
|
|
- run: |
|
|
set -e -x
|
|
|
|
packages="libbtrfs-dev"
|
|
platform="${{matrix.goos}}/${{matrix.goarch}}"
|
|
if [ -n "${{matrix.goarm}}" ]; then
|
|
platform+="/v${{matrix.goarm}}"
|
|
fi
|
|
|
|
case "${platform}" in
|
|
linux/arm/v5)
|
|
packages+=" crossbuild-essential-armel"
|
|
echo "CGO_ENABLED=1" >> $GITHUB_ENV
|
|
echo "CC=arm-linux-gnueabi-gcc" >> $GITHUB_ENV
|
|
;;
|
|
linux/arm/v7)
|
|
packages+=" crossbuild-essential-armhf"
|
|
echo "CGO_ENABLED=1" >> $GITHUB_ENV
|
|
echo "CC=arm-linux-gnueabihf-gcc" >> $GITHUB_ENV
|
|
;;
|
|
linux/arm64)
|
|
packages+=" crossbuild-essential-arm64"
|
|
echo "CGO_ENABLED=1" >> $GITHUB_ENV
|
|
echo "CC=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
|
|
;;
|
|
linux/ppc64le)
|
|
packages+=" crossbuild-essential-ppc64el"
|
|
echo "CGO_ENABLED=1" >> $GITHUB_ENV
|
|
echo "CC=powerpc64le-linux-gnu-gcc" >> $GITHUB_ENV
|
|
;;
|
|
linux/riscv64)
|
|
packages+=" crossbuild-essential-riscv64"
|
|
echo "CGO_ENABLED=1" >> $GITHUB_ENV
|
|
echo "CC=riscv64-linux-gnu-gcc" >> $GITHUB_ENV
|
|
;;
|
|
windows/arm/v7)
|
|
echo "CGO_ENABLED=0" >> $GITHUB_ENV
|
|
;;
|
|
esac
|
|
|
|
if [ -n "${packages}" ]; then
|
|
sudo apt-get update && sudo apt-get install -y ${packages}
|
|
fi
|
|
name: Install deps
|
|
- name: Build
|
|
env:
|
|
GOOS: ${{matrix.goos}}
|
|
GOARCH: ${{matrix.goarch}}
|
|
GOARM: ${{matrix.goarm}}
|
|
run: |
|
|
make build
|
|
make binaries
|
|
|
|
#
|
|
# Build containerd binaries
|
|
#
|
|
binaries:
|
|
name: Binaries
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 10
|
|
needs: [project, linters, protos, man]
|
|
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-18.04, macos-10.15, windows-2019, windows-2022]
|
|
go-version: ['1.17.11', '1.18.3']
|
|
steps:
|
|
- uses: actions/setup-go@v2
|
|
with:
|
|
go-version: ${{ matrix.go-version }}
|
|
|
|
- name: Set env
|
|
shell: bash
|
|
run: |
|
|
echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV
|
|
echo "${{ github.workspace }}/bin" >> $GITHUB_PATH
|
|
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
path: src/github.com/containerd/containerd
|
|
|
|
- name: Make
|
|
run: |
|
|
make build
|
|
make binaries
|
|
working-directory: src/github.com/containerd/containerd
|
|
|
|
#
|
|
# Integration and CRI tests
|
|
#
|
|
integration-windows:
|
|
name: Windows Integration
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 50
|
|
needs: [project, linters, protos, man]
|
|
env:
|
|
GOTEST: gotestsum --
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [windows-2019, windows-2022]
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
working-directory: src/github.com/containerd/containerd
|
|
|
|
steps:
|
|
- uses: actions/setup-go@v2
|
|
with:
|
|
go-version: '1.18.3'
|
|
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
path: src/github.com/containerd/containerd
|
|
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
repository: kubernetes-sigs/cri-tools
|
|
path: src/github.com/kubernetes-sigs/cri-tools
|
|
|
|
- name: Set env
|
|
run: |
|
|
echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV
|
|
echo "${{ github.workspace }}/bin" >> $GITHUB_PATH
|
|
echo "${{ github.workspace }}/src/github.com/containerd/containerd/bin" >> $GITHUB_PATH
|
|
echo "${{ github.workspace }}/src/github.com/kubernetes-sigs/cri-tools/build/bin" >> $GITHUB_PATH
|
|
|
|
- run: script/setup/install-dev-tools
|
|
|
|
- name: Binaries
|
|
env:
|
|
CGO_ENABLED: 1
|
|
run: |
|
|
set -o xtrace
|
|
mingw32-make.exe binaries
|
|
cd ../../kubernetes-sigs/cri-tools
|
|
make critest
|
|
|
|
- run: script/setup/install-cni-windows
|
|
|
|
- env:
|
|
TEST_IMAGE_LIST: ${{github.workspace}}/repolist.toml
|
|
CRI_TEST_IMAGES: ${{github.workspace}}/cri-test-images.yaml
|
|
BUSYBOX_TESTING_IMAGE_REF: "k8s.gcr.io/e2e-test-images/busybox:1.29-2"
|
|
RESOURCE_CONSUMER_TESTING_IMAGE_REF: "k8s.gcr.io/e2e-test-images/resource-consumer:1.10"
|
|
WEBSERVER_TESTING_IMAGE_REF: "k8s.gcr.io/e2e-test-images/nginx:1.14-2"
|
|
run: |
|
|
cat > "${{ env.TEST_IMAGE_LIST }}" << EOF
|
|
busybox = "${{ env.BUSYBOX_TESTING_IMAGE_REF }}"
|
|
ResourceConsumer = "${{ env.RESOURCE_CONSUMER_TESTING_IMAGE_REF }}"
|
|
EOF
|
|
cat > "${{ env.CRI_TEST_IMAGES }}" << EOF
|
|
defaultTestContainerImage: ${{ env.BUSYBOX_TESTING_IMAGE_REF }}
|
|
webServerTestImage: ${{ env.WEBSERVER_TESTING_IMAGE_REF }}
|
|
EOF
|
|
|
|
- name: Get crictl tool
|
|
shell: powershell
|
|
run: |
|
|
# Get critctl tool. Used for cri-integration tests
|
|
$CRICTL_DOWNLOAD_URL="https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.21.0/crictl-v1.21.0-windows-amd64.tar.gz"
|
|
curl.exe -L $CRICTL_DOWNLOAD_URL -o c:\crictl.tar.gz
|
|
tar -xvf c:\crictl.tar.gz
|
|
mv crictl.exe "${{ github.workspace }}/bin/crictl.exe" # Move crictl somewhere in path
|
|
|
|
- run: script/setup/install-gotestsum
|
|
- name: Tests
|
|
env:
|
|
CGO_ENABLED: 1
|
|
GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-unit-root.xml
|
|
run: mingw32-make.exe test root-test
|
|
|
|
- name: Integration 1
|
|
env:
|
|
CGO_ENABLED: 1
|
|
GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-integration-serial-junit.xml
|
|
run: mingw32-make.exe integration
|
|
|
|
# Run the integration suite a second time. See discussion in github.com/containerd/containerd/pull/1759
|
|
- name: Integration 2
|
|
env:
|
|
TESTFLAGS_PARALLEL: 1
|
|
EXTRA_TESTFLAGS: "-short"
|
|
CGO_ENABLED: 1
|
|
GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-integration-parallel-junit.xml
|
|
run: mingw32-make.exe integration
|
|
|
|
- name: CRI Integration Test
|
|
env:
|
|
TEST_IMAGE_LIST: ${{github.workspace}}/repolist.toml
|
|
run: |
|
|
make cri-integration
|
|
|
|
- name: cri-tools critest
|
|
env:
|
|
CRI_TEST_IMAGES: ${{github.workspace}}/cri-test-images.yaml
|
|
shell: powershell
|
|
run: |
|
|
Start-Process -FilePath containerd.exe -NoNewWindow -RedirectStandardError true -PassThru
|
|
get-process | sls containerd
|
|
start-sleep 5
|
|
# This test is exceedingly flaky only on ws2022 so skip for now to keep CI happy.
|
|
# Info: https://github.com/containerd/containerd/issues/6652
|
|
if( '${{ matrix.os }}' -eq 'windows-2022' )
|
|
{
|
|
$skip = "-ginkgo.skip=runtime should support exec with tty=true and stdin=true"
|
|
}
|
|
critest.exe --runtime-endpoint=npipe://.//pipe//containerd-containerd --test-images-file='${{env.CRI_TEST_IMAGES}}' --report-dir='${{github.workspace}}/critestreport' $skip
|
|
- uses: actions/upload-artifact@v2
|
|
if: always()
|
|
with:
|
|
name: TestResults ${{ matrix.os }}
|
|
path: |
|
|
${{github.workspace}}/*-junit.xml
|
|
|
|
integration-linux:
|
|
name: Linux Integration
|
|
runs-on: ubuntu-18.04
|
|
timeout-minutes: 40
|
|
needs: [project, linters, protos, man]
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
runtime: [io.containerd.runtime.v1.linux, io.containerd.runc.v1, io.containerd.runc.v2]
|
|
runc: [runc, crun]
|
|
exclude:
|
|
- runtime: io.containerd.runc.v1
|
|
runc: crun
|
|
- runtime: io.containerd.runtime.v1.linux
|
|
runc: crun
|
|
|
|
env:
|
|
GOTEST: gotestsum --
|
|
steps:
|
|
- uses: actions/setup-go@v2
|
|
with:
|
|
go-version: '1.18.3'
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: Install containerd dependencies
|
|
env:
|
|
RUNC_FLAVOR: ${{ matrix.runc }}
|
|
GOFLAGS: -modcacherw
|
|
run: |
|
|
sudo apt-get install -y gperf
|
|
sudo -E PATH=$PATH script/setup/install-seccomp
|
|
sudo -E PATH=$PATH script/setup/install-runc
|
|
sudo -E PATH=$PATH script/setup/install-cni $(grep containernetworking/plugins go.mod | awk '{print $2}')
|
|
sudo -E PATH=$PATH script/setup/install-critools
|
|
|
|
- name: Install criu
|
|
run: |
|
|
sudo add-apt-repository ppa:criu/ppa
|
|
sudo apt-get update
|
|
sudo apt-get install -y criu
|
|
|
|
- name: Install containerd
|
|
env:
|
|
CGO_ENABLED: 1
|
|
run: |
|
|
make binaries GO_BUILD_FLAGS="-mod=vendor"
|
|
sudo -E PATH=$PATH make install
|
|
|
|
- run: sudo -E PATH=$PATH script/setup/install-gotestsum
|
|
- name: Tests
|
|
env:
|
|
GOPROXY: direct
|
|
GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-unit-root-junit.xml
|
|
run: |
|
|
make test
|
|
sudo -E PATH=$PATH make root-test
|
|
|
|
- name: Integration 1
|
|
env:
|
|
GOPROXY: direct
|
|
TEST_RUNTIME: ${{ matrix.runtime }}
|
|
RUNC_FLAVOR: ${{ matrix.runc }}
|
|
GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-integration-serial-junit.xml
|
|
run: |
|
|
extraflags=""
|
|
[ "${RUNC_FLAVOR}" == "crun" ] && {
|
|
extraflags="EXTRA_TESTFLAGS=-no-criu";
|
|
}
|
|
sudo -E PATH=$PATH make integration ${extraflags} TESTFLAGS_RACE=-race
|
|
|
|
# Run the integration suite a second time. See discussion in github.com/containerd/containerd/pull/1759
|
|
- name: Integration 2
|
|
env:
|
|
GOPROXY: direct
|
|
TEST_RUNTIME: ${{ matrix.runtime }}
|
|
RUNC_FLAVOR: ${{ matrix.runc }}
|
|
GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-integration-parallel-junit.xml
|
|
run: |
|
|
extraflags=""
|
|
[ "${RUNC_FLAVOR}" == "crun" ] && {
|
|
extraflags="EXTRA_TESTFLAGS=-no-criu";
|
|
}
|
|
sudo -E PATH=$PATH TESTFLAGS_PARALLEL=1 make integration ${extraflags}
|
|
|
|
- name: CRI Integration Test
|
|
env:
|
|
TEST_RUNTIME: ${{ matrix.runtime }}
|
|
run: |
|
|
CONTAINERD_RUNTIME=$TEST_RUNTIME make cri-integration
|
|
|
|
- name: cri-tools critest
|
|
env:
|
|
TEST_RUNTIME: ${{ matrix.runtime }}
|
|
run: |
|
|
BDIR="$(mktemp -d -p $PWD)"
|
|
mkdir -p ${BDIR}/{root,state}
|
|
cat > ${BDIR}/config.toml <<EOF
|
|
version = 2
|
|
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
|
|
runtime_type = "${TEST_RUNTIME}"
|
|
EOF
|
|
sudo ls /etc/cni/net.d
|
|
sudo -E PATH=$PATH /usr/local/bin/containerd -a ${BDIR}/c.sock --config ${BDIR}/config.toml --root ${BDIR}/root --state ${BDIR}/state --log-level debug &> ${BDIR}/containerd-cri.log &
|
|
sudo -E PATH=$PATH /usr/local/bin/ctr -a ${BDIR}/c.sock version
|
|
sudo -E PATH=$PATH critest --report-dir "${{github.workspace}}/critestreport" --runtime-endpoint=unix:///${BDIR}/c.sock --parallel=8
|
|
TEST_RC=$?
|
|
test $TEST_RC -ne 0 && cat ${BDIR}/containerd-cri.log
|
|
sudo pkill containerd
|
|
sudo -E rm -rf ${BDIR}
|
|
test $TEST_RC -eq 0 || /bin/false
|
|
|
|
# Log the status of this VM to investigate issues like
|
|
# https://github.com/containerd/containerd/issues/4969
|
|
- name: Host Status
|
|
if: always()
|
|
run: |
|
|
set -x
|
|
mount
|
|
df
|
|
losetup -l
|
|
- uses: actions/upload-artifact@v2
|
|
if: always()
|
|
with:
|
|
name: TestResults ${{ matrix.runtime }} ${{matrix.runc}}
|
|
path: |
|
|
*-junit.xml
|
|
${{github.workspace}}/critestreport/*.xml
|
|
|
|
tests-mac-os:
|
|
name: MacOS unit tests
|
|
runs-on: macos-10.15
|
|
timeout-minutes: 10
|
|
needs: [project, linters, protos, man]
|
|
env:
|
|
GOTEST: gotestsum --
|
|
|
|
steps:
|
|
- uses: actions/setup-go@v2
|
|
with:
|
|
go-version: '1.18.3'
|
|
- uses: actions/checkout@v2
|
|
- run: sudo -E PATH=$PATH script/setup/install-gotestsum
|
|
- name: Tests
|
|
env:
|
|
GOPROXY: direct
|
|
GOTESTSUM_JUNITFILE: "${{ github.workspace }}/macos-test-junit.xml"
|
|
run: make test
|
|
- uses: actions/upload-artifact@v2
|
|
if: always()
|
|
with:
|
|
name: TestResults MacOS
|
|
path: |
|
|
*-junit.xml
|