UI Tests on Windows and MacOS 🧪 #2899
This file contains 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: 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 |