|
| 1 | +# Workflow intended to periodically test containerd integration tests |
| 2 | + |
| 3 | +name: win-periodic-integration |
| 4 | + |
| 5 | +on: |
| 6 | + schedule: |
| 7 | + - cron: "0 */12 * * *" |
| 8 | + |
| 9 | +env: |
| 10 | + AZURE_DEFAULT_LOCATION: westeurope |
| 11 | + AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUB_ID }} |
| 12 | + AZURE_DEFAULT_VM_SIZE: Standard_D2s_v3 |
| 13 | + PASSWORD: Passw0rdAdmin # temp for testing, will be generated |
| 14 | + DEFAULT_ADMIN_USERNAME: azureuser |
| 15 | + SSH_OPTS: "-o ServerAliveInterval=20 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" |
| 16 | + REMOTE_VM_BIN_PATH: "c:\\containerd\\bin" |
| 17 | + |
| 18 | +jobs: |
| 19 | + winIntegration: |
| 20 | + strategy: |
| 21 | + matrix: |
| 22 | + win_ver: [sac1909] |
| 23 | + include: |
| 24 | + - win_ver: sac1909 |
| 25 | + AZURE_IMG: "MicrosoftWindowsServer:WindowsServer:Datacenter-Core-1909-with-Containers-smalldisk:18363.900.2006061800" |
| 26 | + AZURE_RESOURCE_GROUP: ctrd-integration-sac1909-${{ github.run_id }} |
| 27 | + GOOGLE_BUCKET: "gs://containerd-integration/logs/windows-sac1909/" |
| 28 | + |
| 29 | + runs-on: ubuntu-latest |
| 30 | + steps: |
| 31 | + - uses: actions/checkout@v2 |
| 32 | + |
| 33 | + - name: Install required packages |
| 34 | + run: | |
| 35 | + sudo apt-get install xmlstarlet -y |
| 36 | +
|
| 37 | + - name: PrepareArtifacts |
| 38 | + run: | |
| 39 | + STARTED_TIME=$(date +%s) |
| 40 | + LOGS_DIR=$HOME/$STARTED_TIME |
| 41 | + echo "STARTED_TIME=$STARTED_TIME" >> $GITHUB_ENV |
| 42 | + echo "LOGS_DIR=$LOGS_DIR" >> $GITHUB_ENV |
| 43 | + mkdir -p $LOGS_DIR/artifacts |
| 44 | +
|
| 45 | + jq -n --arg node temp --arg timestamp $STARTED_TIME '$timestamp|tonumber|{timestamp:.,$node}' > $LOGS_DIR/started.json |
| 46 | +
|
| 47 | + - name: Generate ssh key pair |
| 48 | + run: | |
| 49 | + mkdir -p $HOME/.ssh/ |
| 50 | + ssh-keygen -t rsa -b 4096 -C "ci@containerd.com" -f $HOME/.ssh/id_rsa -q -N "" |
| 51 | + echo "SSH_PUB_KEY=$(cat ~/.ssh/id_rsa.pub)" >> $GITHUB_ENV |
| 52 | +
|
| 53 | + - name: AZLogin |
| 54 | + uses: azure/login@v1 |
| 55 | + with: |
| 56 | + creds: ${{ secrets.AZURE_CREDS }} |
| 57 | + |
| 58 | + - name: AZResourceGroupCreate |
| 59 | + uses: azure/CLI@v1 |
| 60 | + with: |
| 61 | + azcliversion: latest |
| 62 | + inlinescript: | |
| 63 | + az group create -n ${{ matrix.AZURE_RESOURCE_GROUP }} -l ${{ env.AZURE_DEFAULT_LOCATION }} |
| 64 | +
|
| 65 | + - name: AZTestVMCreate |
| 66 | + uses: azure/CLI@v1 |
| 67 | + with: |
| 68 | + azcliversion: latest |
| 69 | + inlinescript: | |
| 70 | + az vm create -n winTestVM --admin-username ${{ env.DEFAULT_ADMIN_USERNAME }} --admin-password ${{ env.PASSWORD }} --image ${{ matrix.AZURE_IMG }} -g ${{ matrix.AZURE_RESOURCE_GROUP }} --nsg-rule SSH --size ${{ env.AZURE_DEFAULT_VM_SIZE }} |
| 71 | +
|
| 72 | + - name: GetAZVMPublicIP |
| 73 | + uses: azure/CLI@v1 |
| 74 | + with: |
| 75 | + azcliversion: latest |
| 76 | + inlinescript: | |
| 77 | + echo "VM_PUB_IP=$(az network public-ip list -g ${{ matrix.AZURE_RESOURCE_GROUP }} | jq '.[0]["ipAddress"]' | tr -d '\"')" >> $GITHUB_ENV |
| 78 | +
|
| 79 | + - name: EnableAZVMSSH |
| 80 | + uses: azure/CLI@v1 |
| 81 | + with: |
| 82 | + azcliversion: latest |
| 83 | + inlinescript: | |
| 84 | + az vm run-command invoke --command-id RunPowerShellScript -n winTestVM -g ${{ matrix.AZURE_RESOURCE_GROUP }} --scripts @$GITHUB_WORKSPACE/script/setup/enable_ssh_windows.ps1 --parameters 'SSHPublicKey=${{ env.SSH_PUB_KEY }}' |
| 85 | +
|
| 86 | + - name: TestSSHConnection |
| 87 | + run: | |
| 88 | + if ! ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "hostname"; |
| 89 | + then |
| 90 | + exit 1 |
| 91 | + fi |
| 92 | +
|
| 93 | + - name: PrepareTestingEnv |
| 94 | + run: | |
| 95 | + scp -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} $GITHUB_WORKSPACE/script/setup/prepare_env_windows.ps1 azureuser@${{ env.VM_PUB_IP }}:/prepare_env_windows.ps1 |
| 96 | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "c:\\prepare_env_windows.ps1" |
| 97 | +
|
| 98 | + - name: MakeContainerDBins |
| 99 | + run: | |
| 100 | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "git clone http://github.com/containerd/containerd c:\\containerd " |
| 101 | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "cd c:\containerd ; make binaries" |
| 102 | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "git clone http://github.com/Microsoft/hcsshim c:\containerd\hcsshim " |
| 103 | +
|
| 104 | + # Get shim commit from containerd local repo |
| 105 | + SHIM_COMMIT=$(grep 'Microsoft/hcsshim' go.mod | awk '{ print $2 }'); |
| 106 | +
|
| 107 | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "cd c:\containerd\hcsshim; git fetch --tags origin $SHIM_COMMIT ; \ |
| 108 | + git checkout $SHIM_COMMIT ; go build -mod=vendor -o ${{ env.REMOTE_VM_BIN_PATH }}\containerd-shim-runhcs-v1.exe .\cmd\containerd-shim-runhcs-v1" |
| 109 | +
|
| 110 | + - name: RunIntegrationTests |
| 111 | + run: | |
| 112 | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -c 'cd /c/containerd && (make integration | tee /c/Logs/integration.log)'" |
| 113 | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -c 'cat /c/Logs/integration.log | go-junit-report.exe > /c/Logs/junit_00.xml'" |
| 114 | +
|
| 115 | + # CRI-integration tests for Windows PR is not merged. TO DO (adelina-t): enable these when PR #5163 merges. |
| 116 | + # |
| 117 | + # - name: PrepareRepoList |
| 118 | + # run: | |
| 119 | + # ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh -c 'cat > c:/repolist.yaml'" <<'EOF' |
| 120 | + # dockerLibraryRegistry: docker.io/claudiubelu |
| 121 | + # k8sCriContainerdRegistry: docker.io/claudiubelu |
| 122 | + # k8sGcrRegistry: docker.io/claudiubelu |
| 123 | + # EOF |
| 124 | + |
| 125 | + # - name: RunCRIIntegrationTests |
| 126 | + # run: | |
| 127 | + # ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -s" <<EOF |
| 128 | + # cd c:/containerd |
| 129 | + # ./script/setup/install-cni-windows |
| 130 | + # export KUBE_TEST_REPO_LIST=c:/repolist.yaml |
| 131 | + # make cri-integration | tee c:/Logs/cri-integration.log |
| 132 | + # EOF |
| 133 | + # ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -c 'cat c:\Logs\cri-integration.log | go-junit-report.exe > c:/Logs/junit_01.xml' " |
| 134 | + |
| 135 | + - name: PullLogsFromWinNode |
| 136 | + run: | |
| 137 | + scp -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }}:c:/Logs/*.xml ${{ env.LOGS_DIR }}/artifacts/ |
| 138 | + for f in $(ls ${{ env.LOGS_DIR }}/artifacts/*.xml); do |
| 139 | + xmlstarlet ed -d "/testsuites/testsuite/properties" $f > ${{ env.LOGS_DIR }}/$(basename $f) |
| 140 | + mv ${{ env.LOGS_DIR }}/$(basename $f) $f |
| 141 | + done |
| 142 | +
|
| 143 | + - name: FinishJob |
| 144 | + run: | |
| 145 | + jq -n --arg result SUCCESS --arg timestamp $(date +%s) '$timestamp|tonumber|{timestamp:.,$result}' > ${{ env.LOGS_DIR }}/finished.json |
| 146 | + echo "${{ env.STARTED_TIME }}" > $HOME/latest-build.txt |
| 147 | +
|
| 148 | + - name: SetUpCloudSDK |
| 149 | + uses: google-github-actions/setup-gcloud@master |
| 150 | + with: |
| 151 | + project_id: ${{ secrets.GCP_PROJECT_ID }} |
| 152 | + service_account_key: ${{ secrets.GCP_SA_KEY }} |
| 153 | + export_default_credentials: true |
| 154 | + |
| 155 | + - name: UploadArtifacts |
| 156 | + run: | |
| 157 | + gsutil cp -r ${{ env.LOGS_DIR }} ${{ matrix.GOOGLE_BUCKET }} |
| 158 | + gsutil cp $HOME/latest-build.txt ${{ matrix.GOOGLE_BUCKET }} |
| 159 | +
|
| 160 | + - name: ResourceCleanup |
| 161 | + uses: azure/CLI@v1 |
| 162 | + with: |
| 163 | + azcliversion: latest |
| 164 | + inlinescript: | |
| 165 | + az group delete -g ${{ matrix.AZURE_RESOURCE_GROUP }} --yes |
0 commit comments