From 7ea9bf19443a31e7848fec8449ecb4615ec004eb Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 11 Apr 2025 17:28:17 +0100 Subject: [PATCH 1/3] Fix desktop-web version matching for develop branch test CI Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .github/workflows/build_and_test.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_and_test.yaml b/.github/workflows/build_and_test.yaml index 6569bb45..e3274ce1 100644 --- a/.github/workflows/build_and_test.yaml +++ b/.github/workflows/build_and_test.yaml @@ -13,8 +13,8 @@ jobs: permissions: contents: read with: - config: ${{ github.event.pull_request.base.ref == 'develop' && 'element.io/nightly' || 'element.io/release' }} - version: ${{ github.event.pull_request.base.ref == 'develop' && 'develop' || '' }} + config: ${{ (github.event.pull_request.base.ref || github.ref_name) == 'develop' && 'element.io/nightly' || 'element.io/release' }} + version: ${{ (github.event.pull_request.base.ref || github.ref_name) == 'develop' && 'develop' || '' }} windows: needs: fetch From b19061d8a4dd40cdc3531662a94d186d81831499 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 14 Apr 2025 15:37:12 +0100 Subject: [PATCH 2/3] Test release assets before deploy Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .github/workflows/build_and_test.yaml | 94 --------------------------- .github/workflows/build_linux.yaml | 11 ++++ .github/workflows/build_macos.yaml | 14 ++++ .github/workflows/build_test.yaml | 68 +++++++++++++++++++ .github/workflows/build_windows.yaml | 10 +++ 5 files changed, 103 insertions(+), 94 deletions(-) create mode 100644 .github/workflows/build_test.yaml diff --git a/.github/workflows/build_and_test.yaml b/.github/workflows/build_and_test.yaml index e3274ce1..23975871 100644 --- a/.github/workflows/build_and_test.yaml +++ b/.github/workflows/build_and_test.yaml @@ -42,97 +42,3 @@ jobs: needs: fetch name: macOS uses: ./.github/workflows/build_macos.yaml - - test: - needs: - - macos - - linux - - windows - strategy: - fail-fast: false - matrix: - include: - - name: macOS Universal - os: macos-14 - artifact: macos - executable: "/Users/runner/Applications/Element.app/Contents/MacOS/Element" - # We need to mount the DMG and copy the app to the Applications folder as a mounted DMG is - # read-only and thus would not allow us to override the fuses as is required for Playwright. - prepare_cmd: | - hdiutil attach ./dist/*.dmg -mountpoint /Volumes/Element && - rsync -a /Volumes/Element/Element.app ~/Applications/ && - hdiutil detach /Volumes/Element - - name: "Linux (amd64) (sqlcipher: system)" - os: ubuntu-22.04 - artifact: linux-amd64-sqlcipher-system - executable: "/opt/Element/element-desktop" - prepare_cmd: "sudo apt-get -qq update && sudo apt install ./dist/*.deb" - - name: "Linux (amd64) (sqlcipher: static)" - os: ubuntu-22.04 - artifact: linux-amd64-sqlcipher-static - executable: "/opt/Element/element-desktop" - prepare_cmd: "sudo apt-get -qq update && sudo apt install ./dist/*.deb" - - name: "Linux (arm64) (sqlcipher: system)" - os: ubuntu-22.04-arm - artifact: linux-arm64-sqlcipher-system - executable: "/opt/Element/element-desktop" - prepare_cmd: "sudo apt-get -qq update && sudo apt install -y ./dist/*.deb" - - name: "Linux (arm64) (sqlcipher: static)" - os: ubuntu-22.04-arm - artifact: linux-arm64-sqlcipher-static - executable: "/opt/Element/element-desktop" - prepare_cmd: "sudo apt-get -qq update && sudo apt install -y ./dist/*.deb" - - name: Windows (x86) - os: windows-2022 - artifact: win-ia32 - executable: "./dist/win-ia32-unpacked/Element.exe" - - name: Windows (x64) - os: windows-2022 - artifact: win-x64 - executable: "./dist/win-unpacked/Element.exe" - name: Test ${{ matrix.name }} - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-node@v4 - with: - node-version-file: .node-version - cache: "yarn" - - - name: Install Deps - run: "yarn install --frozen-lockfile" - - - uses: actions/download-artifact@v4 - with: - name: ${{ matrix.artifact }} - path: dist - - - name: Prepare for tests - run: ${{ matrix.prepare_cmd }} - if: matrix.prepare_cmd - - # We previously disabled the `EnableNodeCliInspectArguments` fuse, but Playwright requires - # it to be enabled to test Electron apps, so turn it back on. - - name: Set EnableNodeCliInspectArguments fuse enabled - run: $RUN_AS npx @electron/fuses write --app ${{ matrix.executable }} EnableNodeCliInspectArguments=on - shell: bash - env: - # We need sudo on Linux as it is installed in /opt/ - RUN_AS: ${{ runner.os == 'Linux' && 'sudo' || '' }} - - - name: Run tests - uses: coactions/setup-xvfb@6b00cf1889f4e1d5a48635647013c0508128ee1a - timeout-minutes: 5 - with: - run: "yarn test ${{ runner.os != 'Linux' && '--ignore-snapshots' || '' }}" - env: - ELEMENT_DESKTOP_EXECUTABLE: ${{ matrix.executable }} - - - name: Upload HTML report - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }}-test - path: playwright/html-report - retention-days: 14 diff --git a/.github/workflows/build_linux.yaml b/.github/workflows/build_linux.yaml index 4fae86e4..a092c61e 100644 --- a/.github/workflows/build_linux.yaml +++ b/.github/workflows/build_linux.yaml @@ -183,3 +183,14 @@ jobs: test -f ./dist/element-desktop*.tar.gz env: ARCH: ${{ inputs.arch }} + + test: + needs: build + uses: ./.github/workflows/build_test.yaml + with: + artifact: linux-${{ inputs.arch }}-sqlcipher-${{ inputs.sqlcipher }} + runs-on: ${{ inputs.arch == 'arm64' && 'ubuntu-22.04-arm' || 'ubuntu-22.04' }} + executable: /opt/Element/element-desktop + prepare_cmd: | + sudo apt-get -qq update + sudo apt install ./dist/*.deb diff --git a/.github/workflows/build_macos.yaml b/.github/workflows/build_macos.yaml index 7d4b88d6..22c63f09 100644 --- a/.github/workflows/build_macos.yaml +++ b/.github/workflows/build_macos.yaml @@ -145,3 +145,17 @@ jobs: run: | test -f ./dist/Element*.dmg test -f ./dist/Element*-mac.zip + + test: + needs: build + uses: ./.github/workflows/build_test.yaml + with: + artifact: macos + runs-on: macos-14 + executable: /Users/runner/Applications/Element.app/Contents/MacOS/Element + # We need to mount the DMG and copy the app to the Applications folder as a mounted DMG is + # read-only and thus would not allow us to override the fuses as is required for Playwright. + prepare_cmd: | + hdiutil attach ./dist/*.dmg -mountpoint /Volumes/Element && + rsync -a /Volumes/Element/Element.app ~/Applications/ && + hdiutil detach /Volumes/Element diff --git a/.github/workflows/build_test.yaml b/.github/workflows/build_test.yaml new file mode 100644 index 00000000..afcea94e --- /dev/null +++ b/.github/workflows/build_test.yaml @@ -0,0 +1,68 @@ +# This action helps run Playwright tests within one of the build_* stages. +on: + workflow_call: + inputs: + runs-on: + type: string + required: true + description: "The runner image to use" + artifact: + type: string + required: true + description: "The name of the artifact to download" + executable: + type: string + required: true + description: "Path to the executable to test" + prepare_cmd: + type: string + required: false + description: "Command to run to prepare the executable or environment for testing" +permissions: {} +jobs: + test: + runs-on: ${{ inputs.runs-on }} + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: "yarn" + + - name: Install Deps + run: "yarn install --frozen-lockfile" + + - uses: actions/download-artifact@v4 + with: + name: ${{ inputs.artifact }} + path: dist + + - name: Prepare for tests + run: ${{ inputs.prepare_cmd }} + if: inputs.prepare_cmd + + # We previously disabled the `EnableNodeCliInspectArguments` fuse, but Playwright requires + # it to be enabled to test Electron apps, so turn it back on. + - name: Set EnableNodeCliInspectArguments fuse enabled + run: $RUN_AS npx @electron/fuses write --app ${{ inputs.executable }} EnableNodeCliInspectArguments=on + shell: bash + env: + # We need sudo on Linux as it is installed in /opt/ + RUN_AS: ${{ runner.os == 'Linux' && 'sudo' || '' }} + + - name: Run tests + uses: coactions/setup-xvfb@6b00cf1889f4e1d5a48635647013c0508128ee1a + timeout-minutes: 5 + with: + run: "yarn test ${{ runner.os != 'Linux' && '--ignore-snapshots' || '' }}" + env: + ELEMENT_DESKTOP_EXECUTABLE: ${{ inputs.executable }} + + - name: Upload HTML report + if: always() + uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.artifact }}-test + path: playwright/html-report + retention-days: 14 diff --git a/.github/workflows/build_windows.yaml b/.github/workflows/build_windows.yaml index 00f63511..53d5b008 100644 --- a/.github/workflows/build_windows.yaml +++ b/.github/workflows/build_windows.yaml @@ -216,3 +216,13 @@ jobs: Test-Path './dist/squirrel-windows*/element-desktop-*-full.nupkg' Test-Path './dist/squirrel-windows*/RELEASES' Test-Path './dist/Element*.msi' + + test: + needs: build + uses: ./.github/workflows/build_test.yaml + # We have no Windows ARM64 runners at this time + if: inputs.arch != 'arm64' + with: + artifact: win-${{ inputs.arch }} + runs-on: windows-2022 + executable: ${{ inputs.arch == 'ia32' && './dist/win-ia32-unpacked/Element.exe' || './dist/win-unpacked/Element.exe' }} From 50b5c8acde627253b60f1e1f9cf11d3ed054a74b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 14 Apr 2025 15:54:45 +0100 Subject: [PATCH 3/3] Iterate Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .github/workflows/build_and_test.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/build_and_test.yaml b/.github/workflows/build_and_test.yaml index 23975871..0fda4711 100644 --- a/.github/workflows/build_and_test.yaml +++ b/.github/workflows/build_and_test.yaml @@ -42,3 +42,9 @@ jobs: needs: fetch name: macOS uses: ./.github/workflows/build_macos.yaml + + complete: + needs: [windows, linux, macos] + runs-on: ubuntu-22.04 + steps: + - run: echo "Tests successful"