publish-nym-vpn-app #382
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |