fix: demos on win #281
Workflow file for this run
This file contains hidden or 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: Tman Linux ARM64 (Including Designer UI) | |
| on: | |
| release: | |
| types: [created] | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| paths: | |
| - "core/src/ten_manager/**" | |
| - "core/src/ten_rust/**" | |
| - "tools/tman/**" | |
| permissions: | |
| contents: write | |
| discussions: write | |
| security-events: write | |
| concurrency: | |
| group: tman-full-linux-arm64-${{ github.head_ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| call-check-pr-status: | |
| uses: ./.github/workflows/_check_pr_status.yml | |
| build: | |
| needs: call-check-pr-status | |
| if: ${{ needs.call-check-pr-status.outputs.should_continue == 'true' }} | |
| timeout-minutes: 360 | |
| runs-on: ubuntu-24.04-arm | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build_type: [debug, release] | |
| arch: [arm64] | |
| steps: | |
| - name: Check PR status before matrix execution | |
| uses: actions/github-script@v7 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| console.log('Event name:', context.eventName); | |
| console.log('Matrix:', ${{ toJson(matrix) }}); | |
| // Only check for PR events | |
| if (context.eventName !== 'pull_request') { | |
| console.log('Not a PR event, continuing...'); | |
| return; | |
| } | |
| // Ensure we have PR data | |
| if (!context.payload.pull_request) { | |
| console.log('No pull_request data in payload, continuing...'); | |
| return; | |
| } | |
| const { owner, repo } = context.repo; | |
| const prNumber = context.payload.pull_request.number; | |
| try { | |
| const pr = await github.rest.pulls.get({ | |
| owner, | |
| repo, | |
| pull_number: prNumber, | |
| }); | |
| console.log(`PR #${prNumber} state: ${pr.data.state}, merged: ${pr.data.merged}`); | |
| if (pr.data.state === 'closed') { | |
| if (pr.data.merged) { | |
| console.log(`PR #${prNumber} has been merged. Stopping matrix execution.`); | |
| core.setFailed('PR has been merged, stopping execution to save resources.'); | |
| } else { | |
| console.log(`PR #${prNumber} has been closed. Stopping matrix execution.`); | |
| core.setFailed('PR has been closed, stopping execution to save resources.'); | |
| } | |
| } else { | |
| console.log(`PR #${prNumber} is still open. Continuing matrix execution.`); | |
| } | |
| } catch (error) { | |
| console.error(`Error checking PR status: ${error.message}`); | |
| console.log('Error details:', error); | |
| console.log('Continuing matrix execution due to error...'); | |
| } | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| submodules: false | |
| - name: Trust working directory | |
| run: git config --global --add safe.directory "${GITHUB_WORKSPACE}" | |
| - name: Initialize and update submodules except portal/ | |
| run: | | |
| # Retrieve all submodule paths, excluding `portal/`. | |
| submodules=$(git config --file .gitmodules --get-regexp path | awk '$2 != "portal" { print $2 }') | |
| git submodule init | |
| for submodule in $submodules; do | |
| echo "Initializing submodule: $submodule" | |
| git submodule update --init --recursive --depth 1 "$submodule" | |
| done | |
| - name: Install tools and dependencies | |
| run: | | |
| pip3 install --use-pep517 python-dotenv jinja2 | |
| - name: Update version | |
| run: | | |
| python3 tools/version/update_version_in_ten_framework.py | |
| python3 tools/version/check_version_in_ten_framework.py | |
| - name: Build (tman with Designer UI) | |
| run: | | |
| export PATH=$(pwd)/core/ten_gn:/usr/local/go/bin:/root/go/bin:/root/.cargo/bin:$PATH | |
| echo $PATH | |
| go env -w GOFLAGS="-buildvcs=false" | |
| go install golang.org/dl/go1.24.3@latest | |
| export PATH=$PATH:$(go env GOPATH)/bin | |
| go1.24.3 download | |
| go1.24.3 version | |
| sudo apt-get update | |
| sudo apt-get install libc++-dev libc++abi-dev | |
| sudo apt-get install -y curl unzip | |
| curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.sh | |
| bash nodesource_setup.sh | |
| sudo apt-get install -y nodejs | |
| curl -fsSL https://bun.sh/install | bash | |
| export BUN_INSTALL="$HOME/.bun" | |
| export PATH="$BUN_INSTALL/bin:$PATH" | |
| cd core/src/ten_manager/designer_frontend | |
| bun install | |
| cd ${{ github.workspace }} | |
| rustup default nightly-2025-09-18 | |
| df -h . | |
| EXTRA_ARGS="is_clang=true log_level=1 enable_serialized_actions=true ten_rust_enable_gen_cargo_config=false ten_enable_cargo_clean=true ten_enable_go_lint=false ten_enable_rust_incremental_build=false ten_manager_enable_frontend=true ten_enable_ffmpeg_extensions=false ten_enable_nodejs_binding=false ten_enable_python_binding=false ten_enable_go_binding=false ten_enable_ten_rust=true ten_enable_ten_manager=true" | |
| echo $EXTRA_ARGS | |
| tgn gen linux ${{ matrix.arch }} ${{ matrix.build_type }} -- $EXTRA_ARGS | |
| tgn build:ten_manager_package linux ${{ matrix.arch }} ${{ matrix.build_type }} | |
| df -h . | |
| tree -I 'gen|obj' out | |
| - name: Package assets | |
| if: github.event_name == 'release' || (github.ref != '' && startsWith(github.ref, 'refs/tags/')) | |
| run: | | |
| cd out/linux/${{ matrix.arch }} | |
| zip -vr tman-linux-${{ matrix.build_type }}-${{ matrix.arch }}.zip ten_manager/bin/tman | |
| df -h . | |
| - name: Publish to release assets | |
| uses: softprops/action-gh-release@v2 | |
| if: github.event_name == 'release' || (github.ref != '' && startsWith(github.ref, 'refs/tags/')) | |
| with: | |
| tag_name: ${{ github.event_name == 'release' && github.event.release.tag_name || github.ref_name }} | |
| files: | | |
| out/linux/${{ matrix.arch }}/tman-linux-${{ matrix.build_type }}-${{ matrix.arch }}.zip | |
| - name: Upload to PPA (Official Release) | |
| if: matrix.arch == 'arm64' && matrix.build_type == 'release' && (github.event_name == 'release' || (github.ref != '' && startsWith(github.ref, 'refs/tags/'))) | |
| env: | |
| PPA_GPG_PRIVATE_KEY: ${{ secrets.PPA_GPG_PRIVATE_KEY }} | |
| PPA_GPG_PASSPHRASE: ${{ secrets.PPA_GPG_PASSPHRASE }} | |
| PPA_GPG_KEY_ID: ${{ secrets.PPA_GPG_KEY_ID }} | |
| PPA_LAUNCHPAD_ID: "ten-framework" | |
| PPA_PPA_NAME: "ten-framework" | |
| PPA_MAINTAINER_NAME: "TEN Framework Team" | |
| PPA_MAINTAINER_EMAIL: "ten.framework@gmail.com" | |
| PPA_DISTRIBUTIONS: "jammy noble plucky questing" | |
| run: | | |
| # Install required tools | |
| sudo apt-get update -qq | |
| sudo apt-get install -y -qq devscripts debhelper lintian dput | |
| # Import GPG private key and configure | |
| echo "$PPA_GPG_PRIVATE_KEY" | gpg --batch --import | |
| echo "$PPA_GPG_KEY_ID:6:" | gpg --import-ownertrust | |
| gpg --list-secret-keys "$PPA_GPG_KEY_ID" | |
| # Get version number from git tag (primary) or fallback to other methods | |
| # We cannot execute arm64 binary on x64 host reliably without complex QEMU setup, | |
| # so we rely on the git tag which should be present for releases. | |
| VERSION="" | |
| if [[ $GITHUB_REF == refs/tags/* ]]; then | |
| VERSION=${GITHUB_REF#refs/tags/} | |
| elif [ -f "VERSION" ]; then | |
| VERSION=$(cat VERSION | tr -d '\n') | |
| elif [ "$GITHUB_REF_TYPE" = "tag" ]; then | |
| VERSION=$GITHUB_REF_NAME | |
| fi | |
| # If still no version, and we are forcing a build/upload (e.g. manual dispatch or test), default to 0.0.0 or error out | |
| if [ -z "$VERSION" ]; then | |
| echo "Error: Could not determine version from git tag or VERSION file." | |
| # For safety in non-release contexts, we might exit or set a dummy. | |
| # But since this step only runs on release-like events (checked in 'if'), we expect a tag. | |
| echo "GITHUB_REF: $GITHUB_REF" | |
| exit 1 | |
| fi | |
| echo "Version: $VERSION" | |
| # Set environment variables | |
| export PPA_VERSION="$VERSION" | |
| export PPA_PACKAGE_NAME="tman" | |
| export PPA_SOURCE_BINARY="${GITHUB_WORKSPACE}/out/linux/${{ matrix.arch }}/ten_manager/bin/tman" | |
| export PPA_ARCH="arm64" | |
| # Run upload script | |
| bash tools/tman/upload-to-ppa.sh | |
| echo "" | |
| echo "==========================================" | |
| echo " PPA Upload Complete" | |
| echo "==========================================" | |
| echo "" | |
| echo "View build status:" | |
| echo "https://launchpad.net/~${PPA_LAUNCHPAD_ID}/+archive/ubuntu/${PPA_PPA_NAME}/+packages" | |
| - name: Set up ARM64 environment for Playwright tests | |
| if: false # Skipped: QEMU ARM64 emulation is too slow and causes timeouts | |
| run: | | |
| # We need to install Playwright and its dependencies on the host for ARM64 | |
| # Note: Playwright tests will run inside Docker container with ARM64 emulation | |
| echo "Setting up ARM64 test environment" | |
| - name: Install Playwright Browsers in Docker | |
| if: false # Skipped: QEMU ARM64 emulation is too slow and causes timeouts | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y curl | |
| curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.sh | |
| bash nodesource_setup.sh | |
| sudo apt-get install -y nodejs | |
| npm install -g npm@latest | |
| npx playwright install --with-deps || true | |
| - name: Run Playwright tests | |
| if: false # Skipped: QEMU ARM64 emulation is too slow and causes timeouts | |
| run: | | |
| # Start the tman designer backend | |
| cd ${GITHUB_WORKSPACE}/out/linux/${{ matrix.arch }}/ten_manager/bin | |
| ./tman --verbose designer & | |
| TMAN_PID=$! | |
| echo "Started tman designer with PID $TMAN_PID" | |
| # Wait for the server to be available (max 30 seconds) | |
| echo "Waiting for server to be available..." | |
| timeout=30 | |
| while [ $timeout -gt 0 ]; do | |
| if curl -s http://127.0.0.1:49483/ > /dev/null 2>&1; then | |
| echo "Server is up and running!" | |
| break | |
| fi | |
| echo "Server not ready yet, waiting... ($timeout seconds left)" | |
| sleep 1 | |
| timeout=$((timeout-1)) | |
| done | |
| if [ $timeout -eq 0 ]; then | |
| echo "Timed out waiting for server to start" | |
| echo "Checking if tman designer is running:" | |
| ps -p $TMAN_PID || true | |
| exit 1 | |
| fi | |
| # Install Node.js and run tests | |
| sudo apt-get update | |
| sudo apt-get install -y curl | |
| curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.sh | |
| bash nodesource_setup.sh | |
| sudo apt-get install -y nodejs | |
| npm install -g npm@latest | |
| # Go to frontend directory and run tests | |
| cd ${GITHUB_WORKSPACE}/core/src/ten_manager/designer_frontend | |
| npx playwright install --with-deps | |
| npx playwright test | |
| TEST_EXIT_CODE=$? | |
| # Cleanup background processes | |
| kill $TMAN_PID || true | |
| # Return the test exit code | |
| exit $TEST_EXIT_CODE | |
| - name: Upload tests relevant artifacts | |
| if: false # Skipped: QEMU ARM64 emulation is too slow and causes timeouts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: playwright-report-${{ matrix.build_type }}-linux-${{ matrix.arch }} | |
| path: core/src/ten_manager/designer_frontend/playwright-report/ | |
| retention-days: 7 |