File: release.yml

package info (click to toggle)
containerd 2.1.4~ds2-5
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 21,772 kB
  • sloc: sh: 1,885; makefile: 591
file content (166 lines) | stat: -rw-r--r-- 6,525 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
on:
  push:
    branches:
      - main
      - "release/**"
    tags:
      - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10
  pull_request:
    branches:
      - main
      - "release/**"

name: Release

env:
  GO_VERSION: "1.23.11"

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/v')
    runs-on: ubuntu-24.04
    timeout-minutes: 5
    outputs:
      stringver: ${{ steps.contentrel.outputs.stringver }}

    steps:
      - name: Checkout code
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        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/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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: containerd-release-notes
          path: src/github.com/containerd/containerd/release-notes.md

  build:
    name: Build Release Binaries
    runs-on: ubuntu-24.04
    timeout-minutes: 30
    strategy:
      matrix:
        include:
          - dockerfile-ubuntu: 22.04
            dockerfile-platform: linux/amd64
          - dockerfile-ubuntu: 22.04
            dockerfile-platform: linux/arm64
          - dockerfile-ubuntu: 22.04
            dockerfile-platform: linux/ppc64le
          - dockerfile-ubuntu: 22.04
            dockerfile-platform: linux/s390x
          - dockerfile-ubuntu: 22.04
            dockerfile-platform: linux/riscv64
          - dockerfile-ubuntu: 22.04
            dockerfile-platform: windows/amd64
    steps:
      - name: Set RELEASE_VER
        if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
        shell: bash
        run: |
          releasever=${{ github.ref }}
          releasever="${releasever#refs/tags/}"
          echo "RELEASE_VER=${releasever}" >> $GITHUB_ENV
      - name: Checkout containerd
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          # Intentionally use github.repository instead of containerd/containerd to
          # make this action runnable on forks.
          # See https://github.com/containerd/containerd/issues/5098 for the context.
          repository: ${{ github.repository }}
          ref: ${{ github.ref }}
          path: src/github.com/containerd/containerd

      - name: Setup buildx instance
        uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
        with:
          use: true
      - uses: crazy-max/ghaction-github-runtime@3cb05d89e1f492524af3d41a1c98c83bc3025124 # v3.1.0
      - name: Make
        shell: bash
        run: |
          cache="--cache-from=type=gha,scope=containerd-release --cache-to=type=gha,scope=containerd-release"
          if [[ "${PLATFORM}" =~ "windows" ]]; then
            # For Windows the cni build script generates a config but shells out to powershell (and also assume it is running on windows) to get a gateway and subnet.
            # The values provided here are taken from packages that we previously generated.
            export GATEWAY=172.21.16.1
            export PREFIX_LEN=12
            BUILD_ARGS="--build-arg GATEWAY --build-arg PREFIX_LEN"
          fi
          docker buildx build ${cache} --build-arg RELEASE_VER --build-arg UBUNTU_VERSION=${{ matrix.dockerfile-ubuntu }} --build-arg GO_VERSION ${BUILD_ARGS} -f .github/workflows/release/Dockerfile --platform=${PLATFORM} -o releases/ .
          echo PLATFORM_CLEAN=${PLATFORM/\//-} >> $GITHUB_ENV

          # Remove symlinks since we don't want these in the release Artifacts (if any)
          find ./releases/ -maxdepth 1 -type l | xargs rm -f
        working-directory: src/github.com/containerd/containerd
        env:
          PLATFORM: ${{ matrix.dockerfile-platform }}
      - name: Save Artifacts
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: release-tars-${{env.PLATFORM_CLEAN}}
          path: src/github.com/containerd/containerd/releases/*.tar.gz*

  release:
    name: Create containerd Release
    if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
    permissions:
      contents: write
      id-token: write
      attestations: write
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    needs: [build, check]
    steps:
      - name: Download builds and release notes
        uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
        with:
          path: builds
      - name: Attest Artifacts
        id: attest
        uses: actions/attest-build-provenance@db473fddc028af60658334401dc6fa3ffd8669fd # v2.3.0
        with:
          subject-path: ./builds/release-tars-**/*.tar.gz
      - name: Rename attestation artifact
        run: mv ${{ steps.attest.outputs.bundle-path }} containerd-${{ needs.check.outputs.stringver }}-attestation.intoto.jsonl
      - name: Create Release
        uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          fail_on_unmatched_files: true
          name: containerd ${{ needs.check.outputs.stringver }}
          draft: false
          prerelease: ${{ contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
          body_path: ./builds/containerd-release-notes/release-notes.md
          files: |
            builds/release-tars-**/*
            containerd-*-attestation.intoto.jsonl
          make_latest: true