Skip to content

UI Tests on Windows and MacOS 🧪 #2899

UI Tests on Windows and MacOS 🧪

UI Tests on Windows and MacOS 🧪 #2899

name: UI Tests on Windows and MacOS 🧪
on:
schedule:
- cron: "0 0/6 * * 1-5"
pull_request:
types: [opened, synchronize, reopened, edited]
paths-ignore:
- ".github/workflows/**"
- "!.github/workflows/ui-automated-tests.yml"
- "docs/**"
- ".gitignore"
- ".prettierignore"
- ".prettierrc.json"
- "PULL_REQUEST_TEMPLATE.md"
- "README.md"
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CARGO_TERM_COLOR: always
jobs:
create-node:
runs-on: ubuntu-latest
steps:
- name: Checkout Warp directory 🔖
uses: actions/checkout@v4
with:
repository: Satellite-im/Warp
ref: 01beb3ceda05b97aeba7e4ba6059c8ec1a2bd16b
- 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/[email protected]
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
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: Upload Executable ⬆️
uses: actions/upload-artifact@v3
with:
name: Uplink-windows-latest
path: target/wix/*.msi
- name: Add label if any of build jobs failed
if: failure()
uses: buildsville/[email protected]
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: 01beb3ceda05b97aeba7e4ba6059c8ec1a2bd16b
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/[email protected]
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: 01beb3ceda05b97aeba7e4ba6059c8ec1a2bd16b
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: Add label if any of test jobs failed
if: failure()
uses: buildsville/[email protected]
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: 01beb3ceda05b97aeba7e4ba6059c8ec1a2bd16b
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/[email protected]
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: 100
- 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
- name: Remove label if all test jobs succeeded
uses: buildsville/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
labels: |
Failed Automated Test
type: remove