mirror of
https://github.com/outbackdingo/amnezia-client.git
synced 2026-01-27 10:18:14 +00:00
* There's a common issue of building iOS apps on Qt 6.8 because of new introduced ffmpeg dependency in multimedia Qt package ref: https://community.esri.com/t5/qt-maps-sdk-questions/build-failure-on-ios-with-qt-6-8/m-p/1548701#M5339 * Cmake related changes * Source code changes * Various entitlements * Ci-cd config update * Resources changes * Submodules updated * Remove me * QtWidget exclusion omitted * Distribution errors fixed * Outdated files deleted * macos_ne cmake fixed * fix: update provisioning profile specifiers for macOS network extension * fix: update provisioning profile specifiers and code sign flags for macOS build * Revert me (temporary 3rd-build commit pointer) * fix: Welcome screen fix * fix: ci/cd hanging forever fix * fix: Fixed error popup on macos on file save * refactor: rename networkextension target to AmneziaVPNNetworkExtension in macos build configuration * feat: add autostart support for Mac App Store builds on macOS Fixes: QA-8 * feat: add debug logging to Autostart functionality on macOS * Revert "feat: add autostart support for Mac App Store builds on macOS" This reverts commit 3bd25656fb4986d01e5bd6dd265f7279a73bd2a8. * feat: add platform-specific close window behavior for macOS App Store build with Network Extension Closes: QA-12 * When the application starts with "Start minimized" enabled on macOS (especially the sandboxed App-Store build compiled with MACOS_NE), fully hiding the window prevents it from being restored by clicking the Dock icon. The proper behaviour is to start the window in the *minimized* state instead. That way the window is still part of the window list and the system automatically brings it back when the user clicks the Dock icon, replicating the native experience. On the other platforms we keep the old behaviour (hide the window completely and rely on the tray icon), therefore we switch at runtime by checking the current OS. Closes: QA-7 Closes: QA-8 * Revert "When the application starts with "Start minimized" enabled on macOS (especially the" This reverts commit 7b0d17987cdfdbc4cedc3822bf3fd2e4973da452. * feat: MACOS_NE systray menu support * feat: add macOS notification handler and install event filter on main window * feat: implement custom close behavior for Amnezia application on different platforms * fix: update provisioning profile specifiers for macos builds * fix: Fatal error in logs CLI-216 * fix: disabled unavailable on macos ne service logs * fix: dock icon now hides only when window is closed; menubar icon shows always Initial state of the docker icon to be presented follows "Start minimized" setting in app settings. * temp-fix: temporary disable all OpenVPN options of VPN on MACOS_NE since it's not working yet. * fix: build script updated * feat: add macOS NE build workflow to GitHub Actions * fix: Not working Auto start toggle is hidden * fix: Log spamming during xray connection fixed * 3rd-prebuild points to commit that stores macos_ne universal binaries. * fix: missing native dependency on linking stage fixed * chore: update link to submodule --------- Co-authored-by: vladimir.kuznetsov <nethiuswork@gmail.com>
644 lines
20 KiB
YAML
644 lines
20 KiB
YAML
name: 'Deploy workflow'
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- '**'
|
|
|
|
env:
|
|
QT_MIRROR: https://mirrors.ocf.berkeley.edu/qt/ # https://download.qt.io/static/mirrorlist/
|
|
|
|
jobs:
|
|
Build-Linux-Ubuntu:
|
|
runs-on: ubuntu-22.04
|
|
|
|
env:
|
|
QT_VERSION: 6.6.2
|
|
QIF_VERSION: 4.7
|
|
PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }}
|
|
PROD_S3_ENDPOINT: ${{ secrets.PROD_S3_ENDPOINT }}
|
|
DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }}
|
|
DEV_AGW_ENDPOINT: ${{ secrets.DEV_AGW_ENDPOINT }}
|
|
DEV_S3_ENDPOINT: ${{ secrets.DEV_S3_ENDPOINT }}
|
|
FREE_V2_ENDPOINT: ${{ secrets.FREE_V2_ENDPOINT }}
|
|
PREM_V1_ENDPOINT: ${{ secrets.PREM_V1_ENDPOINT }}
|
|
|
|
steps:
|
|
- name: 'Install Qt'
|
|
uses: jurplel/install-qt-action@v3
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'linux'
|
|
target: 'desktop'
|
|
arch: 'gcc_64'
|
|
modules: 'qtremoteobjects qt5compat qtshadertools'
|
|
dir: ${{ runner.temp }}
|
|
setup-python: 'true'
|
|
tools: 'tools_ifw'
|
|
set-env: 'true'
|
|
extra: '--external 7z --base ${{ env.QT_MIRROR }}'
|
|
|
|
- name: 'Get sources'
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: 'true'
|
|
fetch-depth: 10
|
|
|
|
- name: 'Setup ccache'
|
|
uses: hendrikmuhs/ccache-action@v1.2
|
|
|
|
- name: 'Build project'
|
|
run: |
|
|
sudo apt-get install libxkbcommon-x11-0
|
|
export QT_BIN_DIR=${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/gcc_64/bin
|
|
export QIF_BIN_DIR=${{ runner.temp }}/Qt/Tools/QtInstallerFramework/${{ env.QIF_VERSION }}/bin
|
|
bash deploy/build_linux.sh
|
|
|
|
- name: 'Pack installer'
|
|
run: cd deploy && tar -cf AmneziaVPN_Linux_Installer.tar AmneziaVPN_Linux_Installer.bin
|
|
|
|
- name: 'Upload installer artifact'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN_Linux_installer.tar
|
|
path: deploy/AmneziaVPN_Linux_Installer.tar
|
|
retention-days: 7
|
|
|
|
- name: 'Upload unpacked artifact'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN_Linux_unpacked
|
|
path: deploy/AppDir
|
|
retention-days: 7
|
|
|
|
- name: 'Upload translations artifact'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN_translations
|
|
path: client/translations
|
|
retention-days: 7
|
|
|
|
# ------------------------------------------------------
|
|
|
|
Build-Windows:
|
|
runs-on: windows-latest
|
|
|
|
env:
|
|
QT_VERSION: 6.6.2
|
|
QIF_VERSION: 4.7
|
|
BUILD_ARCH: 64
|
|
PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }}
|
|
PROD_S3_ENDPOINT: ${{ secrets.PROD_S3_ENDPOINT }}
|
|
DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }}
|
|
DEV_AGW_ENDPOINT: ${{ secrets.DEV_AGW_ENDPOINT }}
|
|
DEV_S3_ENDPOINT: ${{ secrets.DEV_S3_ENDPOINT }}
|
|
FREE_V2_ENDPOINT: ${{ secrets.FREE_V2_ENDPOINT }}
|
|
PREM_V1_ENDPOINT: ${{ secrets.PREM_V1_ENDPOINT }}
|
|
|
|
steps:
|
|
- name: 'Get sources'
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: 'true'
|
|
fetch-depth: 10
|
|
|
|
- name: 'Setup ccache'
|
|
uses: hendrikmuhs/ccache-action@v1.2
|
|
|
|
- name: 'Install Qt'
|
|
uses: jurplel/install-qt-action@v3
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'windows'
|
|
target: 'desktop'
|
|
arch: 'win64_msvc2019_64'
|
|
modules: 'qtremoteobjects qt5compat qtshadertools'
|
|
dir: ${{ runner.temp }}
|
|
setup-python: 'true'
|
|
tools: 'tools_ifw'
|
|
set-env: 'true'
|
|
extra: '--external 7z --base ${{ env.QT_MIRROR }}'
|
|
|
|
- name: 'Setup mvsc'
|
|
uses: ilammy/msvc-dev-cmd@v1
|
|
with:
|
|
arch: 'x64'
|
|
|
|
- name: 'Build project'
|
|
shell: cmd
|
|
run: |
|
|
set BUILD_ARCH=${{ env.BUILD_ARCH }}
|
|
set QT_BIN_DIR="${{ runner.temp }}\\Qt\\${{ env.QT_VERSION }}\\msvc2019_64\\bin"
|
|
set QIF_BIN_DIR="${{ runner.temp }}\\Qt\\Tools\\QtInstallerFramework\\${{ env.QIF_VERSION }}\\bin"
|
|
call deploy\\build_windows.bat
|
|
|
|
- name: 'Upload installer artifact'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN_Windows_installer
|
|
path: AmneziaVPN_x${{ env.BUILD_ARCH }}.exe
|
|
retention-days: 7
|
|
|
|
- name: 'Upload unpacked artifact'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN_Windows_unpacked
|
|
path: deploy\\build_${{ env.BUILD_ARCH }}\\client\\Release
|
|
retention-days: 7
|
|
|
|
# ------------------------------------------------------
|
|
|
|
Build-iOS:
|
|
runs-on: macos-13
|
|
|
|
env:
|
|
QT_VERSION: 6.6.2
|
|
CC: cc
|
|
CXX: c++
|
|
PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }}
|
|
PROD_S3_ENDPOINT: ${{ secrets.PROD_S3_ENDPOINT }}
|
|
DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }}
|
|
DEV_AGW_ENDPOINT: ${{ secrets.DEV_AGW_ENDPOINT }}
|
|
DEV_S3_ENDPOINT: ${{ secrets.DEV_S3_ENDPOINT }}
|
|
FREE_V2_ENDPOINT: ${{ secrets.FREE_V2_ENDPOINT }}
|
|
PREM_V1_ENDPOINT: ${{ secrets.PREM_V1_ENDPOINT }}
|
|
|
|
steps:
|
|
- name: 'Setup xcode'
|
|
uses: maxim-lobanov/setup-xcode@v1
|
|
with:
|
|
xcode-version: '15.2'
|
|
|
|
- name: 'Install desktop Qt'
|
|
uses: jurplel/install-qt-action@v3
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'mac'
|
|
target: 'desktop'
|
|
modules: 'qtremoteobjects qt5compat qtshadertools qtmultimedia'
|
|
arch: 'clang_64'
|
|
dir: ${{ runner.temp }}
|
|
set-env: 'true'
|
|
extra: '--base ${{ env.QT_MIRROR }}'
|
|
|
|
- name: 'Install iOS Qt'
|
|
uses: jurplel/install-qt-action@v3
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'mac'
|
|
target: 'ios'
|
|
modules: 'qtremoteobjects qt5compat qtshadertools qtmultimedia'
|
|
dir: ${{ runner.temp }}
|
|
setup-python: 'true'
|
|
set-env: 'true'
|
|
extra: '--external 7z --base ${{ env.QT_MIRROR }}'
|
|
|
|
- name: 'Install go'
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: '1.24'
|
|
cache: false
|
|
|
|
- name: 'Setup gomobile'
|
|
run: |
|
|
export PATH=$PATH:~/go/bin
|
|
go install golang.org/x/mobile/cmd/gomobile@latest
|
|
gomobile init
|
|
|
|
- name: 'Get sources'
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: 'true'
|
|
fetch-depth: 10
|
|
|
|
- name: 'Setup ccache'
|
|
uses: hendrikmuhs/ccache-action@v1.2
|
|
|
|
- name: 'Install dependencies'
|
|
run: pip install jsonschema jinja2
|
|
|
|
- name: 'Build project'
|
|
run: |
|
|
git submodule update --init --recursive
|
|
export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/ios/bin"
|
|
export QT_MACOS_ROOT_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos"
|
|
export PATH=$PATH:~/go/bin
|
|
sh deploy/build_ios.sh | \
|
|
sed -e '/-Xcc -DPROD_AGW_PUBLIC_KEY/,/-Xcc/ { /-Xcc/!d; }' -e '/-Xcc -DPROD_AGW_PUBLIC_KEY/d' | \
|
|
sed -e '/-Xcc -DDEV_AGW_PUBLIC_KEY/,/-Xcc/ { /-Xcc/!d; }' -e '/-Xcc -DDEV_AGW_PUBLIC_KEY/d' | \
|
|
sed -e '/-DPROD_AGW_PUBLIC_KEY/,/-D/ { /-D/!d; }' -e '/-DPROD_AGW_PUBLIC_KEY/d' | \
|
|
sed -e '/-DDEV_AGW_PUBLIC_KEY/,/-D/ { /-D/!d; }' -e '/-DDEV_AGW_PUBLIC_KEY/d'
|
|
env:
|
|
IOS_TRUST_CERT_BASE64: ${{ secrets.IOS_TRUST_CERT_BASE64 }}
|
|
IOS_SIGNING_CERT_BASE64: ${{ secrets.IOS_SIGNING_CERT_BASE64 }}
|
|
IOS_SIGNING_CERT_PASSWORD: ${{ secrets.IOS_SIGNING_CERT_PASSWORD }}
|
|
APPSTORE_CONNECT_KEY_ID: ${{ secrets.APPSTORE_CONNECT_KEY_ID }}
|
|
APPSTORE_CONNECT_ISSUER_ID: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }}
|
|
APPSTORE_CONNECT_PRIVATE_KEY: ${{ secrets.APPSTORE_CONNECT_PRIVATE_KEY }}
|
|
IOS_APP_PROVISIONING_PROFILE: ${{ secrets.IOS_APP_PROVISIONING_PROFILE }}
|
|
IOS_NE_PROVISIONING_PROFILE: ${{ secrets.IOS_NE_PROVISIONING_PROFILE }}
|
|
|
|
# - name: 'Upload appstore .ipa and dSYMs to artifacts'
|
|
# uses: actions/upload-artifact@v4
|
|
# with:
|
|
# name: app-store ipa & dsyms
|
|
# path: |
|
|
# ${{ github.workspace }}/AmneziaVPN-iOS.ipa
|
|
# ${{ github.workspace }}/*.app.dSYM.zip
|
|
# retention-days: 7
|
|
|
|
# ------------------------------------------------------
|
|
|
|
Build-MacOS-old:
|
|
runs-on: macos-latest
|
|
|
|
env:
|
|
# Keep compat with MacOS 10.15 aka Catalina by Qt 6.4
|
|
QT_VERSION: 6.4.3
|
|
|
|
MAC_TEAM_ID: ${{ secrets.MAC_TEAM_ID }}
|
|
|
|
MAC_APP_CERT_CERT: ${{ secrets.MAC_APP_CERT_CERT }}
|
|
MAC_SIGNER_ID: ${{ secrets.MAC_SIGNER_ID }}
|
|
MAC_APP_CERT_PW: ${{ secrets.MAC_APP_CERT_PW }}
|
|
|
|
MAC_INSTALLER_SIGNER_CERT: ${{ secrets.MAC_INSTALLER_SIGNER_CERT }}
|
|
MAC_INSTALLER_SIGNER_ID: ${{ secrets.MAC_INSTALLER_SIGNER_ID }}
|
|
MAC_INSTALL_CERT_PW: ${{ secrets.MAC_INSTALL_CERT_PW }}
|
|
|
|
APPLE_DEV_EMAIL: ${{ secrets.APPLE_DEV_EMAIL }}
|
|
APPLE_DEV_PASSWORD: ${{ secrets.APPLE_DEV_PASSWORD }}
|
|
|
|
PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }}
|
|
PROD_S3_ENDPOINT: ${{ secrets.PROD_S3_ENDPOINT }}
|
|
DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }}
|
|
DEV_AGW_ENDPOINT: ${{ secrets.DEV_AGW_ENDPOINT }}
|
|
DEV_S3_ENDPOINT: ${{ secrets.DEV_S3_ENDPOINT }}
|
|
FREE_V2_ENDPOINT: ${{ secrets.FREE_V2_ENDPOINT }}
|
|
PREM_V1_ENDPOINT: ${{ secrets.PREM_V1_ENDPOINT }}
|
|
|
|
steps:
|
|
- name: 'Setup xcode'
|
|
uses: maxim-lobanov/setup-xcode@v1
|
|
with:
|
|
xcode-version: '15.4.0'
|
|
|
|
- name: 'Install Qt'
|
|
uses: jurplel/install-qt-action@v3
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'mac'
|
|
target: 'desktop'
|
|
arch: 'clang_64'
|
|
modules: 'qtremoteobjects qt5compat qtshadertools'
|
|
dir: ${{ runner.temp }}
|
|
setup-python: 'true'
|
|
set-env: 'true'
|
|
extra: '--external 7z --base ${{ env.QT_MIRROR }}'
|
|
|
|
|
|
- name: 'Get sources'
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: 'true'
|
|
fetch-depth: 10
|
|
|
|
- name: 'Setup ccache'
|
|
uses: hendrikmuhs/ccache-action@v1.2
|
|
|
|
- name: 'Build project'
|
|
run: |
|
|
export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos/bin"
|
|
bash deploy/build_macos.sh -n
|
|
|
|
- name: 'Upload installer artifact'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN_MacOS_old_installer
|
|
path: deploy/build/pkg/AmneziaVPN.pkg
|
|
retention-days: 7
|
|
|
|
- name: 'Upload unpacked artifact'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN_MacOS_old_unpacked
|
|
path: deploy/build/client/AmneziaVPN.app
|
|
retention-days: 7
|
|
|
|
# ------------------------------------------------------
|
|
|
|
Build-MacOS:
|
|
runs-on: macos-latest
|
|
|
|
env:
|
|
QT_VERSION: 6.8.0
|
|
|
|
MAC_TEAM_ID: ${{ secrets.MAC_TEAM_ID }}
|
|
|
|
MAC_APP_CERT_CERT: ${{ secrets.MAC_APP_CERT_CERT }}
|
|
MAC_SIGNER_ID: ${{ secrets.MAC_SIGNER_ID }}
|
|
MAC_APP_CERT_PW: ${{ secrets.MAC_APP_CERT_PW }}
|
|
|
|
MAC_INSTALLER_SIGNER_CERT: ${{ secrets.MAC_INSTALLER_SIGNER_CERT }}
|
|
MAC_INSTALLER_SIGNER_ID: ${{ secrets.MAC_INSTALLER_SIGNER_ID }}
|
|
MAC_INSTALL_CERT_PW: ${{ secrets.MAC_INSTALL_CERT_PW }}
|
|
|
|
APPLE_DEV_EMAIL: ${{ secrets.APPLE_DEV_EMAIL }}
|
|
APPLE_DEV_PASSWORD: ${{ secrets.APPLE_DEV_PASSWORD }}
|
|
|
|
PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }}
|
|
PROD_S3_ENDPOINT: ${{ secrets.PROD_S3_ENDPOINT }}
|
|
DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }}
|
|
DEV_AGW_ENDPOINT: ${{ secrets.DEV_AGW_ENDPOINT }}
|
|
DEV_S3_ENDPOINT: ${{ secrets.DEV_S3_ENDPOINT }}
|
|
FREE_V2_ENDPOINT: ${{ secrets.FREE_V2_ENDPOINT }}
|
|
PREM_V1_ENDPOINT: ${{ secrets.PREM_V1_ENDPOINT }}
|
|
|
|
steps:
|
|
- name: 'Setup xcode'
|
|
uses: maxim-lobanov/setup-xcode@v1
|
|
with:
|
|
xcode-version: '16.2.0'
|
|
|
|
- name: 'Install Qt'
|
|
uses: jurplel/install-qt-action@v3
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'mac'
|
|
target: 'desktop'
|
|
arch: 'clang_64'
|
|
modules: 'qtremoteobjects qt5compat qtshadertools'
|
|
dir: ${{ runner.temp }}
|
|
setup-python: 'true'
|
|
set-env: 'true'
|
|
extra: '--external 7z --base ${{ env.QT_MIRROR }}'
|
|
|
|
|
|
- name: 'Get sources'
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: 'true'
|
|
fetch-depth: 10
|
|
|
|
- name: 'Setup ccache'
|
|
uses: hendrikmuhs/ccache-action@v1.2
|
|
|
|
- name: 'Build project'
|
|
run: |
|
|
export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos/bin"
|
|
bash deploy/build_macos.sh -n
|
|
|
|
- name: 'Upload installer artifact'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN_MacOS_installer
|
|
path: deploy/build/pkg/AmneziaVPN.pkg
|
|
retention-days: 7
|
|
|
|
- name: 'Upload unpacked artifact'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN_MacOS_unpacked
|
|
path: deploy/build/client/AmneziaVPN.app
|
|
retention-days: 7
|
|
|
|
Build-MacOS-NE:
|
|
runs-on: macos-latest
|
|
|
|
env:
|
|
QT_VERSION: 6.8.3
|
|
|
|
MAC_TEAM_ID: ${{ secrets.MAC_TEAM_ID }}
|
|
|
|
MAC_APP_CERT_CERT: ${{ secrets.MAC_APP_CERT_CERT }}
|
|
MAC_SIGNER_ID: ${{ secrets.MAC_SIGNER_ID }}
|
|
MAC_APP_CERT_PW: ${{ secrets.MAC_APP_CERT_PW }}
|
|
|
|
PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }}
|
|
PROD_S3_ENDPOINT: ${{ secrets.PROD_S3_ENDPOINT }}
|
|
DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }}
|
|
DEV_AGW_ENDPOINT: ${{ secrets.DEV_AGW_ENDPOINT }}
|
|
DEV_S3_ENDPOINT: ${{ secrets.DEV_S3_ENDPOINT }}
|
|
FREE_V2_ENDPOINT: ${{ secrets.FREE_V2_ENDPOINT }}
|
|
PREM_V1_ENDPOINT: ${{ secrets.PREM_V1_ENDPOINT }}
|
|
|
|
steps:
|
|
- name: 'Setup xcode'
|
|
uses: maxim-lobanov/setup-xcode@v1
|
|
with:
|
|
xcode-version: '16.2.0'
|
|
|
|
- name: 'Install Qt'
|
|
uses: jurplel/install-qt-action@v3
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'mac'
|
|
target: 'desktop'
|
|
arch: 'clang_64'
|
|
modules: 'qtremoteobjects qt5compat qtshadertools'
|
|
dir: ${{ runner.temp }}
|
|
setup-python: 'true'
|
|
set-env: 'true'
|
|
extra: '--external 7z --base ${{ env.QT_MIRROR }}'
|
|
|
|
|
|
- name: 'Get sources'
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: 'true'
|
|
fetch-depth: 10
|
|
|
|
- name: 'Setup ccache'
|
|
uses: hendrikmuhs/ccache-action@v1.2
|
|
|
|
- name: 'Build project'
|
|
run: |
|
|
export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos/bin"
|
|
bash deploy/build_macos_ne.sh
|
|
|
|
- name: 'Upload unpacked artifact'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN_MacOS_unpacked
|
|
path: deploy/build/client/AmneziaVPN.app
|
|
retention-days: 7
|
|
|
|
# ------------------------------------------------------
|
|
|
|
Build-Android:
|
|
runs-on: ubuntu-latest
|
|
|
|
env:
|
|
ANDROID_BUILD_PLATFORM: android-34
|
|
QT_VERSION: 6.7.3
|
|
QT_MODULES: 'qtremoteobjects qt5compat qtimageformats qtshadertools'
|
|
PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }}
|
|
PROD_S3_ENDPOINT: ${{ secrets.PROD_S3_ENDPOINT }}
|
|
DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }}
|
|
DEV_AGW_ENDPOINT: ${{ secrets.DEV_AGW_ENDPOINT }}
|
|
DEV_S3_ENDPOINT: ${{ secrets.DEV_S3_ENDPOINT }}
|
|
FREE_V2_ENDPOINT: ${{ secrets.FREE_V2_ENDPOINT }}
|
|
PREM_V1_ENDPOINT: ${{ secrets.PREM_V1_ENDPOINT }}
|
|
|
|
steps:
|
|
- name: 'Install desktop Qt'
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'linux'
|
|
target: 'desktop'
|
|
arch: 'linux_gcc_64'
|
|
modules: ${{ env.QT_MODULES }}
|
|
dir: ${{ runner.temp }}
|
|
py7zrversion: '==0.22.*'
|
|
extra: '--base ${{ env.QT_MIRROR }}'
|
|
|
|
- name: 'Install android_x86_64 Qt'
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'linux'
|
|
target: 'android'
|
|
arch: 'android_x86_64'
|
|
modules: ${{ env.QT_MODULES }}
|
|
dir: ${{ runner.temp }}
|
|
py7zrversion: '==0.22.*'
|
|
extra: '--base ${{ env.QT_MIRROR }}'
|
|
|
|
- name: 'Install android_x86 Qt'
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'linux'
|
|
target: 'android'
|
|
arch: 'android_x86'
|
|
modules: ${{ env.QT_MODULES }}
|
|
dir: ${{ runner.temp }}
|
|
py7zrversion: '==0.22.*'
|
|
extra: '--base ${{ env.QT_MIRROR }}'
|
|
|
|
- name: 'Install android_armv7 Qt'
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'linux'
|
|
target: 'android'
|
|
arch: 'android_armv7'
|
|
modules: ${{ env.QT_MODULES }}
|
|
dir: ${{ runner.temp }}
|
|
py7zrversion: '==0.22.*'
|
|
extra: '--base ${{ env.QT_MIRROR }}'
|
|
|
|
- name: 'Install android_arm64_v8a Qt'
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: ${{ env.QT_VERSION }}
|
|
host: 'linux'
|
|
target: 'android'
|
|
arch: 'android_arm64_v8a'
|
|
modules: ${{ env.QT_MODULES }}
|
|
dir: ${{ runner.temp }}
|
|
py7zrversion: '==0.22.*'
|
|
extra: '--base ${{ env.QT_MIRROR }}'
|
|
|
|
- name: 'Grant execute permission for qt-cmake'
|
|
shell: bash
|
|
run: |
|
|
chmod +x ${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/android_x86_64/bin/qt-cmake
|
|
|
|
- name: 'Get sources'
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: 'true'
|
|
|
|
- name: 'Setup ccache'
|
|
uses: hendrikmuhs/ccache-action@v1.2
|
|
|
|
- name: 'Setup Java'
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: '17'
|
|
cache: 'gradle'
|
|
|
|
- name: 'Setup Android NDK'
|
|
id: setup-ndk
|
|
uses: nttld/setup-ndk@v1
|
|
with:
|
|
ndk-version: 'r26b'
|
|
|
|
- name: 'Decode keystore secret to file'
|
|
env:
|
|
KEYSTORE_BASE64: ${{ secrets.ANDROID_RELEASE_KEYSTORE_BASE64 }}
|
|
shell: bash
|
|
run: |
|
|
echo $KEYSTORE_BASE64 | base64 --decode > android.keystore
|
|
|
|
- name: 'Build project'
|
|
env:
|
|
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
|
|
QT_HOST_PATH: ${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/gcc_64
|
|
ANDROID_KEYSTORE_PATH: ${{ github.workspace }}/android.keystore
|
|
ANDROID_KEYSTORE_KEY_ALIAS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_ALIAS }}
|
|
ANDROID_KEYSTORE_KEY_PASS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_PASS }}
|
|
shell: bash
|
|
run: ./deploy/build_android.sh --aab --apk all --build-platform ${{ env.ANDROID_BUILD_PLATFORM }}
|
|
|
|
- name: 'Upload x86_64 apk'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN-android-x86_64
|
|
path: deploy/build/AmneziaVPN-x86_64-release.apk
|
|
compression-level: 0
|
|
retention-days: 7
|
|
|
|
- name: 'Upload x86 apk'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN-android-x86
|
|
path: deploy/build/AmneziaVPN-x86-release.apk
|
|
compression-level: 0
|
|
retention-days: 7
|
|
|
|
- name: 'Upload arm64-v8a apk'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN-android-arm64-v8a
|
|
path: deploy/build/AmneziaVPN-arm64-v8a-release.apk
|
|
compression-level: 0
|
|
retention-days: 7
|
|
|
|
- name: 'Upload armeabi-v7a apk'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN-android-armeabi-v7a
|
|
path: deploy/build/AmneziaVPN-armeabi-v7a-release.apk
|
|
compression-level: 0
|
|
retention-days: 7
|
|
|
|
- name: 'Upload aab'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: AmneziaVPN-android
|
|
path: deploy/build/AmneziaVPN-release.aab
|
|
compression-level: 0
|
|
retention-days: 7
|
|
|
|
Extra:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Search a corresponding PR
|
|
uses: octokit/request-action@v2.x
|
|
id: pull_request
|
|
with:
|
|
route: GET /repos/${{ github.repository }}/pulls
|
|
head: ${{ github.repository_owner }}:${{ github.ref_name }}
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Add PR link to build summary
|
|
if: ${{ fromJSON(steps.pull_request.outputs.data)[0].number != '' }}
|
|
run: |
|
|
echo "Pull request:" >> $GITHUB_STEP_SUMMARY
|
|
echo "[[#${{ fromJSON(steps.pull_request.outputs.data)[0].number }}] ${{ fromJSON(steps.pull_request.outputs.data)[0].title }}](${{ fromJSON(steps.pull_request.outputs.data)[0].html_url }})" >> $GITHUB_STEP_SUMMARY
|