From b811a88793f76b2d58a5644aea87291219dbad7b Mon Sep 17 00:00:00 2001 From: Derek McGowan Date: Fri, 3 May 2024 15:24:04 -0700 Subject: [PATCH] Add API release action Signed-off-by: Derek McGowan --- .github/workflows/api-release.yml | 80 +++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 .github/workflows/api-release.yml diff --git a/.github/workflows/api-release.yml b/.github/workflows/api-release.yml new file mode 100644 index 000000000..86360a203 --- /dev/null +++ b/.github/workflows/api-release.yml @@ -0,0 +1,80 @@ +on: + push: + tags: + - "api/v*" # Push events to matching api/v*, i.e. api/v1.0, api/v20.15.10 + +name: API Release + +env: + GO_VERSION: "1.22.2" + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read + +jobs: + check: + name: Check Signed Tag + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/api/v') + runs-on: ubuntu-20.04 + timeout-minutes: 5 + outputs: + stringver: ${{ steps.contentrel.outputs.stringver }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} + path: src/github.com/containerd/containerd + + - name: Check signature + run: | + releasever=${{ github.ref }} + releasever="${releasever#refs/tags/}" + TAGCHECK=$(git tag -v ${releasever} 2>&1 >/dev/null) || + echo "${TAGCHECK}" | grep -q "error" && { + echo "::error::tag ${releasever} is not a signed tag. Failing release process." + exit 1 + } || { + echo "Tag ${releasever} is signed." + exit 0 + } + working-directory: src/github.com/containerd/containerd + + - name: Release content + id: contentrel + run: | + RELEASEVER=${{ github.ref }} + echo "stringver=${RELEASEVER#refs/tags/api/v}" >> $GITHUB_OUTPUT + git tag -l ${RELEASEVER#refs/tags/} -n20000 | tail -n +3 | cut -c 5- >release-notes.md + working-directory: src/github.com/containerd/containerd + + - name: Save release notes + uses: actions/upload-artifact@v4 + with: + name: containerd-release-notes + path: src/github.com/containerd/containerd/release-notes.md + + release: + name: Create containerd Release + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/api/v') + permissions: + contents: write + runs-on: ubuntu-20.04 + timeout-minutes: 10 + needs: [check] + steps: + - name: Download release notes + uses: actions/download-artifact@v4 + with: + path: builds + - name: Create Release + uses: softprops/action-gh-release@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + fail_on_unmatched_files: true + name: containerd API ${{ needs.check.outputs.stringver }} + draft: false + make_latest: false + prerelease: ${{ contains(github.ref, 'beta') || contains(github.ref, 'rc') }} + body_path: ./builds/containerd-release-notes/release-notes.md