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