Test against testrig #92
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: "Test against testrig" | |
# Needed secrets: | |
# - DEPLOY_KEY: private ssh key to access [email protected] | |
# - DEPLOY_KNOWN_HOSTS: known hosts including [email protected] | |
# - TAILSCALE_AUTHKEY: reusable, ephemeral, tagged tailscale auth key to access flashhost | |
# and DUTs | |
on: | |
workflow_dispatch: | |
inputs: | |
target: | |
description: "Target DUT to deploy to" | |
required: true | |
default: 'pic' | |
image: | |
description: "Image to deploy" | |
required: false | |
default: '0.18.0-latest' | |
e2e-branch: | |
description: "Branch to run E2E tests from" | |
required: false | |
default: 'maintenance' | |
jobs: | |
deploy: | |
name: "🏗 Deploy" | |
runs-on: ubuntu-latest | |
outputs: | |
target: ${{ env.TARGET }} | |
image: ${{ env.IMAGE }} | |
steps: | |
- name: "🧥 Cloak some stuff" | |
env: | |
TESTRIG_WIFI_NAME: ${{ secrets.TESTRIG_WIFI_NAME }} | |
TESTRIG_WIFI_KEY: ${{ secrets.TESTRIG_WIFI_KEY }} | |
run: | | |
echo "::add-mask::$TESTRIG_WIFI_NAME" | |
echo "::add-mask::$TESTRIG_WIFI_KEY" | |
- name: "🔑 Install SSH key in agent" | |
uses: shimataro/ssh-key-action@v2 | |
with: | |
key: ${{ secrets.DEPLOY_KEY }} | |
known_hosts: ${{ secrets.DEPLOY_KNOWN_HOSTS }} | |
- name: "🌐 Connect to tailscale network" | |
uses: tailscale/github-action@v1 | |
with: | |
authkey: ${{ secrets.TAILSCALE_AUTHKEY }} | |
- name: ✔ Check if tailscale is running | |
run: | | |
tailscale --version | |
tailscale status | |
ping -c 3 flashhost | |
ssh fab@flashhost flashhost_list_images | |
- name: 🔍 Determine image | |
run: | | |
IMAGE=${{ github.event.inputs.image }} | |
if [[ "$IMAGE" == https://* ]] || [[ $IMAGE == http://* ]] | |
then | |
URL="$IMAGE" | |
IMAGE="github-run-${{ github.run_id }}-${{ github.run_attempt }}" | |
ssh fab@flashhost flashhost_fetch_image:"$URL",$IMAGE | |
fi | |
echo "Image: $IMAGE" | |
echo "IMAGE=$IMAGE" >> $GITHUB_ENV | |
- name: "🔥 Flash & provision image" | |
env: | |
TARGET: ${{ github.event.inputs.target }} | |
IMAGE: ${{ env.IMAGE }} | |
run: | | |
ssh -o SendEnv=TARGET fab@flashhost flashhost_flash_and_provision:$IMAGE octopi_wait:headless=1 | |
- name: "🐙 Preconfigure OctoPrint" | |
env: | |
TARGET: ${{ github.event.inputs.target }} | |
run: | | |
ssh -o SendEnv=TARGET fab@flashhost octopi_test_provisioned:headless=1,config=configs/e2e | |
- name: "🧹 Clean up if needed" | |
if: always() | |
run: | | |
IMAGE="${{ env.IMAGE }}" | |
if [[ "$IMAGE" == github-run-* ]] | |
then | |
ssh fab@flashhost flashhost_remove_image:$IMAGE | |
fi | |
e2e: | |
name: "🧪 E2E" | |
runs-on: ubuntu-latest | |
needs: deploy | |
steps: | |
- name: "🌐 Connect to tailscale network" | |
uses: tailscale/github-action@v1 | |
with: | |
authkey: ${{ secrets.TAILSCALE_AUTHKEY }} | |
- name: ✔ Check if tailscale is running and make sure DUT is up | |
run: | | |
tailscale --version | |
tailscale status | |
curl http://flashhost/${{ github.event.inputs.target }}/ | |
- name: "⬇ Checkout maintenance OctoPrint with Playwright E2E tests" | |
uses: actions/checkout@v3 | |
with: | |
repository: OctoPrint/OctoPrint | |
ref: ${{ github.event.inputs.e2e-branch }} | |
path: OctoPrint | |
- name: 🏗 Prepare Playwright env | |
working-directory: OctoPrint/tests/playwright | |
run: | | |
npm ci | |
PLAYWRIGHT_VERSION=$(npm ls --json @playwright/test | jq --raw-output '.dependencies["@playwright/test"].version') | |
echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV | |
- name: 🧰 Cache Playwright browser binaries | |
uses: actions/cache@v3 | |
id: playwright-cache | |
with: | |
path: "~/.cache/ms-playwright" | |
key: "${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}" | |
restore-keys: | | |
${{ runner.os }}-playwright- | |
- name: 🏗 Install Playwright browser binaries & OS dependencies | |
if: steps.playwright-cache.outputs.cache-hit != 'true' | |
working-directory: OctoPrint/tests/playwright | |
run: | | |
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list | |
npx playwright install --with-deps | |
- name: 🏗 Install Playwright OS dependencies | |
if: steps.playwright-cache.outputs.cache-hit == 'true' | |
working-directory: OctoPrint/tests/playwright | |
run: | | |
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list | |
npx playwright install-deps | |
- name: 🎭 Run Playwright | |
working-directory: OctoPrint/tests/playwright | |
run: | | |
npx playwright test | |
env: | |
NO_SERVER: true | |
PLAYWRIGHT_BASEURL: "http://flashhost/${{ github.event.inputs.target }}" | |
- name: 📷 Check webcam | |
run: | | |
curl -i -o webcam.jpg http://flashhost/${{ github.event.inputs.target }}/webcam/?action=snapshot | |
- name: ⬆ Upload Playwright report | |
uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: playwright-report | |
path: OctoPrint/tests/playwright/playwright-report |