From 4614f57fdfa3df090e53e099eca05e355c063a79 Mon Sep 17 00:00:00 2001 From: Aleksandr Pasevin Date: Sat, 21 Feb 2026 12:36:22 +0200 Subject: [PATCH 1/2] ci(export): add e2e packed export build verification to pr checks Run the full export-then-build pipeline on every PR to catch regressions in adapter exports, type declarations, CSS theming, and bundling before merge. The existing unit tests remain as a fast gate while the new e2e-export job verifies the packed tarball workflow end-to-end. Also broadens the workflow trigger from export-path-only to all PRs, since adapter/type/style/plugin changes can break exports. --- .github/workflows/export-testing.yml | 69 ++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 4 deletions(-) diff --git a/.github/workflows/export-testing.yml b/.github/workflows/export-testing.yml index 88e951ce..4916d114 100644 --- a/.github/workflows/export-testing.yml +++ b/.github/workflows/export-testing.yml @@ -6,12 +6,8 @@ name: Export Testing on: push: branches: [main] - paths: - - "apps/builder/src/export/**" pull_request: branches: [main] - paths: - - "apps/builder/src/export/**" permissions: contents: read @@ -99,3 +95,68 @@ jobs: name: export-test-results path: apps/builder/test-results retention-days: 5 + + e2e-export: + runs-on: ubuntu-latest + name: E2E Export Build Verification + permissions: + contents: read + + strategy: + matrix: + node-version: [22.x] + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 + with: + egress-policy: audit + + - name: Check if app creds exist (base repo only) + id: has-app + run: | + present=true + if [ "${{ github.event.pull_request.head.repo.fork || false }}" = "true" ]; then present=false; fi + if [ -z "${{ vars.GH_APP_ID }}" ] || [ -z "${{ secrets.GH_APP_PRIVATE_KEY }}" ]; then present=false; fi + echo "present=$present" >> "$GITHUB_OUTPUT" + + - uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1.11.7 + id: gh-app-token + if: steps.has-app.outputs.present == 'true' + with: + app-id: ${{ vars.GH_APP_ID }} + private-key: ${{ secrets.GH_APP_PRIVATE_KEY }} + + - name: Select token + id: auth + run: | + if [ "${{ steps.has-app.outputs.present }}" = "true" ]; then + echo "token=${{ steps.gh-app-token.outputs.token }}" >> "$GITHUB_OUTPUT" + else + echo "token=${{ github.token }}" >> "$GITHUB_OUTPUT" + fi + + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Prepare pre-requisites + uses: ./.github/actions/prepare + with: + token: ${{ steps.auth.outputs.token }} + + - name: Configure npm authentication for npm registry + run: | + echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc + + - name: Install dependencies + run: pnpm install + + - name: Build all packages + run: pnpm -r build + env: + NODE_OPTIONS: "--max-old-space-size=8192" + + - name: Run packed export e2e test + run: node apps/builder/src/export/cli/export-app.cjs export --env packed -o exports/ci-test + env: + NODE_OPTIONS: "--max-old-space-size=8192" From c827b3ae51b4b0b0f81943b3303b7648f25ce586 Mon Sep 17 00:00:00 2001 From: Aleksandr Pasevin Date: Sat, 21 Feb 2026 12:56:41 +0200 Subject: [PATCH 2/2] ci(export-testing): run e2e export tests for all chain types in parallel Use a matrix strategy with evm, solana, and stellar chains so each adapter's full export pipeline is verified independently. fail-fast is disabled so one adapter failure does not mask issues in others. --- .github/workflows/export-testing.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/export-testing.yml b/.github/workflows/export-testing.yml index 4916d114..6eeaa634 100644 --- a/.github/workflows/export-testing.yml +++ b/.github/workflows/export-testing.yml @@ -98,12 +98,14 @@ jobs: e2e-export: runs-on: ubuntu-latest - name: E2E Export Build Verification + name: E2E Export – ${{ matrix.chain }} permissions: contents: read strategy: + fail-fast: false matrix: + chain: [evm, solana, stellar] node-version: [22.x] steps: @@ -156,7 +158,7 @@ jobs: env: NODE_OPTIONS: "--max-old-space-size=8192" - - name: Run packed export e2e test - run: node apps/builder/src/export/cli/export-app.cjs export --env packed -o exports/ci-test + - name: Run packed export e2e test (${{ matrix.chain }}) + run: node apps/builder/src/export/cli/export-app.cjs export --env packed -c ${{ matrix.chain }} -o exports/ci-test-${{ matrix.chain }} env: NODE_OPTIONS: "--max-old-space-size=8192"