github.com/kubeshop/testkube@v1.17.23/.github/workflows/release-dev.yaml (about) 1 name: Release kubectl-testkube dev 2 3 on: 4 push: 5 tags: 6 - "v[0-9]+.[0-9]+.[0-9]+-*" 7 8 permissions: 9 id-token: write # needed for keyless signing 10 contents: write 11 12 env: 13 ALPINE_IMAGE: alpine:3.18.0 14 BUSYBOX_IMAGE: busybox:1.36.1-musl 15 16 jobs: 17 pre_build: 18 name: Pre-build 19 runs-on: ubuntu-latest 20 strategy: 21 matrix: 22 include: 23 - name: "linux" 24 path: .builds-linux.goreleaser.yml 25 - name: "windows" 26 path: .builds-windows.goreleaser.yml 27 - name: "darwin" 28 path: .builds-darwin.goreleaser.yml 29 steps: 30 - name: Checkout 31 uses: actions/checkout@v2 32 with: 33 fetch-depth: 0 34 35 - name: Set up QEMU 36 if: matrix.name == 'linux' 37 uses: docker/setup-qemu-action@v1 38 39 - name: Set up Docker Buildx 40 if: matrix.name == 'linux' 41 id: buildx 42 uses: docker/setup-buildx-action@v1 43 44 - name: Set up Go 45 uses: actions/setup-go@v2 46 with: 47 go-version: 1.21 48 49 - name: Go Cache 50 uses: actions/cache@v2 51 with: 52 path: | 53 ~/go/pkg/mod 54 ~/.cache/go-build 55 key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} 56 restore-keys: | 57 ${{ runner.os }}-go- 58 59 - name: Login to DockerHub 60 if: matrix.name == 'linux' 61 uses: docker/login-action@v1 62 with: 63 username: ${{ secrets.DOCKERHUB_USERNAME }} 64 password: ${{ secrets.DOCKERHUB_TOKEN }} 65 66 - name: Get tag 67 id: tag 68 uses: dawidd6/action-get-tag@v1 69 with: 70 strip_v: true 71 72 - name: Run GoReleaser 73 uses: goreleaser/goreleaser-action@v4 74 with: 75 distribution: goreleaser-pro 76 version: latest 77 args: release -f ${{ matrix.path }} --skip-publish 78 env: 79 GITHUB_TOKEN: ${{ secrets.CI_BOT_TOKEN }} 80 ANALYTICS_TRACKING_ID: "${{secrets.TESTKUBE_CLI_GA_MEASUREMENT_ID}}" 81 ANALYTICS_API_KEY: "${{secrets.TESTKUBE_CLI_GA_MEASUREMENT_SECRET}}" 82 # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' distribution 83 GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} 84 DOCKER_BUILDX_BUILDER: "${{ steps.buildx.outputs.name }}" 85 DOCKER_BUILDX_CACHE_FROM: "type=gha" 86 DOCKER_BUILDX_CACHE_TO: "type=gha,mode=max" 87 ALPINE_IMAGE: ${{ env.ALPINE_IMAGE }} 88 BUSYBOX_IMAGE: ${{ env.BUSYBOX_IMAGE }} 89 DOCKER_IMAGE_TAG: ${{steps.tag.outputs.tag}} 90 91 - name: Push Docker images 92 if: matrix.name == 'linux' 93 run: | 94 docker push kubeshop/testkube-cli:${{steps.tag.outputs.tag}}-arm64v8 95 docker push kubeshop/testkube-cli:${{steps.tag.outputs.tag}}-amd64 96 97 # adding the docker manifest for the latest image tag 98 docker manifest create kubeshop/testkube-cli:latest --amend kubeshop/testkube-cli:${{steps.tag.outputs.tag}}-amd64 --amend kubeshop/testkube-cli:${{steps.tag.outputs.tag}}-arm64v8 99 docker manifest push -p kubeshop/testkube-cli:latest 100 101 docker manifest create kubeshop/testkube-cli:${{steps.tag.outputs.tag}} --amend kubeshop/testkube-cli:${{steps.tag.outputs.tag}}-amd64 --amend kubeshop/testkube-cli:${{steps.tag.outputs.tag}}-arm64v8 102 docker manifest push -p kubeshop/testkube-cli:${{steps.tag.outputs.tag}} 103 104 - name: Push README to Dockerhub 105 if: matrix.name == 'linux' 106 uses: christian-korneck/update-container-description-action@v1 107 env: 108 DOCKER_USER: ${{ secrets.DOCKERHUB_USERNAME }} 109 DOCKER_PASS: ${{ secrets.DOCKERHUB_TOKEN }} 110 with: 111 destination_container_repo: kubeshop/testkube-cli 112 provider: dockerhub 113 short_description: "Testkube CLI Docker image" 114 readme_file: "./README.md" 115 116 - name: Upload Artifacts 117 uses: actions/upload-artifact@master 118 with: 119 name: testkube_${{ matrix.name }} 120 path: | 121 ${{ matrix.name }}/testkube_${{ matrix.name }}_* 122 retention-days: 1 123 124 release: 125 name: Create and upload release-artifacts 126 needs: pre_build 127 runs-on: ubuntu-latest 128 steps: 129 - name: Checkout 130 uses: actions/checkout@v3 131 with: 132 fetch-depth: 0 133 - uses: sigstore/cosign-installer@v3.4.0 134 - uses: anchore/sbom-action/download-syft@v0.14.2 135 - name: Download Artifacts for Linux 136 uses: actions/download-artifact@master 137 with: 138 name: testkube_linux 139 path: linux 140 - name: Download Artifacts for Windows 141 uses: actions/download-artifact@master 142 with: 143 name: testkube_windows 144 path: windows 145 - name: Download Artifacts for Darwin 146 uses: actions/download-artifact@master 147 with: 148 name: testkube_darwin 149 path: darwin 150 # Added as a workaround since files lose their permissions when being moved from one stage to another in GH. A bug was reported 151 # and will be fixed in the next release of GoReleaser, thus we will be able to remove this code. 152 - name: Add executable mode 153 run: chmod -R +x linux/ darwin/ 154 - name: Set up Go 155 uses: actions/setup-go@v2 156 with: 157 go-version: 1.21 158 - name: Go Cache 159 uses: actions/cache@v2 160 with: 161 path: | 162 ~/go/pkg/mod 163 ~/.cache/go-build 164 key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} 165 restore-keys: | 166 ${{ runner.os }}-go- 167 - name: Run GoReleaser 168 uses: goreleaser/goreleaser-action@v2 169 with: 170 distribution: goreleaser-pro 171 version: latest 172 args: release -f .goreleaser-dev.yml 173 env: 174 GITHUB_TOKEN: ${{ secrets.CI_BOT_TOKEN }} 175 ANALYTICS_TRACKING_ID: "${{secrets.TESTKUBE_CLI_GA_MEASUREMENT_ID}}" 176 ANALYTICS_API_KEY: "${{secrets.TESTKUBE_CLI_GA_MEASUREMENT_SECRET}}" 177 SLACK_BOT_CLIENT_ID: "${{secrets.TESTKUBE_SLACK_BOT_CLIENT_ID}}" 178 SLACK_BOT_CLIENT_SECRET: "${{secrets.TESTKUBE_SLACK_BOT_CLIENT_SECRET}}" 179 # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' distribution 180 GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} 181 - name: Store Intermediate Artifacts 182 uses: actions/upload-artifact@master 183 with: 184 name: bin-artifacts 185 path: dist 186 retention-days: 1 187 188 build-and-publish-windows-installer: 189 needs: release 190 runs-on: windows-latest 191 192 steps: 193 - name: Checkout 194 uses: actions/checkout@v3 195 with: 196 fetch-depth: 0 197 198 - name: Get Intermediate Artifacts 199 uses: actions/download-artifact@master 200 with: 201 name: testkube_windows 202 path: windows 203 204 - name: Get MSFT Cert 205 id: write_file 206 uses: timheuer/base64-to-file@v1.1 207 with: 208 fileName: "kubeshop_msft.p12" 209 fileDir: "./temp/" 210 encodedString: ${{ secrets.CERT_MSFT_KUBESHOP_P12_B64 }} 211 212 - name: Create and Sign MSI 213 run: | 214 Copy-Item 'windows\testkube_windows_386\kubectl-testkube.exe' '.\kubectl-testkube.exe' 215 Copy-Item 'build\installer\windows\testkube.wxs' '.\testkube.wxs' 216 Copy-Item 'build\installer\windows\tk.bat' '.\tk.bat' 217 Copy-Item 'build\installer\windows\testkube.bat' '.\testkube.bat' 218 & "$env:WIX\bin\candle.exe" *.wxs 219 & "$env:WIX\bin\light.exe" *.wixobj 220 & "C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\signtool.exe" sign /f "$env:P12_CERT" /p "$env:P12_PASSWORD" /d "Kubetest by Kubeshop" /tr http://timestamp.digicert.com testkube.msi 221 env: 222 P12_CERT: ${{ steps.write_file.outputs.filePath }} 223 P12_PASSWORD: ${{ secrets.CERT_MSFT_KUBESHOP_P12_PASSWORD }} 224 225 - name: Get tag 226 id: tag 227 uses: dawidd6/action-get-tag@v1 228 with: 229 # Optionally strip `v` prefix 230 strip_v: true 231 232 - name: Get release 233 id: get_release 234 uses: bruceadams/get-release@v1.2.3 235 env: 236 GITHUB_TOKEN: ${{ github.token }} 237 238 - name: Calculate Checksum 239 id: checksum 240 run: | 241 $installer_name = $env:MSI_NAME 242 $hash=Get-FileHash testkube.msi 243 $hash.Hash + " " + $installer_name + ".msi" >> msi_checksum.txt 244 echo "::set-output name=INSTALLER_NAME::${installer_name}" 245 246 #export MSI hash to environment 247 $hashsum = $hash.Hash 248 echo "::set-output name=CHECKSUM::${hashsum}" 249 250 #copy MSI to choco directory to build a nuget package 251 Copy-Item -Path "testkube.msi" -Destination ".\choco\tools\$env:MSI_NAME.msi" 252 env: 253 MSI_NAME: testkube_${{steps.tag.outputs.tag}}_Windows_i386 254 255 - name: Upload release binary 256 uses: actions/upload-release-asset@v1.0.2 257 env: 258 GITHUB_TOKEN: ${{ github.token }} 259 with: 260 upload_url: ${{ steps.get_release.outputs.upload_url }} 261 asset_path: testkube.msi 262 asset_name: ${{steps.checksum.outputs.INSTALLER_NAME}}.msi 263 asset_content_type: application/octet-stream 264 265 - name: Upload Checksum 266 uses: actions/upload-release-asset@v1.0.2 267 env: 268 GITHUB_TOKEN: ${{ github.token }} 269 with: 270 upload_url: ${{ steps.get_release.outputs.upload_url }} 271 asset_path: msi_checksum.txt 272 asset_name: ${{steps.checksum.outputs.INSTALLER_NAME}}_checksum.txt 273 asset_content_type: text/plain 274 275 # build-and-publish-linux-installer: 276 # needs: release 277 # runs-on: ubuntu-latest 278 279 # steps: 280 # - name: Get Intermediate Artifacts 281 # uses: actions/download-artifact@master 282 # with: 283 # name: bin-artifacts 284 # path: dist 285 286 # - name: Get tag 287 # id: tag 288 # uses: dawidd6/action-get-tag@v1 289 # with: 290 # strip_v: true 291 292 # - name: Publish package 293 # env: 294 # USERNAME: "aptly" 295 # PASSWORD: ${{ secrets.APTLY_PASSWORD }} 296 # APTLY_URL: "repo.testkube.io:8080" 297 # VERSION: ${{steps.tag.outputs.tag}} 298 # run: | 299 # ### Upload files 300 # curl --fail-with-body -u ${USERNAME}:${PASSWORD} -X POST -F file=@dist/testkube_${VERSION}_linux_386.deb http://${APTLY_URL}/api/files/testkube 301 # curl --fail-with-body -u ${USERNAME}:${PASSWORD} -X POST -F file=@dist/testkube_${VERSION}_linux_arm64.deb http://${APTLY_URL}/api/files/testkube 302 # curl --fail-with-body -u ${USERNAME}:${PASSWORD} -X POST -F file=@dist/testkube_${VERSION}_linux_amd64.deb http://${APTLY_URL}/api/files/testkube 303 304 # ### Add file to repo 305 # curl --fail-with-body -u ${USERNAME}:${PASSWORD} -X POST http://${APTLY_URL}/api/repos/testkube/file/testkube?forceReplace=1 306 307 # ### Create snapshot 308 # curl --fail-with-body -u ${USERNAME}:${PASSWORD} -X POST -H 'Content-Type: application/json' --data '{"Name":"testkube-'${VERSION}'"}' http://${APTLY_URL}/api/repos/testkube/snapshots 309 310 # ### Publish repo 311 # curl --fail-with-body -u ${USERNAME}:${PASSWORD} -X PUT -H 'Content-Type: application/json' --data '{"Snapshots": [{"Component": "main", "Name": "testkube-'${VERSION}'"}]}'}], http://repo.testkube.io:8080/api/publish/:linux/linux 312 313 trigger-deploy-to-dev-env: 314 needs: release 315 runs-on: ubuntu-latest 316 317 steps: 318 - name: Repository Dispatch 319 uses: peter-evans/repository-dispatch@v2 320 with: 321 token: ${{ secrets.CI_BOT_TOKEN }} 322 repository: kubeshop/helm-charts 323 event-type: trigger-helm-chart-deployment-to-develop-cluster