Containerd Integration #25
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This workflow sets up Containerd with all supported plugins and runs the CRI | |
# integration suite on all supported Windows version. | |
name: Containerd Integration | |
on: | |
workflow_dispatch: | |
# When added to a merge queue. | |
# See https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue#triggering-merge-group-checks-with-github-actions | |
merge_group: | |
pull_request: | |
branches: ['main', 'release/**'] | |
env: | |
GO_VERSION: "1.21.1" | |
CNI_BASE_DIR: "C:\\Program Files\\containerd\\cni" | |
CONTAINERD_REPO: "containerd/containerd" | |
CONTAINERD_TAG: "1.7" | |
CRICTL_REPO: "kubernetes-sigs/cri-tools" | |
CRICTL_TAG: "v1.26.0" | |
permissions: | |
contents: read | |
jobs: | |
integration: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [windows-2019, windows-2022] | |
plugin: [nat, sdnbridge, sdnoverlay] | |
runs-on: "${{ matrix.os }}" | |
defaults: | |
run: | |
shell: bash | |
working-directory: src/github.com/microsoft/windows-container-networking | |
steps: | |
- name: Setup Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
cache: false | |
- name: Checkout Containerd | |
uses: actions/checkout@v3 | |
with: | |
repository: "${{ env.CONTAINERD_REPO }}" | |
path: src/github.com/containerd/containerd | |
- name: Checkout Plugins | |
uses: actions/checkout@v3 | |
with: | |
path: src/github.com/microsoft/windows-container-networking | |
- name: Checkout CRI Tools | |
uses: actions/checkout@v3 | |
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/microsoft/windows-container-networking/out" >> $GITHUB_PATH | |
echo "${{ github.workspace }}/src/github.com/kubernetes-sigs/cri-tools/build/bin/windows/amd64" >> $GITHUB_PATH | |
- name: Install Containerd Prereqs | |
run: script/setup/install-dev-tools | |
working-directory: src/github.com/containerd/containerd | |
# NOTE(aznashwan): starting with Golang 1.21, the windows-2019 GitHub runner's | |
# builtin MinGW version leads to DLL loading errors during runtime. | |
- name: Upgrade MinGW on Windows 2019 | |
if: matrix.os == 'windows-2019' | |
run: | | |
choco upgrade mingw --version=12.2.0.3042023 | |
- name: Containerd Binaries | |
env: | |
CGO_ENABLED: 1 | |
run: mingw32-make.exe binaries | |
working-directory: src/github.com/containerd/containerd | |
- name: CRI Binaries | |
env: | |
CGO_ENABLED: 1 | |
run: | | |
mingw32-make.exe critest | |
mingw32-make.exe crictl | |
working-directory: src/github.com/kubernetes-sigs/cri-tools | |
- name: Plugin Binaries | |
env: | |
CGO_ENABLED: 1 | |
run: | | |
mingw32-make.exe '${{ matrix.plugin }}' | |
mkdir -p "${{ env.CNI_BASE_DIR }}\\bin" | |
# HACK(aznashwan): currently the plugins blindly pass the 'type' field to HCN: | |
case "${{ matrix.plugin }}" in | |
'sdnbridge') | |
install -D -m 755 "out/${{ matrix.plugin }}.exe" "${{ env.CNI_BASE_DIR }}\\bin\\L2Bridge.exe" | |
;; | |
'sdnoverlay') | |
install -D -m 755 "out/${{ matrix.plugin }}.exe" "${{ env.CNI_BASE_DIR }}\\bin\\Overlay.exe" | |
;; | |
'nat') | |
install -D -m 755 "out/${{ matrix.plugin }}.exe" "${{ env.CNI_BASE_DIR }}\\bin\\nat.exe" | |
;; | |
*) | |
echo "Unknown plugin: '${{ matrix.plugin }}'" | |
exit 1 | |
;; | |
esac | |
- name: Define Test Image Config | |
env: | |
TEST_IMAGE_LIST: ${{ github.workspace }}/repolist.toml | |
CRI_TEST_IMAGES: ${{ github.workspace }}/cri-test-images.yaml | |
BUSYBOX_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/busybox:1.29-2" | |
RESOURCE_CONSUMER_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/resource-consumer:1.10" | |
WEBSERVER_TESTING_IMAGE_REF: "registry.k8s.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: Install Containerd Testing Prereqs | |
run: | | |
script/setup/install-gotestsum | |
script/setup/install-teststat | |
working-directory: src/github.com/containerd/containerd | |
# - name: Contained Unit Tests | |
# env: | |
# CGO_ENABLED: 1 | |
# GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-unit-root.xml | |
# GOTESTSUM_JSONFILE: ${{github.workspace}}/test-unit-root-gotest.json | |
# run: mingw32-make.exe test root-test | |
# - run: if [ -f *-gotest.json ]; then echo '# Root Test' >> $GITHUB_STEP_SUMMARY; teststat -markdown *-gotest.json >> $GITHUB_STEP_SUMMARY; fi | |
# if: always() | |
# - run: script/test/test2annotation.sh ${TESTFILE} | |
# env: | |
# TESTFILE: ${{github.workspace}}/test-unit-root-gotest.json | |
# if: always() | |
- name: Generate Testing CNI Config | |
shell: powershell | |
run: | | |
scripts/test/generateTestCniConf.ps1 -Type '${{ matrix.plugin }}' -OutDir '${{ env.CNI_BASE_DIR }}\\conf' -EnsureOutDirEmpty $true -HostInterfaceNamePattern '*Ethernet*' | |
- name: Containerd Integration Tests | |
env: | |
CGO_ENABLED: 1 | |
GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-integration-serial-junit.xml | |
GOTESTSUM_JSONFILE: ${{github.workspace}}/test-integration-serial-gotest.json | |
EXTRA_TESTFLAGS: "-timeout=20m" | |
run: | | |
mingw32-make.exe integration | |
# script/test/test2annotation.sh ${GOTESTSUM_JSONFILE} | |
working-directory: src/github.com/containerd/containerd | |
- name: Containerd CRI Integration Test | |
env: | |
DISABLE_CRI_SANDBOXES: ${{ matrix.disable_cri_sandboxes }} | |
TEST_IMAGE_LIST: ${{github.workspace}}/repolist.toml | |
run: | | |
mingw32-make.exe cri-integration | |
working-directory: src/github.com/containerd/containerd | |
- name: CRI Test Suite | |
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@v3 | |
if: always() | |
with: | |
name: TestResults ${{ matrix.os }} | |
path: | | |
${{github.workspace}}/*-junit.xml | |
${{github.workspace}}/*-gotest.json | |
${{github.workspace}}/critestreport/*.log |