Skip to content

UI Tests on Windows and MacOS 🧪 #1830

UI Tests on Windows and MacOS 🧪

UI Tests on Windows and MacOS 🧪 #1830

name: UI Tests on Windows and MacOS 🧪
on:
schedule:
- cron: "0 0/6 * * 1-5"
pull_request:
types: [opened, synchronize, reopened, edited]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CARGO_TERM_COLOR: always
jobs:
build-mac:
runs-on: macos-13
steps:
- name: Checkout testing directory 🔖
uses: actions/checkout@v3
with:
repository: Satellite-im/Uplink
- name: Set up cargo cache 🛠️
uses: Swatinem/rust-cache@v2
- name: Install Rust 💿
uses: actions-rs/toolchain@v1
with:
toolchain: 1.73.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: 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:
runs-on:
labels: windows-latest
steps:
- name: Checkout testing directory 🔖
uses: actions/checkout@v3
with:
repository: Satellite-im/Uplink
- name: Install Rust 💿
uses: actions-rs/toolchain@v1
with:
toolchain: 1.73.0
override: true
components: rustfmt, clippy
- name: Build executable 🖥️
run: cargo build --release -F production_mode
continue-on-error: true
- name: Create ZIP archive on Windows 🗳️
run: Compress-Archive -Path target/release/uplink.exe -Destination uplinkWindows.zip
- name: Copy Extensions 🗳️
run: |
mkdir ./ui/extra/extensions
cp -r ./target/release/emoji_selector.d ./ui/extra/extensions/
cp -r ./target/release/emoji_selector.dll ./ui/extra/extensions/
cp -r ./target/release/emoji_selector.dll.exp ./ui/extra/extensions/
cp -r ./target/release/emoji_selector.dll.lib ./ui/extra/extensions/
cp -r ./target/release/emoji_selector.pdb ./ui/extra/extensions/
- name: Upload Executable ⬆️
uses: actions/upload-artifact@v3
with:
name: Uplink-windows-latest
path: uplinkWindows.zip
- name: Upload Windows Assets
uses: actions/upload-artifact@v3
with:
name: uplink-windows-assets
path: |
ui/extra/images/
ui/extra/prism_langs/
ui/extra/themes/
ui/extra/extensions/
- 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-13
steps:
- name: Checkout testing directory 🔖
uses: actions/checkout@v3
- 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 /Applications/
sudo xattr -r -d com.apple.quarantine /Applications/Uplink.app
- name: Setup Node.js 🔨
uses: actions/setup-node@v3
with:
node-version: 18
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: Install Appium Server 💻
run: |
npm install -g appium@next
appium -v
- name: Install Appium Driver 💻
run: |
appium driver install mac2
appium driver list
- 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 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-13
steps:
- name: Checkout testing directory 🔖
uses: actions/checkout@v3
- 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.uplinkChatUserA/g' ./Uplink.app/Contents/Info.plist
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: 18
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: Install Appium Server 💻
run: |
npm install -g appium@next
appium -v
- name: Install Appium Driver 💻
run: |
appium driver install mac2
appium driver list
- 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 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@v3
- 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: Extract .zip into apps Directory 🗳️
run: Expand-Archive -Path ./apps/uplinkWindows.zip -DestinationPath ./apps
- name: Download the Windows app assets
uses: actions/download-artifact@v3
with:
name: uplink-windows-assets
path: ./apps
- name: Move Windows assets to correct locations 💿
working-directory: ./apps
run: |
mkdir ./bin/extra
mkdir ./extra
mv ./uplink.exe ./bin/
mv ./images/ ./bin/extra/
mv ./prism_langs/ ./bin/extra/
mv ./themes/ ./extra/
- name: Setup Node.js 🔨
uses: actions/setup-node@v3
with:
node-version: 18
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: Install and Run Appium Server 💻
run: |
npm install -g appium@next
appium -v
- name: Install Appium Driver 💻
run: |
appium driver install --source=npm appium-windows-driver
appium driver list
- name: Setup FFMPEG to record screen
uses: FedericoCarboni/setup-ffmpeg@v2
id: setup-ffmpeg
- 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: 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: [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: allure
- name: Download Allure Results for MacOS CHats
uses: actions/download-artifact@v3
with:
name: test-allure-mac-chats
path: allure
- name: Download Allure Results for Windows CI
uses: actions/download-artifact@v3
with:
name: test-allure-windows-ci
path: 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@v3
if: success()
continue-on-error: true
with:
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: 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:
github_token: ${{ secrets.GITHUB_TOKEN }}
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/testing-uplink/${{ github.run_number }})
remove-artifacts:
needs:
[
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@v3
- name: Remove label if all test jobs succeeded
uses: buildsville/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
labels: |
Failed Automated Test
type: remove
- name: Delete artifacts
uses: geekyeggo/delete-artifact@v2
with:
name: |
Uplink-windows-latest
uplink-windows-assets
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