1on: 2 push: 3 tags: 4 - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 5 6name: Containerd Release 7 8jobs: 9 check: 10 name: Check Signed Tag 11 runs-on: ubuntu-18.04 12 timeout-minutes: 5 13 outputs: 14 stringver: ${{ steps.contentrel.outputs.stringver }} 15 16 steps: 17 - name: Checkout code 18 uses: actions/checkout@v2 19 with: 20 ref: ${{ github.ref }} 21 path: src/github.com/containerd/containerd 22 23 - name: Check signature 24 run: | 25 releasever=${{ github.ref }} 26 releasever="${releasever#refs/tags/}" 27 TAGCHECK=$(git tag -v ${releasever} 2>&1 >/dev/null) || 28 echo "${TAGCHECK}" | grep -q "error" && { 29 echo "::error::tag ${releasever} is not a signed tag. Failing release process." 30 exit 1 31 } || { 32 echo "Tag ${releasever} is signed." 33 exit 0 34 } 35 working-directory: src/github.com/containerd/containerd 36 37 - name: Release content 38 id: contentrel 39 run: | 40 RELEASEVER=${{ github.ref }} 41 echo "::set-output name=stringver::${RELEASEVER#refs/tags/v}" 42 git tag -l ${RELEASEVER#refs/tags/} -n20000 | tail -n +3 | cut -c 5- >release-notes.md 43 working-directory: src/github.com/containerd/containerd 44 45 - name: Save release notes 46 uses: actions/upload-artifact@v2 47 with: 48 name: containerd-release-notes 49 path: src/github.com/containerd/containerd/release-notes.md 50 51 build: 52 name: Build Release Binaries 53 runs-on: ${{ matrix.os }} 54 needs: [check] 55 timeout-minutes: 10 56 57 strategy: 58 matrix: 59 os: [ubuntu-18.04, windows-2019] 60 61 steps: 62 - name: Install Go 63 uses: actions/setup-go@v2 64 with: 65 go-version: '1.16.8' 66 67 - name: Set env 68 shell: bash 69 env: 70 MOS: ${{ matrix.os }} 71 run: | 72 releasever=${{ github.ref }} 73 releasever="${releasever#refs/tags/}" 74 os=linux 75 [[ "${MOS}" =~ "windows" ]] && { 76 os=windows 77 } 78 echo "RELEASE_VER=${releasever}" >> $GITHUB_ENV 79 echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV 80 echo "OS=${os}" >> $GITHUB_ENV 81 echo "${{ github.workspace }}/bin" >> $GITHUB_PATH 82 83 - name: Checkout containerd 84 uses: actions/checkout@v2 85 with: 86 repository: containerd/containerd 87 ref: ${{ github.ref }} 88 path: src/github.com/containerd/containerd 89 90 - name: HCS Shim commit 91 id: hcsshim_commit 92 if: startsWith(matrix.os, 'windows') 93 shell: bash 94 run: echo "::set-output name=sha::$(grep 'Microsoft/hcsshim ' go.mod | awk '{print $2}')" 95 working-directory: src/github.com/containerd/containerd 96 97 - name: Checkout hcsshim source 98 if: startsWith(matrix.os, 'windows') 99 uses: actions/checkout@v2 100 with: 101 repository: Microsoft/hcsshim 102 ref: ${{ steps.hcsshim_commit.outputs.sha }} 103 path: src/github.com/Microsoft/hcsshim 104 105 - name: Make 106 shell: bash 107 run: | 108 make build 109 make binaries 110 rm bin/containerd-stress* 111 [[ "${OS}" == "windows" ]] && { 112 ( 113 bindir="$(pwd)/bin" 114 cd ../../Microsoft/hcsshim 115 GO111MODULE=on go build -mod=vendor -o "${bindir}/containerd-shim-runhcs-v1.exe" ./cmd/containerd-shim-runhcs-v1 116 ) 117 } 118 TARFILE="containerd-${RELEASE_VER#v}-${OS}-amd64.tar.gz" 119 tar czf ${TARFILE} bin/ 120 sha256sum ${TARFILE} >${TARFILE}.sha256sum 121 working-directory: src/github.com/containerd/containerd 122 123 - name: Save build binaries 124 uses: actions/upload-artifact@v2 125 with: 126 name: containerd-binaries-${{ matrix.os }} 127 path: src/github.com/containerd/containerd/*.tar.gz* 128 129 - name: Make cri-containerd tar 130 shell: bash 131 env: 132 RUNC_FLAVOR: runc 133 run: | 134 if [[ "${OS}" == "linux" ]]; then 135 sudo apt-get update 136 sudo apt-get install -y gperf 137 sudo -E PATH=$PATH script/setup/install-seccomp 138 fi 139 make cri-cni-release 140 working-directory: src/github.com/containerd/containerd 141 142 - name: Save cri-containerd binaries 143 uses: actions/upload-artifact@v2 144 with: 145 name: cri-containerd-binaries-${{ matrix.os }} 146 path: src/github.com/containerd/containerd/releases/cri-containerd-cni-*.tar.gz* 147 148 release: 149 name: Create containerd Release 150 runs-on: ubuntu-18.04 151 timeout-minutes: 10 152 needs: [build, check] 153 154 steps: 155 - name: Download builds and release notes 156 uses: actions/download-artifact@v2 157 with: 158 path: builds 159 - name: Catalog build assets for upload 160 id: catalog 161 run: | 162 _filenum=1 163 for i in "ubuntu-18.04" "windows-2019"; do 164 for f in `ls builds/containerd-binaries-${i}`; do 165 echo "::set-output name=file${_filenum}::${f}" 166 let "_filenum+=1" 167 done 168 for f in `ls builds/cri-containerd-binaries-${i}`; do 169 echo "::set-output name=file${_filenum}::${f}" 170 let "_filenum+=1" 171 done 172 done 173 - name: Create Release 174 id: create_release 175 uses: actions/create-release@v1.1.2 176 env: 177 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 178 with: 179 tag_name: ${{ github.ref }} 180 release_name: containerd ${{ needs.check.outputs.stringver }} 181 body_path: ./builds/containerd-release-notes/release-notes.md 182 draft: false 183 prerelease: ${{ contains(github.ref, 'beta') || contains(github.ref, 'rc') }} 184 - name: Upload Linux containerd tarball 185 uses: actions/upload-release-asset@v1 186 env: 187 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 188 with: 189 upload_url: ${{ steps.create_release.outputs.upload_url }} 190 asset_path: ./builds/containerd-binaries-ubuntu-18.04/${{ steps.catalog.outputs.file1 }} 191 asset_name: ${{ steps.catalog.outputs.file1 }} 192 asset_content_type: application/gzip 193 - name: Upload Linux sha256 sum 194 uses: actions/upload-release-asset@v1 195 env: 196 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 197 with: 198 upload_url: ${{ steps.create_release.outputs.upload_url }} 199 asset_path: ./builds/containerd-binaries-ubuntu-18.04/${{ steps.catalog.outputs.file2 }} 200 asset_name: ${{ steps.catalog.outputs.file2 }} 201 asset_content_type: text/plain 202 - name: Upload Linux cri containerd tarball 203 uses: actions/upload-release-asset@v1 204 env: 205 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 206 with: 207 upload_url: ${{ steps.create_release.outputs.upload_url }} 208 asset_path: ./builds/cri-containerd-binaries-ubuntu-18.04/${{ steps.catalog.outputs.file3 }} 209 asset_name: ${{ steps.catalog.outputs.file3 }} 210 asset_content_type: application/gzip 211 - name: Upload Linux cri sha256 sum 212 uses: actions/upload-release-asset@v1 213 env: 214 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 215 with: 216 upload_url: ${{ steps.create_release.outputs.upload_url }} 217 asset_path: ./builds/cri-containerd-binaries-ubuntu-18.04/${{ steps.catalog.outputs.file4 }} 218 asset_name: ${{ steps.catalog.outputs.file4 }} 219 asset_content_type: text/plain 220 - name: Upload Windows containerd tarball 221 uses: actions/upload-release-asset@v1 222 env: 223 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 224 with: 225 upload_url: ${{ steps.create_release.outputs.upload_url }} 226 asset_path: ./builds/containerd-binaries-windows-2019/${{ steps.catalog.outputs.file5 }} 227 asset_name: ${{ steps.catalog.outputs.file5 }} 228 asset_content_type: application/gzip 229 - name: Upload Windows sha256 sum 230 uses: actions/upload-release-asset@v1 231 env: 232 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 233 with: 234 upload_url: ${{ steps.create_release.outputs.upload_url }} 235 asset_path: ./builds/containerd-binaries-windows-2019/${{ steps.catalog.outputs.file6 }} 236 asset_name: ${{ steps.catalog.outputs.file6 }} 237 asset_content_type: text/plain 238 - name: Upload Windows cri containerd tarball 239 uses: actions/upload-release-asset@v1 240 env: 241 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 242 with: 243 upload_url: ${{ steps.create_release.outputs.upload_url }} 244 asset_path: ./builds/cri-containerd-binaries-windows-2019/${{ steps.catalog.outputs.file7 }} 245 asset_name: ${{ steps.catalog.outputs.file7 }} 246 asset_content_type: application/gzip 247 - name: Upload Windows cri sha256 sum 248 uses: actions/upload-release-asset@v1 249 env: 250 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 251 with: 252 upload_url: ${{ steps.create_release.outputs.upload_url }} 253 asset_path: ./builds/cri-containerd-binaries-windows-2019/${{ steps.catalog.outputs.file8 }} 254 asset_name: ${{ steps.catalog.outputs.file8 }} 255 asset_content_type: text/plain 256