diff --git a/.github/workflows/new-tests.yml b/.github/workflows/new-tests.yml index 21cb17a19..2abc1099d 100644 --- a/.github/workflows/new-tests.yml +++ b/.github/workflows/new-tests.yml @@ -67,21 +67,99 @@ 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 + 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: 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) + 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: + 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: @@ -89,22 +167,17 @@ 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 + - name: Download artifacts + uses: actions/download-artifact@v4 with: - crate: clitest - version: '${{ env.CLITEST_VERSION }}' + pattern: "*-${{ runner.os }}" + path: artifacts - - name: Download artifacts + - name: Download Linux artifacts for WSL (Windows only) + if: runner.os == 'Windows' uses: actions/download-artifact@v4 with: - pattern: debug-* + pattern: "*-Linux" path: artifacts - name: List artifacts @@ -115,6 +188,38 @@ 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: | + 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' @@ -137,20 +242,13 @@ jobs: run: | echo "gel: $(gel --version)" echo "clitest: $(clitest --version)" + echo "Available gel servers:" + gel server list-versions --installed-only - - name: Pre-install the latest gel + nightly + - name: Run CLI test run: | - gel server install - gel server install --nightly - - - name: Run all CLI tests - 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: