From f288743234e825ff0c8d5dafd2497b3a068d880c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Mon, 15 Apr 2024 18:02:33 -0600 Subject: [PATCH 01/14] chore(appium): test new windows certificate --- .github/workflows/ui-automated-tests.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index fea14401fe..5c582959b2 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -192,6 +192,15 @@ jobs: - name: Build Installer run: cargo wix --package uplink --no-build --nocapture + - name: Sign Windows Installer + uses: dlemstra/code-sign-action@v1 + with: + certificate: "${{ secrets.WINDOWS_TEST_CERTIFICATE }}" + folder: "target/wix" + recursive: true + files: | + target/wix/*.msi + - name: Upload Executable ⬆️ uses: actions/upload-artifact@v3 with: From 83cca8fa94fd00f38cb2b3706141168dc835b2aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:02:57 -0600 Subject: [PATCH 02/14] chore(appium): save private key in pem file on workflow --- .github/workflows/ui-automated-tests.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 5c582959b2..1926f1aae4 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -192,6 +192,12 @@ jobs: - name: Build Installer run: cargo wix --package uplink --no-build --nocapture + - name: Save secret to file + run: | + echo $PRIVATE_KEY > private-key.pem + env: + PRIVATE_KEY: ${{ secrets.WINDOWS_TEST_CERTIFICATE }} + - name: Sign Windows Installer uses: dlemstra/code-sign-action@v1 with: From cd16b4c31761466c32dd600e37668f1165656370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Tue, 16 Apr 2024 13:26:19 -0600 Subject: [PATCH 03/14] chore(appium): try using signtool instead of gh action for windows signing --- .github/workflows/ui-automated-tests.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 1926f1aae4..f0945b7e50 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -199,13 +199,7 @@ jobs: PRIVATE_KEY: ${{ secrets.WINDOWS_TEST_CERTIFICATE }} - name: Sign Windows Installer - uses: dlemstra/code-sign-action@v1 - with: - certificate: "${{ secrets.WINDOWS_TEST_CERTIFICATE }}" - folder: "target/wix" - recursive: true - files: | - target/wix/*.msi + run: signtool sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi - name: Upload Executable ⬆️ uses: actions/upload-artifact@v3 From dbf85361628dd45f29a857528f726a54835b8851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:30:50 -0600 Subject: [PATCH 04/14] chore(appium): add env variable for signtool --- .github/workflows/ui-automated-tests.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index f0945b7e50..3f20fdbe53 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -192,14 +192,15 @@ jobs: - name: Build Installer run: cargo wix --package uplink --no-build --nocapture - - name: Save secret to file + - name: Save secret to file and set env variable for signtool run: | echo $PRIVATE_KEY > private-key.pem + echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH env: PRIVATE_KEY: ${{ secrets.WINDOWS_TEST_CERTIFICATE }} - name: Sign Windows Installer - run: signtool sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi + run: signtool.exe sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi - name: Upload Executable ⬆️ uses: actions/upload-artifact@v3 From a9400fa0a1b157cf7a243aafb475502b91bdaa12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Tue, 16 Apr 2024 15:11:29 -0600 Subject: [PATCH 05/14] chore(appium): add path for signtool dir --- .github/workflows/ui-automated-tests.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 3f20fdbe53..2300a2cb9e 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -192,15 +192,19 @@ jobs: - name: Build Installer run: cargo wix --package uplink --no-build --nocapture - - name: Save secret to file and set env variable for signtool + - name: Save certificate file run: | echo $PRIVATE_KEY > private-key.pem - echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH env: PRIVATE_KEY: ${{ secrets.WINDOWS_TEST_CERTIFICATE }} + - name: Add signtool to PATH + run: | + $signtoolDir = "${env:ProgramFiles(x86)}\Windows Kits\10\bin\${env:SDKVERSION}\x64" + echo "##[add-path]$signtoolDir" + - name: Sign Windows Installer - run: signtool.exe sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi + run: signtool sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi - name: Upload Executable ⬆️ uses: actions/upload-artifact@v3 From 5e834c7aac2876139d0c00af372bd7856c7a7f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Tue, 16 Apr 2024 15:36:40 -0600 Subject: [PATCH 06/14] chore(appium): update GH path on windows workflow --- .github/workflows/ui-automated-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 2300a2cb9e..04041b0524 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -201,7 +201,7 @@ jobs: - name: Add signtool to PATH run: | $signtoolDir = "${env:ProgramFiles(x86)}\Windows Kits\10\bin\${env:SDKVERSION}\x64" - echo "##[add-path]$signtoolDir" + echo "$signtoolDir" >> $GITHUB_PATH - name: Sign Windows Installer run: signtool sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi From 28f74a58cc667792a083e84935df8b5827bd2f7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Tue, 16 Apr 2024 16:21:27 -0600 Subject: [PATCH 07/14] chore(appium): add signtool to path --- .github/workflows/ui-automated-tests.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 04041b0524..880c79b5f3 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -199,9 +199,8 @@ jobs: PRIVATE_KEY: ${{ secrets.WINDOWS_TEST_CERTIFICATE }} - name: Add signtool to PATH - run: | - $signtoolDir = "${env:ProgramFiles(x86)}\Windows Kits\10\bin\${env:SDKVERSION}\x64" - echo "$signtoolDir" >> $GITHUB_PATH + run: $Env:Path +=";${env:ProgramFiles(x86)}\Windows Kits\10\App Certification Kit\" + shell: powershell - name: Sign Windows Installer run: signtool sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi From ba79da7543aa663ed332a5301213aa3d1252ea06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:00:47 -0600 Subject: [PATCH 08/14] chore(appium): add path env to signtool --- .github/workflows/ui-automated-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 880c79b5f3..5ec2d31051 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -199,8 +199,8 @@ jobs: PRIVATE_KEY: ${{ secrets.WINDOWS_TEST_CERTIFICATE }} - name: Add signtool to PATH - run: $Env:Path +=";${env:ProgramFiles(x86)}\Windows Kits\10\App Certification Kit\" - shell: powershell + run: | + echo "${env:ProgramFiles(x86)}\Windows Kits\10\App Certification Kit\" >> $GITHUB_PATH - name: Sign Windows Installer run: signtool sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi From c1f84a07827e40d2f4318b0b933d68f6018efc12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:25:53 -0600 Subject: [PATCH 09/14] chore(appium): execute windows job first --- .github/workflows/ui-automated-tests.yml | 73 ++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 5ec2d31051..9d6cd3f1f9 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -25,7 +25,79 @@ env: CARGO_TERM_COLOR: always jobs: + temp-windows: + runs-on: + labels: windows-latest + + steps: + - name: Checkout Uplink directory 🔖 + uses: actions/checkout@v4 + with: + repository: Satellite-im/Uplink + + - name: Install Wix + uses: actions/checkout@v4 + with: + repository: fbarresi/wix + path: wix + + - name: Set up cargo cache 🛠️ + uses: Swatinem/rust-cache@v2 + + - name: Install Rust 💿 + uses: actions-rs/toolchain@v1 + with: + toolchain: 1.75.0 + override: true + components: rustfmt, clippy + + - name: Install cargo wix + run: cargo install cargo-wix + + - name: Install FFmpeg + uses: FedericoCarboni/setup-ffmpeg@v2 + id: setup-ffmpeg + + - name: Get localPeerId and build app 🖥️ + run: cargo build --release -F production_mode + + - name: Create ZIP archive on Windows 🗳️ + run: Compress-Archive -Path target/release/uplink.exe -Destination uplinkWindows.zip + + - name: Build Installer + run: cargo wix --package uplink --no-build --nocapture + + - name: Save certificate file + run: | + echo $PRIVATE_KEY > private-key.pem + env: + PRIVATE_KEY: ${{ secrets.WINDOWS_TEST_CERTIFICATE }} + + - name: Add signtool to PATH + run: | + echo "${env:ProgramFiles(x86)}\Windows Kits\10\App Certification Kit\" >> $GITHUB_PATH + echo "Current value of GITHUB_PATH: $GITHUB_PATH" + + - name: Sign Windows Installer + run: signtool sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi + + - name: Upload Executable ⬆️ + uses: actions/upload-artifact@v3 + with: + name: Uplink-windows-test + path: target/wix/*.msi + + - name: Add label if any of build jobs failed + if: failure() + uses: buildsville/add-remove-label@v2.0.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + labels: | + Failed Automated Test + type: add + create-node: + needs: temp-windows runs-on: ubuntu-latest steps: - name: Checkout Warp directory 🔖 @@ -201,6 +273,7 @@ jobs: - name: Add signtool to PATH run: | echo "${env:ProgramFiles(x86)}\Windows Kits\10\App Certification Kit\" >> $GITHUB_PATH + echo "Current value of GITHUB_PATH: $GITHUB_PATH" - name: Sign Windows Installer run: signtool sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi From 49123bdb13db8863a9280e2c40258e5a92a84fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:14:39 -0600 Subject: [PATCH 10/14] chore(appium): test using rsa key --- .github/workflows/ui-automated-tests.yml | 775 +---------------------- 1 file changed, 8 insertions(+), 767 deletions(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 4d5d9c4b84..574446cddb 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -67,777 +67,18 @@ jobs: - name: Build Installer run: cargo wix --package uplink --no-build --nocapture - - name: Save certificate file - run: | - echo $PRIVATE_KEY > private-key.pem - env: - PRIVATE_KEY: ${{ secrets.WINDOWS_TEST_CERTIFICATE }} - - - name: Add signtool to PATH - run: | - echo "${env:ProgramFiles(x86)}\Windows Kits\10\App Certification Kit\" >> $GITHUB_PATH - echo "Current value of GITHUB_PATH: $GITHUB_PATH" - - name: Sign Windows Installer - run: signtool sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi - - - name: Upload Executable ⬆️ - uses: actions/upload-artifact@v3 - with: - name: Uplink-windows-test - path: target/wix/*.msi - - - name: Add label if any of build jobs failed - if: failure() - uses: buildsville/add-remove-label@v2.0.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - labels: | - Failed Automated Test - type: add - - create-node: - needs: temp-windows - runs-on: ubuntu-latest - steps: - - name: Checkout Warp directory 🔖 - uses: actions/checkout@v4 - with: - repository: Satellite-im/Warp - ref: b574da4ab10cfd7bf38ec0e2b499232a2e8f8eff - - - name: Set up cargo cache 🛠️ - uses: Swatinem/rust-cache@v2 - - - name: Install Rust 💿 - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.75.0 - override: true - components: rustfmt, clippy - - - name: Run cargo build shuttle on Warp 🚀 - run: cargo build --bin shuttle --release - - - name: Launch CI instance of Warp 🚀 - run: ./target/release/shuttle --keyfile key.bin --listen-addr /ip4/127.0.0.1/tcp/4444 > peerID.txt & - - - name: Upload Artifact Peer ID data⬆️ - uses: actions/upload-artifact@v3 - with: - name: peerID - path: peerID.txt - - - name: Upload Artifact Key File data⬆️ - uses: actions/upload-artifact@v3 - with: - name: keyfile - path: key.bin - - build-mac: - needs: create-node - runs-on: macos-14 - - steps: - - name: Checkout Uplink directory 🔖 - uses: actions/checkout@v4 - with: - repository: Satellite-im/Uplink - - - name: Checkout testing directory 🔖 - uses: actions/checkout@v4 - with: - path: "./appium-tests" - - - name: Download Peer ID file 🗳️ - uses: actions/download-artifact@v3 - with: - name: peerID - path: ./warp - - - name: Set up cargo cache 🛠️ - uses: Swatinem/rust-cache@v2 - - - name: Install Rust 💿 - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.75.0 - override: true - components: rustfmt, clippy - - - name: Add Targets for MacOS - env: - MACOSX_DEPLOYMENT_TARGET: "10.13" - run: | - rustup target add x86_64-apple-darwin aarch64-apple-darwin - - - name: Replace Warp Peer ID in Uplink 🚀 - run: | - chmod +x ./appium-tests/scripts/replace_node.sh - ./appium-tests/scripts/replace_node.sh - - - name: Build executable 🖥️ - run: make dmg - continue-on-error: true - - - name: Create ZIP archive on MacOS 🗳️ - run: | - ditto -c -k --sequesterRsrc --keepParent target/release/macos/Uplink.app Uplink-Mac-Universal.zip - - - name: Calculate hashes 🧮 - run: | - shasum -a 256 Uplink-Mac-Universal.zip > Uplink-Mac-Universal.zip.sha256.txt - - - name: Upload Artifact ⬆️ - uses: actions/upload-artifact@v3 - env: - NODE_OPTIONS: "--max-old-space-size=8192" - with: - name: Uplink-macos-latest - path: | - Uplink-Mac-Universal.zip - Uplink-Mac-Universal.zip.sha256.txt - - - name: Add label if any of build jobs failed - if: failure() - uses: buildsville/add-remove-label@v2.0.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - labels: | - Failed Automated Test - type: add - - build-windows: - needs: create-node - runs-on: - labels: windows-latest - - steps: - - name: Checkout Uplink directory 🔖 - uses: actions/checkout@v4 - with: - repository: Satellite-im/Uplink - - - name: Checkout testing directory 🔖 - uses: actions/checkout@v4 - with: - path: "./appium-tests" - - - name: Download Peer ID file 🗳️ - uses: actions/download-artifact@v3 - with: - name: peerID - path: ./warp - - - name: Install Wix - uses: actions/checkout@v4 - with: - repository: fbarresi/wix - path: wix - - - name: Set up cargo cache 🛠️ - uses: Swatinem/rust-cache@v2 - - - name: Install Rust 💿 - uses: actions-rs/toolchain@v1 + uses: dlemstra/code-sign-action@v1 with: - toolchain: 1.75.0 - override: true - components: rustfmt, clippy - - - name: Install cargo wix - run: cargo install cargo-wix - - - name: Install FFmpeg - uses: FedericoCarboni/setup-ffmpeg@v2 - id: setup-ffmpeg - - - name: Get localPeerId and build app 🖥️ - id: get_local_peer_id - run: | - ./appium-tests/scripts/replace_node.ps1 - cargo build --release -F production_mode - - - name: Create ZIP archive on Windows 🗳️ - run: Compress-Archive -Path target/release/uplink.exe -Destination uplinkWindows.zip - - - name: Build Installer - run: cargo wix --package uplink --no-build --nocapture - - - name: Save certificate file - run: | - echo $PRIVATE_KEY > private-key.pem - env: - PRIVATE_KEY: ${{ secrets.WINDOWS_TEST_CERTIFICATE }} - - - name: Add signtool to PATH - run: | - echo "${env:ProgramFiles(x86)}\Windows Kits\10\App Certification Kit\" >> $GITHUB_PATH - echo "Current value of GITHUB_PATH: $GITHUB_PATH" - - - name: Sign Windows Installer - run: signtool sign /fd SHA256 /f private-key.pem /p ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} /t http://timestamp.digicert.com target/wix/*.msi + certificate: "${{ secrets.WINDOWS_TEST_CERTIFICATE }}" + password: "${{ secrets.WINDOWS_TEST_CERTIFICATE_PASSWORD }}" + folder: "target/wix" + recursive: true + files: | + target/wix/*.msi - name: Upload Executable ⬆️ uses: actions/upload-artifact@v3 with: - name: Uplink-windows-latest + name: Uplink-windows-test path: target/wix/*.msi - - - name: Add label if any of build jobs failed - if: failure() - uses: buildsville/add-remove-label@v2.0.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - labels: | - Failed Automated Test - type: add - - test-mac: - needs: build-mac - runs-on: macos-14 - - steps: - - name: Checkout testing directory 🔖 - uses: actions/checkout@v4 - - - name: Checkout Warp directory 🔖 - uses: actions/checkout@v4 - with: - repository: Satellite-im/Warp - ref: b574da4ab10cfd7bf38ec0e2b499232a2e8f8eff - path: "./warp" - - - name: Install Dependencies - continue-on-error: true - run: | - brew update - brew install cairo pango - - - name: Download Key file 🗳️ - uses: actions/download-artifact@v3 - with: - name: keyfile - path: ./warp - - - name: Install Rust 💿 - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.75.0 - override: true - components: rustfmt, clippy - - - name: Download the MacOS app 🗳️ - uses: actions/download-artifact@v3 - with: - name: Uplink-macos-latest - path: ./apps - - - name: Enable opening app not codesigned 🖥️ - run: sudo spctl --master-disable - - - name: Copy DMG to Appium Apps Directory 💿 - working-directory: ./apps - run: | - unzip Uplink-Mac-Universal.zip - cp -r ./Uplink.app ./Uplink2.app - perl -i -pe 's/im.satellite.uplink/im.satellite.uplinkChatUserB/g' ./Uplink2.app/Contents/Info.plist - cp -r ./Uplink.app /Applications/ - cp -r ./Uplink2.app /Applications/ - sudo xattr -r -d com.apple.quarantine /Applications/Uplink.app - sudo xattr -r -d com.apple.quarantine /Applications/Uplink2.app - - - name: Setup Node.js 🔨 - uses: actions/setup-node@v3 - with: - node-version: 20 - cache: "npm" - - - name: Cache NPM dependencies 🔨 - uses: actions/cache@v3 - id: cache-mac - with: - path: node_modules - key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} - - - name: Install NPM dependencies 📦 - if: steps.cache-mac.outputs.cache-hit != 'true' - run: npm ci - - - name: Update MacOS runner to not autocorrect text - run: | - defaults write -g NSAutomaticCapitalizationEnabled -bool false - defaults write -g NSAutomaticPeriodSubstitutionEnabled -bool false - defaults write -g NSAutomaticSpellingCorrectionEnabled -bool false - - - name: Delete Cache Folder and copy reusable data - run: | - rm -rf ~/.uplink/ - mkdir ./tests/fixtures/users/mac2 - cp -r ./tests/fixtures/users/FriendsTestUser/ ./tests/fixtures/users/mac2/FriendsTestUser - - - name: Run cargo build shuttle on Warp 🚀 - working-directory: ./warp - run: cargo build --bin shuttle --release - - - name: Launch CI instance of Warp 🚀 - working-directory: ./warp - run: ./target/release/shuttle --keyfile key.bin --listen-addr /ip4/127.0.0.1/tcp/4444 & - - - name: Run Tests on MacOS 🧪 - run: npm run mac.ci - - - name: Upload Test Report - MacOS CI - if: always() - uses: actions/upload-artifact@v3 - with: - name: test-report-macos-ci - path: ./test-report/*.xml - - - name: Upload Allure Test Results - if: always() - uses: actions/upload-artifact@v3 - with: - name: test-allure-mac-ci - path: ./allure-results/ - - - name: Upload Screenshots for MacOS 📷 - uses: actions/upload-artifact@v3 - if: failure() - with: - name: appium-screenshots-MacOS - path: ./test-results - - - name: Upload Appium Log for MacOS 📷 - uses: actions/upload-artifact@v3 - if: failure() - with: - name: appium-log-macos - path: ./appium.log - - - name: Add label if any of test jobs failed - if: failure() - uses: buildsville/add-remove-label@v2.0.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - labels: | - Failed Automated Test - type: add - - test-mac-chats: - needs: build-mac - runs-on: macos-14 - - steps: - - name: Checkout testing directory 🔖 - uses: actions/checkout@v4 - - - name: Checkout Warp directory 🔖 - uses: actions/checkout@v4 - with: - repository: Satellite-im/Warp - ref: b574da4ab10cfd7bf38ec0e2b499232a2e8f8eff - path: "./warp" - - - name: Install Dependencies - continue-on-error: true - run: | - brew update - brew install cairo pango - - - name: Download Key file 🗳️ - uses: actions/download-artifact@v3 - with: - name: keyfile - path: ./warp - - - name: Install Rust 💿 - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.75.0 - override: true - components: rustfmt, clippy - - - name: Download the MacOS app 🗳️ - uses: actions/download-artifact@v3 - with: - name: Uplink-macos-latest - path: ./apps - - - name: Enable opening app not codesigned 🖥️ - run: sudo spctl --master-disable - - - name: Copy DMG to Appium Apps Directory 💿 - working-directory: ./apps - run: | - unzip Uplink-Mac-Universal.zip - cp -r ./Uplink.app ./Uplink2.app - cp -r ./Uplink.app ./Uplink3.app - perl -i -pe 's/im.satellite.uplink/im.satellite.uplinkChatUserA/g' ./Uplink.app/Contents/Info.plist - perl -i -pe 's/im.satellite.uplink/im.satellite.uplinkChatUserB/g' ./Uplink2.app/Contents/Info.plist - perl -i -pe 's/im.satellite.uplink/im.satellite.uplinkChatUserC/g' ./Uplink3.app/Contents/Info.plist - cp -r ./Uplink.app /Applications/ - cp -r ./Uplink2.app /Applications/ - cp -r ./Uplink3.app /Applications/ - sudo xattr -r -d com.apple.quarantine /Applications/Uplink.app - sudo xattr -r -d com.apple.quarantine /Applications/Uplink2.app - sudo xattr -r -d com.apple.quarantine /Applications/Uplink3.app - - - name: Setup Node.js 🔨 - uses: actions/setup-node@v3 - with: - node-version: 20 - cache: "npm" - - - name: Cache NPM dependencies 🔨 - uses: actions/cache@v3 - id: cache-mac - with: - path: node_modules - key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} - - - name: Install NPM dependencies 📦 - if: steps.cache-mac.outputs.cache-hit != 'true' - run: npm ci - - - name: Update MacOS runner to not autocorrect text - run: | - defaults write -g NSAutomaticCapitalizationEnabled -bool false - defaults write -g NSAutomaticPeriodSubstitutionEnabled -bool false - defaults write -g NSAutomaticSpellingCorrectionEnabled -bool false - - - name: Run cargo build shuttle on Warp 🚀 - working-directory: ./warp - run: cargo build --bin shuttle --release - - - name: Launch CI instance of Warp 🚀 - working-directory: ./warp - run: ./target/release/shuttle --keyfile key.bin --listen-addr /ip4/127.0.0.1/tcp/4444 & - - - name: Run Tests on MacOS 🧪 - run: npm run mac.multiremote - - - name: Upload Test Report - MacOS CI - if: always() - uses: actions/upload-artifact@v3 - with: - name: test-report-macos-chats - path: ./test-report/*.xml - - - name: Upload Allure Test Results - if: always() - uses: actions/upload-artifact@v3 - with: - name: test-allure-mac-chats - path: ./allure-results/ - - - name: Upload Screenshots for MacOS 📷 - uses: actions/upload-artifact@v3 - if: failure() - with: - name: appium-screenshots-MacOS-chats - path: ./test-results - - - name: Upload Appium Log for MacOS 📷 - uses: actions/upload-artifact@v3 - if: failure() - with: - name: appium-log-macos-chats - path: ./appium.log - - - name: Upload Uplink Logs if test fails 📷 - uses: actions/upload-artifact@v3 - if: failure() - with: - name: uplink-logs - path: | - ~/.uplink/.user/debug.log - ~/.uplinkUserB/.user/debug.log - ~/.uplinkUserC/.user/debug.log - - - name: Add label if any of test jobs failed - if: failure() - uses: buildsville/add-remove-label@v2.0.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - labels: | - Failed Automated Test - type: add - - test-windows: - needs: build-windows - runs-on: windows-latest - - steps: - - name: Checkout testing directory 🔖 - uses: actions/checkout@v4 - - - name: Checkout Warp directory 🔖 - uses: actions/checkout@v4 - with: - repository: Satellite-im/Warp - ref: b574da4ab10cfd7bf38ec0e2b499232a2e8f8eff - path: "./warp" - - - name: Download Key file 🗳️ - uses: actions/download-artifact@v3 - with: - name: keyfile - path: ./warp - - - name: Install Rust 💿 - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.75.0 - override: true - components: rustfmt, clippy - - - name: Change resolution on Windows Runner - run: Set-DisplayResolution -Width 1920 -Height 1080 -Force - shell: powershell - - - name: Download the Windows app 🗳️ - uses: actions/download-artifact@v3 - with: - name: Uplink-windows-latest - path: ./apps - - - name: Install MSI and copy assets - working-directory: ./apps - run: | - Get-ChildItem -Recurse -Include "*.msi" | Rename-Item -NewName "uplink.msi" - mkdir C:\uplink - mv ./uplink.msi C:\uplink - Start-Process msiexec.exe -Wait -ArgumentList '/i "C:\uplink\uplink.msi" /qb' - - - name: Copy assets from Uplink - run: | - mkdir C:\Program` Files\extensions - mkdir $home/.uplink/themes - mkdir $home/.uplink/extensions - cp -r C:\Program` Files\uplink\bin\uplink.exe C:\Program` Files\uplink - cp -r C:\Program` Files\uplink\extensions\emoji_selector.dll C:\Program` Files\extensions - cp -r C:\Program` Files\uplink\extra\themes\ $home/.uplink/themes - cp -r C:\Program` Files\uplink\extensions\emoji_selector.dll $home/.uplink/extensions - - - name: Setup Node.js 🔨 - uses: actions/setup-node@v3 - with: - node-version: 20 - cache: "npm" - - - name: Cache NPM dependencies 🔨 - uses: actions/cache@v3 - id: cache-windows - with: - path: node_modules - key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} - - - name: Install NPM dependencies 📦 - if: steps.cache-windows.outputs.cache-hit != 'true' - run: npm ci - - - name: Delete Cache Folder of Appium if exists - Windows - run: If (Test-Path $home/.appium) {Remove-Item -Recurse -Force $home/.appium} Else { Break } - shell: powershell - - - name: Setup FFMPEG to record screen - uses: FedericoCarboni/setup-ffmpeg@v2 - id: setup-ffmpeg - - - name: Run cargo build shuttle on Warp 🚀 - working-directory: ./warp - run: cargo build --bin shuttle --release - - - name: Launch CI instance of Warp 🚀 - working-directory: ./warp - run: ./target/release/shuttle --keyfile key.bin --listen-addr /ip4/127.0.0.1/tcp/4444 & - - - name: Delete Cache Folder if exists - Windows - run: If (Test-Path $home/.uplink/.user) {Remove-Item -Recurse -Force $home/.uplink/.user} Else { Break } - shell: powershell - - - name: Run Tests on Windows 🧪 - id: test-execution-windows - run: | - $env:DRIVER="windows" - npm run windows.ci - - - name: Upload Test Report - Windows CI - if: always() - uses: actions/upload-artifact@v3 - with: - name: test-report-windows-ci - path: ./test-report/*.xml - - - name: Upload Allure Test Results - if: always() - uses: actions/upload-artifact@v3 - with: - name: test-allure-windows-ci - path: ./allure-results/ - - - name: Upload Screenshots for Windows 📷 - uses: actions/upload-artifact@v3 - if: failure() - with: - name: appium-screenshots-windows - path: ./test-results - - - name: Upload Appium Log for Windows 📷 - uses: actions/upload-artifact@v3 - if: failure() - with: - name: appium-log-windows - path: ./appium.log - - - name: Add label if any of test jobs failed - if: failure() - uses: buildsville/add-remove-label@v2.0.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - labels: | - Failed Automated Test - type: add - - publish-test-results: - if: always() - needs: - [ - create-node, - build-mac, - build-windows, - test-mac, - test-mac-chats, - test-windows, - ] - runs-on: ubuntu-latest - permissions: - checks: write - pull-requests: write - contents: write - issues: read - - steps: - - name: Download Test Report for MacOS CI - uses: actions/download-artifact@v3 - with: - name: test-report-macos-ci - path: artifacts - - - name: Download Test Report for MacOS Chats - uses: actions/download-artifact@v3 - with: - name: test-report-macos-chats - path: artifacts - - - name: Download Test Report for Windows CI - uses: actions/download-artifact@v3 - with: - name: test-report-windows-ci - path: artifacts - - - name: Download Allure Results for MacOS CI - uses: actions/download-artifact@v3 - with: - name: test-allure-mac-ci - path: testing-uplink/allure - - - name: Download Allure Results for MacOS CHats - uses: actions/download-artifact@v3 - with: - name: test-allure-mac-chats - path: testing-uplink/allure - - - name: Download Allure Results for Windows CI - uses: actions/download-artifact@v3 - with: - name: test-allure-windows-ci - path: testing-uplink/allure - - - name: Publish Test Results for Tests - uses: EnricoMi/publish-unit-test-result-action/composite@v2 - if: success() - with: - junit_files: "artifacts/**/*.xml" - ignore_runs: true - job_summary: false - compare_to_earlier_commit: false - check_name: "UI Automated Test Results Summary for MacOS/Windows" - - - name: Get Allure history - uses: actions/checkout@v4 - if: success() - continue-on-error: true - with: - repository: Satellite-im/test-reports - ref: gh-pages - path: gh-pages - - - name: Allure Report action from marketplace - uses: simple-elf/allure-report-action@master - if: success() - id: allure-report - with: - gh_pages: gh-pages - allure_results: testing-uplink/allure - allure_report: allure-report - allure_history: allure-history - keep_reports: 20 - - - name: Deploy report to Github Pages - if: success() - uses: peaceiris/actions-gh-pages@v3 - with: - deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} - external_repository: Satellite-im/test-reports - publish_branch: gh-pages - publish_dir: allure-history - - - name: Comment PR with the Test Results - if: success() - uses: mshick/add-pr-comment@v2 - with: - message: | - UI Automated Tests execution is complete! You can find the test results report [here](https://satellite-im.github.io/test-reports/${{ github.run_number }}) - - remove-label: - needs: - [ - create-node, - build-mac, - build-windows, - test-mac, - test-mac-chats, - test-windows, - publish-test-results, - ] - runs-on: ubuntu-latest - - steps: - - name: Checkout testing directory 🔖 - uses: actions/checkout@v4 - - - name: Delete artifacts required on failed execution - uses: geekyeggo/delete-artifact@v2 - with: - name: | - peerID - keyfile - Uplink-windows-latest - Uplink-macos-latest - test-report-macos-ci - test-report-macos-chats - test-report-windows-ci - test-allure-mac-ci - test-allure-mac-chats - test-allure-windows-ci - uplink-logs - - - name: Remove label if all test jobs succeeded - uses: buildsville/add-remove-label@v2.0.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - labels: | - Failed Automated Test - type: remove From 5a4606023e684b709248aad0536628e2300f130e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Mon, 22 Apr 2024 16:27:48 -0600 Subject: [PATCH 11/14] chore(appium): test codesign action with new setup --- .github/workflows/ui-automated-tests.yml | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 574446cddb..9b970a3617 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -67,15 +67,21 @@ jobs: - name: Build Installer run: cargo wix --package uplink --no-build --nocapture - - name: Sign Windows Installer - uses: dlemstra/code-sign-action@v1 + - name: Set up certificate p12 file + run: | + echo "${{ secrets.SM_CLIENT_CERT_FILE_B64 }}" | base64 --decode > /d/Certificate_pkcs12.p12 + shell: bash + + - name: Sign windows installer + env: + CERTIFICATE_HOST: ${{ secrets.SM_HOST }} + CERTIFICATE_HOST_API_KEY: ${{ secrets.SM_API_KEY }} + CERTIFICATE_SHA1_HASH: ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }} + CLIENT_CERTIFICATE: /d/Certificate_pkcs12.p12 + CLIENT_CERTIFICATE_PASSWORD: ${{ secrets.SM_CLIENT_CERT_PASSWORD }} + uses: cognitedata/code-sign-action/@v2 with: - certificate: "${{ secrets.WINDOWS_TEST_CERTIFICATE }}" - password: "${{ secrets.WINDOWS_TEST_CERTIFICATE_PASSWORD }}" - folder: "target/wix" - recursive: true - files: | - target/wix/*.msi + path-to-binary: target/wix/*.msi - name: Upload Executable ⬆️ uses: actions/upload-artifact@v3 From b578cf86621f810008b21d2f1193c6e3da039551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Mon, 22 Apr 2024 17:03:15 -0600 Subject: [PATCH 12/14] chore(appium): fix certificate secret --- .github/workflows/ui-automated-tests.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 9b970a3617..902a08bef8 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -67,17 +67,12 @@ jobs: - name: Build Installer run: cargo wix --package uplink --no-build --nocapture - - name: Set up certificate p12 file - run: | - echo "${{ secrets.SM_CLIENT_CERT_FILE_B64 }}" | base64 --decode > /d/Certificate_pkcs12.p12 - shell: bash - - name: Sign windows installer env: CERTIFICATE_HOST: ${{ secrets.SM_HOST }} CERTIFICATE_HOST_API_KEY: ${{ secrets.SM_API_KEY }} CERTIFICATE_SHA1_HASH: ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }} - CLIENT_CERTIFICATE: /d/Certificate_pkcs12.p12 + CLIENT_CERTIFICATE: ${{ secrets.SM_CLIENT_CERT_FILE_B64 }} CLIENT_CERTIFICATE_PASSWORD: ${{ secrets.SM_CLIENT_CERT_PASSWORD }} uses: cognitedata/code-sign-action/@v2 with: From 7fce91a9313fcb4c87a958cd81c0b50ae2a14c07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carden=CC=83a?= <35935591+luisecm@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:08:38 -0600 Subject: [PATCH 13/14] chore(appium): try steps from digicert page --- .github/workflows/ui-automated-tests.yml | 50 +++++++++++++++++++----- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 902a08bef8..682077cd15 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -67,16 +67,46 @@ jobs: - name: Build Installer run: cargo wix --package uplink --no-build --nocapture - - name: Sign windows installer - env: - CERTIFICATE_HOST: ${{ secrets.SM_HOST }} - CERTIFICATE_HOST_API_KEY: ${{ secrets.SM_API_KEY }} - CERTIFICATE_SHA1_HASH: ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }} - CLIENT_CERTIFICATE: ${{ secrets.SM_CLIENT_CERT_FILE_B64 }} - CLIENT_CERTIFICATE_PASSWORD: ${{ secrets.SM_CLIENT_CERT_PASSWORD }} - uses: cognitedata/code-sign-action/@v2 - with: - path-to-binary: target/wix/*.msi + - name: Setup Certificate + run: | + echo "${{ secrets.SM_CLIENT_CERT_FILE_B64 }}" | base64 --decode > /d/Certificate_pkcs12.p12 + cat /d/Certificate_pkcs12.p12 + shell: bash + + - name: Set variables + id: variables + run: | + dir + echo "::set-output name=version::${GITHUB_REF#refs/tags/v}" + echo "::set-output name=KEYPAIR_NAME::gt-standard-keypair" + echo "::set-output name=CERTIFICATE_NAME::gt-certificate" + echo "SM_HOST=${{ secrets.SM_HOST }}" >> "$GITHUB_ENV" + echo "SM_API_KEY=${{ secrets.SM_API_KEY }}" >> "$GITHUB_ENV" + echo "SM_CLIENT_CERT_FILE=D:\\Certificate_pkcs12.p12" >> "$GITHUB_ENV" + echo "SM_CLIENT_CERT_PASSWORD=${{ secrets.SM_CLIENT_CERT_PASSWORD }}" >> "$GITHUB_ENV" + echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH + echo "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools" >> $GITHUB_PATH + echo "C:\Program Files\DigiCert\DigiCert Keylocker Tools" >> $GITHUB_PATH + shell: bash + + - name: Setup Keylocker KSP on windows + run: | + curl -X GET https://one.digicert.com/signingmanager/api-ui/v1/releases/Keylockertools-windows-x64.msi/download -H "x-api-key:%SM_API_KEY%" -o Keylockertools-windows-x64.msi + msiexec /i Keylockertools-windows-x64.msi /quiet /qn + smksp_registrar.exe list + smctl.exe keypair ls + C:\Windows\System32\certutil.exe -csp "DigiCert Signing Manager KSP" -key -user + shell: cmd + + - name: Certificates Sync + run: | + smctl windows certsync + shell: cmd + + - name: Signing using Signtool + run: | + signtool.exe sign /sha1 ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }} /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 ".\target\wix\*.msi" + signtool.exe verify /v /pa ".\target\wix\*.msi" - name: Upload Executable ⬆️ uses: actions/upload-artifact@v3 From 2d11d5936adf945334bd4adb54cbaf306e053f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Carde=C3=B1a=20Maldonado?= Date: Tue, 23 Apr 2024 12:35:27 -0600 Subject: [PATCH 14/14] chore(appium): install appium and drivers as devdep --- .github/workflows/ui-automated-tests.yml | 51 +++++------------------- 1 file changed, 11 insertions(+), 40 deletions(-) diff --git a/.github/workflows/ui-automated-tests.yml b/.github/workflows/ui-automated-tests.yml index 682077cd15..c7d6334490 100644 --- a/.github/workflows/ui-automated-tests.yml +++ b/.github/workflows/ui-automated-tests.yml @@ -67,46 +67,17 @@ jobs: - name: Build Installer run: cargo wix --package uplink --no-build --nocapture - - name: Setup Certificate - run: | - echo "${{ secrets.SM_CLIENT_CERT_FILE_B64 }}" | base64 --decode > /d/Certificate_pkcs12.p12 - cat /d/Certificate_pkcs12.p12 - shell: bash - - - name: Set variables - id: variables - run: | - dir - echo "::set-output name=version::${GITHUB_REF#refs/tags/v}" - echo "::set-output name=KEYPAIR_NAME::gt-standard-keypair" - echo "::set-output name=CERTIFICATE_NAME::gt-certificate" - echo "SM_HOST=${{ secrets.SM_HOST }}" >> "$GITHUB_ENV" - echo "SM_API_KEY=${{ secrets.SM_API_KEY }}" >> "$GITHUB_ENV" - echo "SM_CLIENT_CERT_FILE=D:\\Certificate_pkcs12.p12" >> "$GITHUB_ENV" - echo "SM_CLIENT_CERT_PASSWORD=${{ secrets.SM_CLIENT_CERT_PASSWORD }}" >> "$GITHUB_ENV" - echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH - echo "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools" >> $GITHUB_PATH - echo "C:\Program Files\DigiCert\DigiCert Keylocker Tools" >> $GITHUB_PATH - shell: bash - - - name: Setup Keylocker KSP on windows - run: | - curl -X GET https://one.digicert.com/signingmanager/api-ui/v1/releases/Keylockertools-windows-x64.msi/download -H "x-api-key:%SM_API_KEY%" -o Keylockertools-windows-x64.msi - msiexec /i Keylockertools-windows-x64.msi /quiet /qn - smksp_registrar.exe list - smctl.exe keypair ls - C:\Windows\System32\certutil.exe -csp "DigiCert Signing Manager KSP" -key -user - shell: cmd - - - name: Certificates Sync - run: | - smctl windows certsync - shell: cmd - - - name: Signing using Signtool - run: | - signtool.exe sign /sha1 ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }} /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 ".\target\wix\*.msi" - signtool.exe verify /v /pa ".\target\wix\*.msi" + - name: Sign Wix Installer + uses: skymatic/code-sign-action@v1 + with: + certificate: "${{ secrets.SM_CLIENT_CERT_FILE_B64 }}" + password: "${{ secrets.SM_CLIENT_CERT_PASSWORD }}" + certificatesha1: "${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }}" + certificatename: "Certificate for Uplink Installer" + description: "Uplink Installer" + timestampUrl: "http://timestamp.digicert.com" + folder: "target/wix/*.msi" + recursive: true - name: Upload Executable ⬆️ uses: actions/upload-artifact@v3