name: 'Deploy workflow' on: [push] jobs: Build-Linux-Ubuntu: name: 'Build-Linux-Ubuntu' runs-on: ubuntu-20.04 env: QT_VERSION: 6.5.1 QIF_VERSION: 4.6 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' - name: 'Get sources' uses: actions/checkout@v3 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: 'Upload installer artifact' uses: actions/upload-artifact@v3 with: name: AmneziaVPN_Linux_installer path: deploy/AmneziaVPN_Linux_Installer retention-days: 7 - name: 'Upload unpacked artifact' uses: actions/upload-artifact@v3 with: name: AmneziaVPN_Linux_unpacked path: deploy/AppDir retention-days: 7 # ------------------------------------------------------ Build-Windows: name: Build-Windows runs-on: windows-latest env: QT_VERSION: 6.5.1 QIF_VERSION: 4.6 BUILD_ARCH: 64 steps: - name: 'Get sources' uses: actions/checkout@v3 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' - 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@v3 with: name: AmneziaVPN_Windows_installer path: AmneziaVPN_x${{ env.BUILD_ARCH }}.exe retention-days: 7 - name: 'Upload unpacked artifact' uses: actions/upload-artifact@v3 with: name: AmneziaVPN_Windows_unpacked path: deploy\\build_${{ env.BUILD_ARCH }}\\client\\Release retention-days: 7 # ------------------------------------------------------ Build-IOS: name: 'Build-IOS' runs-on: macos-12 env: QT_VERSION: 6.5.2 steps: # Just select XCode - name: 'Setup xcode' uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: '14.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' - 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' - name: 'Install go' uses: actions/setup-go@v3 - 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@v3 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 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@v3 # with: # name: app-store ipa & dsyms # path: | # ${{ github.workspace }}/AmneziaVPN-iOS.ipa # ${{ github.workspace }}/*.app.dSYM.zip # retention-days: 7 # ------------------------------------------------------ Build-MacOS: name: 'Build-MacOS' runs-on: macos-latest env: # Keep compat with MacOS 10.15 aka Catalina by Qt 6.4 QT_VERSION: 6.4.3 QIF_VERSION: 4.6 steps: - name: 'Setup xcode' uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: '13.4' - 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' tools: 'tools_ifw' set-env: 'true' extra: '--external 7z' - name: 'Get sources' uses: actions/checkout@v3 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" export QIF_BIN_DIR="${{ runner.temp }}/Qt/Tools/QtInstallerFramework/${{ env.QIF_VERSION }}/bin" bash deploy/build_macos.sh - name: 'Upload installer artifact' uses: actions/upload-artifact@v3 with: name: AmneziaVPN_MacOS_installer path: AmneziaVPN.dmg retention-days: 7 - name: 'Upload unpacked artifact' uses: actions/upload-artifact@v3 with: name: AmneziaVPN_MacOS_unpacked path: deploy/build/client/AmneziaVPN.app retention-days: 7 # ------------------------------------------------------ Build-Android: name: 'Build-Android' runs-on: ubuntu-latest strategy: matrix: include: - abi: 'x86_64' qt_arch: 'android_x86_64' - abi: 'x86' qt_arch: 'android_x86' - abi: 'armeabi-v7a' qt_arch: 'android_armv7' - abi: 'arm64-v8a' qt_arch: 'android_arm64_v8a' env: QT_VERSION: 6.5.2 ANDROID_BUILD_PLATFORM: android-33 steps: - name: 'Install desktop Qt' uses: jurplel/install-qt-action@v3 with: version: ${{ env.QT_VERSION }} host: 'linux' target: 'desktop' arch: 'gcc_64' modules: 'qtremoteobjects qt5compat qtimageformats qtshadertools' dir: ${{ runner.temp }} setup-python: 'true' set-env: 'true' extra: '--external 7z' - name: 'Install android Qt' uses: jurplel/install-qt-action@v3 with: version: ${{ env.QT_VERSION }} host: 'linux' target: 'android' arch: ${{ matrix.qt_arch }} modules: 'qtremoteobjects qt5compat qtimageformats qtshadertools' dir: ${{ runner.temp }} setup-python: 'true' set-env: 'true' extra: '--external 7z' - name: 'Grant execute permission for qt-cmake' shell: bash run: | chmod +x ${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/${{ matrix.qt_arch }}/bin/qt-cmake - name: 'Get sources' uses: actions/checkout@v3 with: submodules: 'true' - name: 'Setup ccache' uses: hendrikmuhs/ccache-action@v1.2 - name: 'Setup Java' uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: '11' cache: 'gradle' - name: 'Setup Android NDK' id: setup-ndk uses: nttld/setup-ndk@v1 with: ndk-version: 'r25c' local-cache: 'true' - 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 QT_ANDROID_KEYSTORE_PATH: ${{ github.workspace }}/android.keystore QT_ANDROID_KEYSTORE_ALIAS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_ALIAS }} QT_ANDROID_KEYSTORE_STORE_PASS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_PASS }} QT_ANDROID_KEYSTORE_KEY_PASS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_PASS }} shell: bash run: ./deploy/build_android.sh --apk ${{ matrix.abi }} --platform ${{ env.ANDROID_BUILD_PLATFORM }} - name: 'Upload apk' uses: actions/upload-artifact@v3 with: name: AmneziaVPN-android-${{ matrix.abi }} path: deploy/build/AmneziaVPN-${{ matrix.abi }}-release-signed.apk retention-days: 7