From b7953f46378717cc68ff903fa5430be818bd6891 Mon Sep 17 00:00:00 2001 From: Fantix King Date: Wed, 13 Aug 2025 13:11:05 -0400 Subject: [PATCH 1/3] Run CLI tests in parallel --- .github/workflows/new-tests.yml | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/.github/workflows/new-tests.yml b/.github/workflows/new-tests.yml index 21cb17a19..fa820bba9 100644 --- a/.github/workflows/new-tests.yml +++ b/.github/workflows/new-tests.yml @@ -74,14 +74,33 @@ jobs: path: target/debug/gel* if-no-files-found: error + generate-matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - uses: actions/checkout@v4 + - name: Generate test matrix + id: set-matrix + run: | + test_files=$(find tests/scripts -name "*.cli" -type f | sed 's|tests/scripts/||' | sort) + + matrix_json=$(echo "$test_files" | jq -R -s -c 'split("\n") | map(select(length > 0))') + + echo "matrix=$matrix_json" >> $GITHUB_OUTPUT + echo "Generated matrix with $(echo "$test_files" | wc -l) test files:" + echo "$matrix_json" | jq '.' + tests: - needs: build + needs: [build, generate-matrix] runs-on: ${{ matrix.os }} timeout-minutes: 35 strategy: matrix: os: [ubuntu-latest, macos-latest, large-win-x64] + test_file: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} fail-fast: false + max-parallel: 16 env: CI: false steps: @@ -143,14 +162,10 @@ jobs: gel server install gel server install --nightly - - name: Run all CLI tests + - name: Run CLI test run: | - find tests/scripts -name "*.cli" -type f | while read -r test_file; do - test_name=$(basename "$test_file" .cli) - echo "::group::Running test: $test_name" - TERM=xterm-256color clitest --timeout 120 "$test_file" - echo "::endgroup::" - done + test_name=$(basename "${{ matrix.test_file }}" .cli) + TERM=xterm-256color clitest --timeout 120 "tests/scripts/${{ matrix.test_file }}" shell: bash dsn-tests: From d23838b8fe35600d9142f7898d00be26548c5a7a Mon Sep 17 00:00:00 2001 From: Fantix King Date: Wed, 13 Aug 2025 15:43:27 -0400 Subject: [PATCH 2/3] Download Gel servers once Credit: Sonnet 4 --- .github/workflows/new-tests.yml | 79 ++++++++++++++++++++++++++++++--- 1 file changed, 73 insertions(+), 6 deletions(-) diff --git a/.github/workflows/new-tests.yml b/.github/workflows/new-tests.yml index fa820bba9..5ee637ea0 100644 --- a/.github/workflows/new-tests.yml +++ b/.github/workflows/new-tests.yml @@ -67,6 +67,38 @@ jobs: RUSTFLAGS="-C target-feature=+crt-static" cargo build --target=x86_64-unknown-linux-gnu cp target/x86_64-unknown-linux-gnu/debug/gel target/debug/gel + - name: Pre-install the latest gel + nightly + run: | + target/debug/gel server install + target/debug/gel server install --nightly + + - name: Package gel servers + run: | + raw_output=$(target/debug/gel server list-versions --installed-only --json) + installed_json=$(echo "$raw_output" | sed -n '/^\[/,$p') + + if [ -z "$installed_json" ] || [ "$installed_json" = "[]" ]; then + echo "Warning: No valid JSON array found in gel server list output" + echo "Raw output was:" + echo "$raw_output" + exit 1 + fi + + echo "Installed servers JSON:" + echo "$installed_json" | jq '.' + + mkdir -p gel-servers + echo "$installed_json" | jq -r '.[].["debug-info"].install.path' | while read -r server_path; do + if [ -d "$server_path" ]; then + echo "Packaging server from: $server_path" + server_name=$(basename "$server_path") + tar -czf "gel-servers/${server_name}.tar.gz" -C "$(dirname "$server_path")" "$server_name" + fi + done + + echo "$installed_json" > gel-servers/installed-versions.json + ls -la gel-servers/ + - name: Upload artifacts (gel) uses: actions/upload-artifact@v4 with: @@ -74,6 +106,13 @@ jobs: path: target/debug/gel* if-no-files-found: error + - name: Upload artifacts (gel servers) + uses: actions/upload-artifact@v4 + with: + name: gel-servers-${{ runner.os }} + path: gel-servers/ + if-no-files-found: error + generate-matrix: runs-on: ubuntu-latest outputs: @@ -123,7 +162,7 @@ jobs: - name: Download artifacts uses: actions/download-artifact@v4 with: - pattern: debug-* + pattern: "*-${{ runner.os }}" path: artifacts - name: List artifacts @@ -135,6 +174,37 @@ jobs: run: | cp artifacts/debug-gel-cli-${{ runner.os }}/gel* ${{ env.CARGO_HOME }}/bin/ + - name: Restore gel servers + run: | + if [ -d "artifacts/gel-servers-${{ runner.os }}" ]; then + cd artifacts/gel-servers-${{ runner.os }} + + if [ -f "installed-versions.json" ]; then + echo "Restoring gel servers from JSON paths:" + cat installed-versions.json | jq -r '.[].version' + + cat installed-versions.json | jq -r '.[].["debug-info"].install.path' | while read -r server_path; do + if [ -n "$server_path" ]; then + server_name=$(basename "$server_path") + tar_file="${server_name}.tar.gz" + + if [ -f "$tar_file" ]; then + echo "Restoring $server_name to original path: $server_path" + mkdir -p "$(dirname "$server_path")" + tar -xzf "$tar_file" -C "$(dirname "$server_path")" + else + echo "Warning: tar file $tar_file not found" + fi + fi + done + else + echo "Warning: installed-versions.json not found" + fi + else + echo "Warning: gel-servers artifacts not found for ${{ runner.os }}" + fi + shell: bash + - name: Setup WSL if: runner.os == 'Windows' shell: bash @@ -156,11 +226,8 @@ jobs: run: | echo "gel: $(gel --version)" echo "clitest: $(clitest --version)" - - - name: Pre-install the latest gel + nightly - run: | - gel server install - gel server install --nightly + echo "Available gel servers:" + gel server list-versions --installed-only - name: Run CLI test run: | From 9a0b0f54f05bbd6b97a18ba6fccb242cc0edf29a Mon Sep 17 00:00:00 2001 From: Fantix King Date: Wed, 13 Aug 2025 16:01:05 -0400 Subject: [PATCH 3/3] Install clitest in build --- .github/workflows/new-tests.yml | 42 +++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/.github/workflows/new-tests.yml b/.github/workflows/new-tests.yml index 5ee637ea0..2abc1099d 100644 --- a/.github/workflows/new-tests.yml +++ b/.github/workflows/new-tests.yml @@ -67,6 +67,24 @@ jobs: RUSTFLAGS="-C target-feature=+crt-static" cargo build --target=x86_64-unknown-linux-gnu cp target/x86_64-unknown-linux-gnu/debug/gel target/debug/gel + - name: Install clitest from crates.io + uses: baptiste0928/cargo-install@91c5da15570085bcde6f4d7aed98cb82d6769fd3 + with: + crate: clitest + version: '${{ env.CLITEST_VERSION }}' + + - name: Setup WSL + if: runner.os == 'Windows' + shell: bash + run: | + echo "--------------------------------" + echo "wsl --version" + wsl --version + echo "--------------------------------" + echo + _GEL_WSL_LINUX_BINARY=target/debug/gel target/debug/gel cli init-wsl + echo "_GEL_WSL_SKIP_UPDATE=true" >> $GITHUB_ENV + - name: Pre-install the latest gel + nightly run: | target/debug/gel server install @@ -103,7 +121,9 @@ jobs: uses: actions/upload-artifact@v4 with: name: debug-gel-cli-${{ runner.os }} - path: target/debug/gel* + path: | + target/debug/gel* + ${{ env.CARGO_HOME }}/bin/clitest* if-no-files-found: error - name: Upload artifacts (gel servers) @@ -147,24 +167,19 @@ jobs: with: submodules: true - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@6691ebadcb18182cc1391d07c9f295f657c593cd - with: - components: '${{ env.RUST_COMPONENTS }}' - toolchain: '${{ env.RUST_VERSION }}' - - - name: Install clitest from crates.io - uses: baptiste0928/cargo-install@91c5da15570085bcde6f4d7aed98cb82d6769fd3 - with: - crate: clitest - version: '${{ env.CLITEST_VERSION }}' - - name: Download artifacts uses: actions/download-artifact@v4 with: pattern: "*-${{ runner.os }}" path: artifacts + - name: Download Linux artifacts for WSL (Windows only) + if: runner.os == 'Windows' + uses: actions/download-artifact@v4 + with: + pattern: "*-Linux" + path: artifacts + - name: List artifacts if: runner.os != 'Windows' run: | @@ -173,6 +188,7 @@ jobs: - name: Copy artifacts to PATH run: | cp artifacts/debug-gel-cli-${{ runner.os }}/gel* ${{ env.CARGO_HOME }}/bin/ + cp artifacts/debug-gel-cli-${{ runner.os }}/clitest* ${{ env.CARGO_HOME }}/bin/ - name: Restore gel servers run: |