build-nym-vpn-app-linux #10
Workflow file for this run
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: build-nym-vpn-app-linux | |
on: | |
workflow_dispatch: | |
inputs: | |
dev_mode: | |
description: "dev build" | |
required: true | |
type: boolean | |
default: false | |
workflow_call: | |
inputs: | |
# set to true when it is a 'dev' build | |
dev_mode: | |
required: true | |
type: boolean | |
default: false | |
secrets: | |
TAURI_PRIVATE_KEY: | |
required: true | |
TAURI_KEY_PASSWORD: | |
required: true | |
DESKTOP_JS_SENTRY_DSN: | |
required: true | |
outputs: | |
UPLOAD_DIR_LINUX: | |
value: ${{ jobs.build-linux.outputs.UPLOAD_DIR_LINUX }} | |
PKG_VERSION: | |
value: ${{ jobs.build-linux.outputs.PKG_VERSION }} | |
RUST_VERSION: | |
value: ${{ jobs.build-linux.outputs.RUST_VERSION }} | |
env: | |
CARGO_TERM_COLOR: always | |
UPDATER_BUNDLE_NAME: updater_linux_x86_64.AppImage.tar.gz | |
UPLOAD_DIR_LINUX: linux_artifacts | |
jobs: | |
build-linux: | |
runs-on: arc-ubuntu-22.04 | |
outputs: | |
UPLOAD_DIR_LINUX: ${{ env.UPLOAD_DIR_LINUX }} | |
PKG_VERSION: ${{ steps.package-version.outputs.metadata }} | |
RUST_VERSION: ${{ steps.rust-version.outputs.rustc }} | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4 | |
- name: Install system dependencies | |
run: | | |
sudo apt-get update && sudo apt-get install -y libdbus-1-dev libmnl-dev libnftnl-dev \ | |
libwebkit2gtk-4.1-dev build-essential curl wget libxdo-dev libssl-dev jq \ | |
libgtk-3-dev squashfs-tools libayatana-appindicator3-dev make libfuse2 unzip librsvg2-dev file \ | |
libsoup-3.0-dev libjavascriptcoregtk-4.1-dev desktop-file-utils xdg-utils | |
- name: Install rust toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }} | |
components: rustfmt, clippy | |
- name: Install cargo-license | |
uses: baptiste0928/cargo-install@v3 | |
with: | |
crate: cargo-license | |
- name: Install Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v3 | |
with: | |
version: "21.12" # version on ubuntu 24.04 | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Get package version | |
id: package-version | |
uses: nicolaiunrein/cargo-get@master | |
with: | |
subcommand: package.version --entry nym-vpn-app/src-tauri | |
- name: Get rust version used for build | |
id: rust-version | |
run: | | |
echo "rustc=$(rustc -V)" >> $GITHUB_OUTPUT | |
- name: Install JS dependencies | |
working-directory: nym-vpn-app | |
shell: bash | |
run: npm ci | |
- name: Generate licenses file (Js) | |
working-directory: nym-vpn-app | |
shell: bash | |
run: | | |
rm public/licenses-js.json || true | |
npm run gen:licenses:js | |
- name: Generate licenses file (Rust) | |
working-directory: nym-vpn-app | |
shell: bash | |
run: | | |
rm public/licenses-rust.json || true | |
npm run gen:licenses:rust | |
- name: Build tauri app | |
working-directory: nym-vpn-app/src-tauri | |
env: | |
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} | |
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} | |
APP_SENTRY_DSN: ${{ secrets.DESKTOP_JS_SENTRY_DSN }} | |
DEV_MODE: ${{ inputs.dev_mode == true }} | |
UPDATER_ENABLED: false | |
run: | | |
npm run tauri build | |
ls -la target/release/ || true | |
ls -la target/release/bundle/* || true | |
- name: Rename deb file from NymVPN to nym-vpn-app | |
env: | |
SRC_DEB: nym-vpn-app/src-tauri/target/release/bundle/deb/NymVPN_${{ steps.package-version.outputs.metadata }}_amd64.deb | |
run: | | |
./scripts/rename-nym-vpn-app-deb.sh $SRC_DEB | |
- name: Move things around to prepare for upload | |
env: | |
SRC_APPIMAGE: nym-vpn-app/src-tauri/target/release/bundle/appimage/NymVPN_${{ steps.package-version.outputs.metadata }}_amd64.AppImage | |
DST_APPIMAGE: NymVPN_${{ steps.package-version.outputs.metadata }}_x64.AppImage | |
SRC_DEB: nym-vpn-app_${{ steps.package-version.outputs.metadata }}_amd64.deb | |
SRC_BIN: nym-vpn-app/src-tauri/target/release/nym-vpn-app | |
DST_BIN: nym-vpn_${{ steps.package-version.outputs.metadata }}_linux_x64 | |
run: | | |
mkdir ${{ env.UPLOAD_DIR_LINUX }} | |
echo "Copy AppImage" | |
cp -vpr ${{ env.SRC_APPIMAGE }} ${{ env.UPLOAD_DIR_LINUX }}/${{ env.DST_APPIMAGE }} | |
#echo "Copy updater bundle and signature" | |
#cp -vpr ${{ env.SRC_APPIMAGE }}.tar.gz ${{ env.UPLOAD_DIR_LINUX }}/${{ env.UPDATER_BUNDLE_NAME }} | |
#cp -vpr ${{ env.SRC_APPIMAGE }}.tar.gz.sig ${{ env.UPLOAD_DIR_LINUX }}/${{ env.UPDATER_BUNDLE_NAME }}.sig | |
echo "Copy debian pkg" | |
cp -vpr ${{ env.SRC_DEB }} ${{ env.UPLOAD_DIR_LINUX }} | |
echo "Copy plain binary" | |
cp -vpr ${{ env.SRC_BIN }} ${{ env.UPLOAD_DIR_LINUX }}/${{ env.DST_BIN }} | |
# Repack AppImage using appimagetool to drop libfuse2 dependency (EOL) | |
- name: Repack AppImage | |
env: | |
APP_IMAGE: NymVPN_${{ steps.package-version.outputs.metadata }}_x64.AppImage | |
REPACK_DIR: ${{ github.workspace }}/appimage_repack | |
run: | | |
mkdir ${{ env.REPACK_DIR }} | |
mv ${{ env.UPLOAD_DIR_LINUX }}/${{ env.APP_IMAGE }} ${{ env.REPACK_DIR }}/ | |
cd ${{ env.REPACK_DIR }} || exit 1 | |
curl -SsfLo appimagetool.AppImage https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage | |
chmod +x ./appimagetool.AppImage | |
./${{ env.APP_IMAGE }} --appimage-extract && rm -f ${{ env.APP_IMAGE }} | |
./appimagetool.AppImage --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 20 \ | |
-n ./squashfs-root ${{ env.APP_IMAGE }} | |
mv ${{ env.APP_IMAGE }} ${{ github.workspace }}/${{ env.UPLOAD_DIR_LINUX }}/${{ env.APP_IMAGE }} | |
rm -rf ${{ env.REPACK_DIR }} | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.UPLOAD_DIR_LINUX }} | |
path: ${{ env.UPLOAD_DIR_LINUX }} | |
if-no-files-found: error | |
retention-days: 1 |