name: Release Publish on: workflow_dispatch: inputs: version: required: true description: Release version (e.g. 2022.1.0 or 2022.1.0-beta.0) env: RELEASE_VERSION: ${{ github.event.inputs.version }} RELEASE_CORE_TAG: core@${{ github.event.inputs.version }} RELEASE_BRANCH: release/${{ github.event.inputs.version }} IS_PRERELEASE: ${{ contains(github.event.inputs.version, 'alpha') || contains(github.event.inputs.version, 'beta') }} jobs: publish: runs-on: ubuntu-latest steps: - name: Checkout branch # Check out the release branch uses: actions/checkout@v3 with: ref: ${{ env.RELEASE_BRANCH }} fetch-depth: 0 persist-credentials: false - name: Setup Node uses: actions/setup-node@v3 with: node-version-file: '.nvmrc' - name: Bootstrap packages run: npm run bootstrap - name: Download artifact uses: dawidd6/action-download-artifact@v2 with: github_token: ${{secrets.GITHUB_TOKEN}} workflow: release-build.yml workflow_conclusion: success branch: ${{ env.RELEASE_BRANCH }} # Branch workflow ran on != branch the workflow created path: ./artifacts/ - name: Temporarily move Windows artifacts shell: bash run: | mv ./artifacts/windows-latest-artifacts/insomnia/dist/squirrel-windows/Insomnia.Core-${{ env.RELEASE_VERSION }}.exe ./artifacts/ mv ./artifacts/windows-latest-artifacts/insomnia/dist/Insomnia.Core-${{ env.RELEASE_VERSION }}-portable.exe ./artifacts/ - name: Code-sign Windows .exe artifact uses: sslcom/actions-codesigner@develop with: command: sign username: ${{secrets.ES_USERNAME}} password: ${{secrets.ES_PASSWORD}} credential_id: ${{secrets.ES_CREDENTIAL_ID}} totp_secret: ${{secrets.ES_TOTP_SECRET}} file_path: ${GITHUB_WORKSPACE}/artifacts/Insomnia.Core-${{ env.RELEASE_VERSION }}.exe output_path: ${GITHUB_WORKSPACE}/artifacts/windows-latest-artifacts/insomnia/dist/squirrel-windows - name: Code-sign Windows portable .exe artifact uses: sslcom/actions-codesigner@develop with: command: sign username: ${{secrets.ES_USERNAME}} password: ${{secrets.ES_PASSWORD}} credential_id: ${{secrets.ES_CREDENTIAL_ID}} totp_secret: ${{secrets.ES_TOTP_SECRET}} file_path: ${GITHUB_WORKSPACE}/artifacts/Insomnia.Core-${{ env.RELEASE_VERSION }}-portable.exe output_path: ${GITHUB_WORKSPACE}/artifacts/windows-latest-artifacts/insomnia/dist - name: Set Inso CLI version on Github Env run: echo "INSO_VERSION=$(jq .version packages/insomnia-inso/package.json -rj)" >> $GITHUB_ENV - name: Create Release for Inso CLI uses: ncipollo/release-action@v1 id: release_inso_cli with: tag: lib@${{ env.INSO_VERSION }} name: "Inso CLI ${{ env.INSO_VERSION }} 📦" body: "Full changelog ⇒ https://insomnia.rest/changelog" commit: ${{ env.RELEASE_BRANCH }} prerelease: ${{ env.IS_PRERELEASE }} draft: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload Inso CLI artifacts to release uses: xresloader/upload-to-github-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: release_id: ${{ steps.release_inso_cli.outputs.id }} tag_name: lib@${{ env.INSO_VERSION }} file: "./artifacts/*-latest-artifacts/insomnia-inso/artifacts/**" prerelease: ${{ env.IS_PRERELEASE }} draft: false - name: Create Tag and Release uses: ncipollo/release-action@v1 id: core_tag_and_release with: tag: ${{ env.RELEASE_CORE_TAG }} name: "Insomnia ${{ env.RELEASE_VERSION }} 📦" body: "Full changelog ⇒ https://insomnia.rest/changelog" commit: ${{ env.RELEASE_BRANCH }} prerelease: ${{ env.IS_PRERELEASE }} draft: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload artifacts to release uses: xresloader/upload-to-github-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: release_id: ${{ steps.core_tag_and_release.outputs.id }} tag_name: ${{ env.RELEASE_CORE_TAG }} file: "./artifacts/*-latest-artifacts/insomnia/**" prerelease: ${{ env.IS_PRERELEASE }} draft: false - name: Publish beta/stable of Insomnia to Insomnia API if: "!contains(github.event.inputs.version, 'alpha')" run: | curl \ --fail \ --request POST \ --url $INSOMNIA_API_URL/v1/releases \ --header "Authorization: Bearer ${INSOMNIA_API_TOKEN}" \ --header "Content-Type: application/json" \ --data "{ \"app\": \"${RELEASE_APP}\", \"version\": \"${RELEASE_VERSION}\", \"channel\": \"${RELEASE_CHANNEL}\", \"release_date\": \"$(date --rfc-3339=ns | sed 's/ /T/; s/\(\....\).*\([+-]\)/\1\2/g')\" }" env: INSOMNIA_API_URL: ${{ secrets.INSOMNIA_API_URL }} INSOMNIA_API_TOKEN: ${{ secrets.INSOMNIA_API_TOKEN }} RELEASE_APP: com.insomnia.app RELEASE_VERSION: ${{ env.RELEASE_VERSION }} RELEASE_CHANNEL: ${{ contains(github.event.inputs.version, 'beta') && 'beta' || 'stable' }} - name: Publish beta/stable of inso to Insomnia API if: "!contains(github.event.inputs.version, 'alpha')" run: | curl \ --fail \ --request POST \ --url $INSOMNIA_API_URL/v1/releases \ --header "Authorization: Bearer ${INSOMNIA_API_TOKEN}" \ --header "Content-Type: application/json" \ --data "{ \"app\": \"${RELEASE_APP}\", \"version\": \"${RELEASE_VERSION}\", \"channel\": \"${RELEASE_CHANNEL}\", \"release_date\": \"$(date --rfc-3339=ns | sed 's/ /T/; s/\(\....\).*\([+-]\)/\1\2/g')\" }" env: INSOMNIA_API_URL: ${{ secrets.INSOMNIA_API_URL }} INSOMNIA_API_TOKEN: ${{ secrets.INSOMNIA_API_TOKEN }} RELEASE_APP: com.insomnia.inso RELEASE_VERSION: ${{ env.INSO_VERSION }} RELEASE_CHANNEL: ${{ contains(github.event.inputs.version, 'beta') && 'beta' || 'stable' }} - name: Upload to snapcraft (beta and stable only) if: "!contains(github.event.inputs.version, 'alpha')" uses: snapcore/action-publish@7fe468c9de12396a9c8964af5d0dfd1d5b493bd7 env: SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_LOGIN_FILE }} with: snap: artifacts/ubuntu-latest-artifacts/insomnia/dist/Insomnia.Core-${{ env.RELEASE_VERSION }}.snap release: ${{ contains(github.event.inputs.version, 'beta') && 'beta' || 'stable' }} - name: Upload .deb to pulp (stable only) if: ${{ env.IS_PRERELEASE == 'false' }} uses: docker://kong/release-script:latest env: PULP_USERNAME: ${{ secrets.PULP_USERNAME }} PULP_PASSWORD: ${{ secrets.PULP_PASSWORD }} PULP_HOST: ${{ secrets.PULP_HOST }} with: entrypoint: python3 args: '/usr/src/code/main.py release --file artifacts/ubuntu-latest-artifacts/insomnia/dist/Insomnia.Core-${{ env.RELEASE_VERSION }}.deb --dist-name ubuntu --dist-version focal --package-type insomnia --publish' - name: Push Inso CLI docker image tags to Docker Hub run: | echo -n $DOCKER_REGISTRY_TOKEN | docker login -u "$DOCKER_REGISTRY_USER" --password-stdin $DOCKER_REGISTRY docker load -i ./artifacts/ubuntu-latest-artifacts/insomnia-inso/artifacts/inso-docker-image.tar docker tag insomnia-inso:temp ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${{ env.INSO_VERSION }} docker tag insomnia-inso:temp ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${DOCKER_LATEST_TAG} docker push ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${{ env.INSO_VERSION }} docker push ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${DOCKER_LATEST_TAG} env: DOCKER_REGISTRY_TOKEN: ${{ secrets.DOCKER_REGISTRY_TOKEN }} DOCKER_REGISTRY_USER: ${{ secrets.DOCKER_REGISTRY_USER }} DOCKER_REGISTRY: docker.io DOCKER_IMAGE: kong/inso DOCKER_LATEST_TAG: ${{ env.IS_PRERELEASE == 'false' && 'latest' || contains(github.event.inputs.version, 'alpha') && 'alpha' || 'beta' }} - name: Upload sourcemaps to Sentry env: SENTRY_AUTH_TOKEN: '${{ secrets.SENTRY_AUTH_TOKEN }}' SENTRY_ORG: '${{ secrets.SENTRY_ORG }}' SENTRY_PROJECT: '${{ secrets.SENTRY_PROJECT }}' run: | curl -sL https://sentry.io/get-cli/ | SENTRY_CLI_VERSION="2.2.0" bash sentry-cli releases new ${{ env.RELEASE_VERSION }} sentry-cli releases set-commits ${{ env.RELEASE_VERSION }} --commit 'Kong/insomnia@${{ env.RELEASE_BRANCH }}' sentry-cli sourcemaps upload -r ${{ env.RELEASE_VERSION }} ./artifacts/*-latest-sentry - name: Configure Git user uses: Homebrew/actions/git-user-config@master with: username: ${{ (github.event_name == 'workflow_dispatch' && github.actor) || 'insomnia-infra' }} - name: Merge git branch into develop run: | remote_repo="https://${GITHUB_ACTOR}:${RELEASE_GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" git checkout develop git merge --no-ff ${{ env.RELEASE_BRANCH }} git status git push "${remote_repo}" env: RELEASE_GH_TOKEN: ${{ secrets.RELEASE_GH_TOKEN }}