Skip to content

publish-nym-vpn-app #382

publish-nym-vpn-app

publish-nym-vpn-app #382

name: publish-nym-vpn-app
on:
schedule:
- cron: "4 4 * * *"
workflow_dispatch:
inputs:
tag_name:
description: "Tag name for release"
required: false
default: nym-vpn-app-v1.2.3
release_type:
type: choice
description: "Release type, \"stable\" for public releases (signed Windows only), \"nightly\" for nightly build, \"dev\" for any other releases"
options:
- dev
- nightly
- stable
default: dev
required: true
pre_release:
description: "Label as \"Pre-release\""
required: false
type: boolean
default: false
updater:
description: "Enable updater (Windows only) and bump metadata (always enabled for stable releases)"
required: false
type: boolean
default: false
dev_mode:
description: "Enable dev mode (in-app dev menu)"
required: true
type: boolean
default: false
core_release_tag:
description: "nym-vpn-core release tag from GH to use for Windows, to get the daemon"
required: false
type: string
core_artifact_url:
description: "direct nym-vpn-core artifact URL for Windows, to get the daemon"
required: false
type: string
jobs:
build-nym-vpn-app-linux:
uses: ./.github/workflows/build-nym-vpn-app-linux.yml
with:
dev_mode: ${{ github.event_name == 'schedule' || contains(github.ref_name, 'dev') || contains(github.ref_name, 'nightly') || inputs.dev_mode == true }}
secrets: inherit
build-nym-vpn-app-windows:
uses: ./.github/workflows/build-nym-vpn-app-windows.yml
with:
dev_mode: ${{ github.event_name == 'schedule' || contains(github.ref_name, 'dev') || contains(github.ref_name, 'nightly') || inputs.dev_mode == true }}
core_release_tag: ${{ inputs.core_release_tag }}
core_artifact_url: ${{ inputs.core_artifact_url }}
sign: ${{ inputs.release_type == 'stable' }}
updater_bundle: ${{ inputs.updater == true || inputs.release_type == 'stable' }}
updater_channel: ${{ inputs.release_type == 'stable' && 'stable' || 'dev' }}
secrets: inherit
generate-build-info-nym-vpn-app:
uses: ./.github/workflows/generate-build-info-nym-vpn-app.yml
needs: build-nym-vpn-app-linux
with:
build-profile: release
rust-version: ${{ needs.build-nym-vpn-app-linux.outputs.RUST_VERSION }}
publish:
needs:
- build-nym-vpn-app-linux
- build-nym-vpn-app-windows
- generate-build-info-nym-vpn-app
runs-on: ubuntu-22.04
outputs:
release_tag: ${{ steps.set_tag.outputs.tag }}
release_id: ${{ steps.create_release.outputs.id }}
version: ${{ steps.cargo-get.outputs.metadata }}
win_updater_exe: ${{ steps.win_updater.outputs.exe }}
win_updater_sig: ${{ steps.win_updater.outputs.sig }}
env:
# stable | nightly | dev
RELEASE_TYPE: ${{ inputs.release_type || (github.event_name == 'schedule' && 'nightly' || 'dev') }}
# GH needed for gh cli
GH_REPO: ${{ github.repository }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PKG_VERSION: ${{ needs.build-nym-vpn-app-linux.outputs.PKG_VERSION }}
UPLOAD_DIR_UBUNTU_22: ${{ needs.build-nym-vpn-app-linux.outputs.UPLOAD_DIR_LINUX }}
UPLOAD_DIR_WINDOWS: ${{ needs.build-nym-vpn-app-windows.outputs.UPLOAD_DIR_WINDOWS }}
UPDATER_ENABLED: ${{ inputs.updater == true || inputs.release_type == 'stable' }}
permissions: write-all
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Get package version
id: cargo-get
uses: nicolaiunrein/cargo-get@master
with:
subcommand: package.version --entry nym-vpn-app/src-tauri
- name: Check tag name consistency
if: github.event_name == 'push'
shell: bash
run: |
if [[ nym-vpn-app-v${{ steps.cargo-get.outputs.metadata }} != ${{ github.ref_name }} ]]; then
exit 1
fi
- name: Download artifacts
uses: actions/download-artifact@v4
# Setup TAG_NAME, which is used as a general "name"
- if: github.event_name == 'workflow_dispatch'
run: echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV
- if: ${{ env.RELEASE_TYPE == 'nightly' }}
run: echo "TAG_NAME=nym-vpn-app-nightly" >> $GITHUB_ENV
- if: github.event_name == 'push'
run: echo "TAG_NAME=${{ github.ref_name }}" >> $GITHUB_ENV
- name: Set output 'tag'
id: set_tag
run: echo "tag=${{ env.TAG_NAME }}" >> "$GITHUB_OUTPUT"
- name: Set output for updater (Windows)
if: ${{ env.UPDATER_ENABLED == true }}
id: win_updater
working-directory: ${{ env.UPLOAD_DIR_WINDOWS }}
run: |
shopt -s failglob
exe=(*setup.exe)
echo "exe=${exe[0]}" >> "$GITHUB_OUTPUT"
sig=$(head -n 1 *.exe.sig)
echo "sig=$sig" >> "$GITHUB_OUTPUT"
- name: Remove previous nightly release
if: ${{ env.RELEASE_TYPE == 'nightly' }}
run: |
gh release delete nym-vpn-app-nightly --yes || true
git push origin :nym-vpn-app-nightly || true
- name: Generate checksums
run: |
pushd ${{ env.UPLOAD_DIR_UBUNTU_22 }} || exit 1
for f in *; do sha256sum "$f" > "$f.sha256sum"; done
popd
pushd ${{ env.UPLOAD_DIR_WINDOWS }} || exit 1
exe=(*setup.exe)
sha256sum "${exe[0]}" > "${exe[0]}.sha256sum";
popd
echo 'SHA256SUMS<<EOF' >> $GITHUB_ENV
cat ${{ env.UPLOAD_DIR_UBUNTU_22 }}/*.sha256sum >> $GITHUB_ENV
cat ${{ env.UPLOAD_DIR_WINDOWS }}/*.sha256sum >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- name: Build info
run: |
echo 'BUILD_INFO<<EOF' >> $GITHUB_ENV
cat build-info/build-info.txt >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- name: Set release notes header (stable)
if: ${{ env.RELEASE_TYPE == 'stable' }}
env:
EMOJI: ':ship:'
run: echo "RELEASE_NOTES_HEADER='$EMOJI Linux and Windows desktop app'" >> $GITHUB_ENV
- name: Set release notes header (dev)
if: ${{ env.RELEASE_TYPE == 'dev' }}
env:
EMOJI: ':hammer_and_wrench:'
run: echo "RELEASE_NOTES_HEADER='$EMOJI Linux and Windows desktop app, **dev** build'" >> $GITHUB_ENV
- name: Set release notes header (nightly)
if: ${{ env.RELEASE_TYPE == 'nightly' }}
env:
EMOJI: ':night_with_stars:'
run: echo "RELEASE_NOTES_HEADER='$EMOJI Linux and Windows desktop app, **nightly** build'" >> $GITHUB_ENV
- name: Release notes
run: |
{
echo 'RELEASE_NOTES<<EOF'
echo '${{ env.RELEASE_NOTES_HEADER }}
```
${{ env.BUILD_INFO }}
```
SHA256 checksums
```
${{ env.SHA256SUMS }}
```
'
echo EOF
} >> "$GITHUB_ENV"
- name: Create release
id: create_release
uses: softprops/action-gh-release@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
body: ${{ env.RELEASE_NOTES }}
tag_name: ${{ env.TAG_NAME }}
name: ${{ env.TAG_NAME }}
draft: false
make_latest: ${{ env.RELEASE_TYPE == 'stable' }}
prerelease: ${{ env.RELEASE_TYPE != 'stable' || inputs.pre_release }}
target_commitish: ${{ github.sha }}
files: |
${{ env.UPLOAD_DIR_UBUNTU_22}}/*
${{ env.UPLOAD_DIR_WINDOWS}}/*
windows-updater:
uses: ./.github/workflows/tauri-updater.yml
needs: publish
if: ${{ inputs.updater == true || inputs.release_type == 'stable' }}
with:
channel: ${{ inputs.release_type == 'stable' && 'stable' || 'dev' }}
version: ${{ needs.publish.outputs.version }}
platform: 'windows-x86_64'
url: https://github.com/nymtech/nym-vpn-client/releases/download/${{ needs.publish.outputs.release_tag }}/${{ needs.publish.outputs.win_updater_exe }}
signature: ${{ needs.publish.outputs.win_updater_sig }}
gen-hashes:
uses: ./.github/workflows/gen-hashes-json.yml
needs: publish
with:
release_tag: ${{ needs.publish.outputs.release_tag }}
secrets: inherit