fix(npm): close download streams in postinstall (GH#3205) #8537
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: CI | |
| on: | |
| push: | |
| branches: [ main ] | |
| pull_request: | |
| branches: [ main ] | |
| merge_group: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| # Fast check to ensure all version files are in sync | |
| check-version-consistency: | |
| name: Check version consistency | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Check all versions match | |
| run: ./scripts/check-versions.sh | |
| # Check documentation references match actual CLI flags | |
| check-doc-flags: | |
| name: Check doc flags freshness | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version-file: 'go.mod' | |
| - name: Install ICU4C | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libicu-dev | |
| - name: Build bd | |
| run: go build -o bd ./cmd/bd/ | |
| - name: Validate docs against CLI | |
| run: ./scripts/check-doc-flags.sh ./bd | |
| # Fast check to catch accidental .beads/issues.jsonl changes from contributors | |
| check-no-beads-changes: | |
| name: Check for .beads changes | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'pull_request' | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Check for .beads/issues.jsonl changes | |
| run: | | |
| if git diff --name-only origin/${{ github.base_ref }}...HEAD | grep -q "^\.beads/issues\.jsonl$"; then | |
| echo "This PR includes changes to .beads/issues.jsonl" | |
| echo "" | |
| echo "This file is the project's issue database and should not be modified in PRs." | |
| echo "" | |
| echo "To fix, run:" | |
| echo " git checkout origin/main -- .beads/issues.jsonl" | |
| echo " git commit --amend" | |
| echo " git push --force" | |
| echo "" | |
| exit 1 | |
| fi | |
| echo "No .beads/issues.jsonl changes detected" | |
| # Cross-platform test matrix (Linux/macOS only - Windows uses smoke tests) | |
| test: | |
| name: Test (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest] | |
| include: | |
| # Linux: full test suite with coverage | |
| - os: ubuntu-latest | |
| coverage: true | |
| test-flags: '-v -race -short -coverprofile=coverage.out' | |
| # macOS: full test suite, no coverage (faster) | |
| - os: macos-latest | |
| coverage: false | |
| test-flags: '-v -race -short' | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version-file: 'go.mod' | |
| - name: Install ICU4C (Linux) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libicu-dev | |
| - name: Install ICU4C (macOS) | |
| if: matrix.os == 'macos-latest' | |
| run: | | |
| brew install icu4c | |
| dir="$(brew --prefix icu4c)" | |
| echo "CGO_CPPFLAGS=-I$dir/include" >> "$GITHUB_ENV" | |
| echo "CGO_LDFLAGS=-L$dir/lib -Wl,-rpath,$dir/lib" >> "$GITHUB_ENV" | |
| echo "PKG_CONFIG_PATH=$dir/lib/pkgconfig" >> "$GITHUB_ENV" | |
| - name: Configure Git | |
| run: | | |
| git config --global user.name "CI Bot" | |
| git config --global user.email "ci@beads.test" | |
| - name: Install gotestsum | |
| if: matrix.coverage | |
| run: go install gotest.tools/gotestsum@latest | |
| - name: Build | |
| run: go build -v ./cmd/bd | |
| - name: Test (with coverage + JUnit XML) | |
| if: matrix.coverage | |
| run: | | |
| gotestsum \ | |
| --junitfile junit.xml \ | |
| --format testdox \ | |
| -- -race -short -coverprofile=coverage.out -skip '^TestEmbedded' ./... | |
| - name: Test | |
| if: ${{ !matrix.coverage }} | |
| run: go test ${{ matrix.test-flags }} -skip '^TestEmbedded' ./... | |
| - name: Upload coverage to Codecov | |
| if: matrix.coverage && !cancelled() | |
| uses: codecov/codecov-action@v6 | |
| with: | |
| files: coverage.out | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| fail_ci_if_error: false | |
| - name: Upload test results to Codecov | |
| if: matrix.coverage && !cancelled() | |
| uses: codecov/codecov-action@v6 | |
| with: | |
| files: junit.xml | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| report_type: test_results | |
| fail_ci_if_error: false | |
| # Embedded Dolt tests - test the in-process Dolt engine (no server required) | |
| # | |
| # Split into: build → storage tests + parallel cmd test shards. | |
| # Adding new *_embedded_test.go files auto-distributes via hash sharding. | |
| build-embedded: | |
| name: Build (Embedded Dolt) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version-file: 'go.mod' | |
| - name: Install ICU4C | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libicu-dev | |
| - name: Build embedded bd binary | |
| run: go build -race -o /tmp/bd-embedded-test ./cmd/bd/ | |
| - name: Build embedded storage test binary | |
| run: go test -race -c -o /tmp/embeddeddolt-test ./internal/storage/embeddeddolt/ | |
| - name: Build embedded cmd test binary | |
| run: go test -race -c -o /tmp/bd-cmd-test ./cmd/bd/ | |
| - name: Upload binaries | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: embedded-test-binaries | |
| path: | | |
| /tmp/bd-embedded-test | |
| /tmp/embeddeddolt-test | |
| /tmp/bd-cmd-test | |
| retention-days: 1 | |
| test-embedded-storage: | |
| name: Test (Embedded Dolt Storage) | |
| needs: build-embedded | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install ICU4C | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libicu-dev | |
| - name: Download binaries | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: embedded-test-binaries | |
| path: /tmp/ | |
| - name: Fix permissions | |
| run: chmod +x /tmp/embeddeddolt-test | |
| - name: Configure Git | |
| run: | | |
| git config --global user.name "CI Bot" | |
| git config --global user.email "ci@beads.test" | |
| - name: Test | |
| env: | |
| BEADS_TEST_EMBEDDED_DOLT: "1" | |
| BEADS_TEST_EMBEDDED_TEST_BINARY: /tmp/embeddeddolt-test | |
| run: /tmp/embeddeddolt-test -test.v -test.count=1 -test.timeout=10m | |
| test-embedded-cmd: | |
| name: Test (Embedded Dolt Cmd ${{ matrix.shard }}/${{ strategy.job-total }}) | |
| needs: build-embedded | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install ICU4C | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libicu-dev | |
| - name: Download binaries | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: embedded-test-binaries | |
| path: /tmp/ | |
| - name: Fix permissions | |
| run: chmod +x /tmp/bd-embedded-test /tmp/embeddeddolt-test /tmp/bd-cmd-test | |
| - name: Configure Git | |
| run: | | |
| git config --global user.name "CI Bot" | |
| git config --global user.email "ci@beads.test" | |
| - name: Test | |
| env: | |
| BEADS_TEST_EMBEDDED_DOLT: "1" | |
| BEADS_TEST_BD_BINARY: /tmp/bd-embedded-test | |
| run: bash .github/scripts/embedded-test-shard.sh ${{ matrix.shard }} 20 | |
| # Windows smoke tests only - full test suite times out (see bd-bmev) | |
| # Linux/macOS run comprehensive tests; Windows just verifies binary works | |
| # | |
| # Windows uses -tags gms_pure_go to avoid the ICU regex dependency. | |
| # go-icu-regex's regex_windows.go also uses Go stdlib regexp (build tag: windows). | |
| # CGO is still required for gozstd (bundled C source) and the embedded dolt engine. | |
| test-windows: | |
| name: Test (Windows - smoke) | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version-file: 'go.mod' | |
| - name: Configure Git | |
| run: | | |
| git config --global user.name "CI Bot" | |
| git config --global user.email "ci@beads.test" | |
| - name: Build (pure Go regex) | |
| run: go build -v -tags gms_pure_go -o bd.exe ./cmd/bd | |
| - name: Smoke test - version | |
| run: ./bd.exe version | |
| - name: Smoke test - help | |
| run: ./bd.exe help | |
| fmt-check: | |
| name: Check formatting | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version-file: 'go.mod' | |
| - name: Check gofmt | |
| run: make fmt-check | |
| lint: | |
| name: Lint | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version-file: 'go.mod' | |
| - name: Install ICU4C (Linux) | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libicu-dev | |
| - name: golangci-lint | |
| uses: golangci/golangci-lint-action@v9 | |
| with: | |
| version: latest | |
| args: --timeout=5m | |
| test-nix: | |
| name: Test Nix Flake | |
| runs-on: ubuntu-latest | |
| # Allow failure until nixpkgs updates Go to 1.25.6+ | |
| # (dolthub/driver requires go 1.25.6, nixpkgs-unstable has go 1.25.1) | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: cachix/install-nix-action@v31 | |
| with: | |
| nix_path: nixpkgs=channel:nixos-unstable | |
| - name: Run bd help via Nix | |
| id: nix_help | |
| continue-on-error: true | |
| run: | | |
| export BEADS_DB="$PWD/.ci-beads/beads.db" | |
| mkdir -p "$(dirname "$BEADS_DB")" | |
| rm -rf .beads | |
| nix run .#default -- --db "$BEADS_DB" init --quiet --prefix ci | |
| nix run .#default -- --db "$BEADS_DB" > help.txt | |
| - name: Verify help text | |
| if: steps.nix_help.outcome == 'success' | |
| run: | | |
| FIRST_LINE=$(head -n 1 help.txt) | |
| EXPECTED="Issues chained together like beads. A lightweight issue tracker with first-class dependency support." | |
| if [ "$FIRST_LINE" != "$EXPECTED" ]; then | |
| echo "First line of help.txt doesn't match expected output" | |
| echo "Expected: $EXPECTED" | |
| echo "Got: $FIRST_LINE" | |
| exit 1 | |
| fi | |
| echo "Help text first line is correct" | |
| - name: Note soft-failed Nix run | |
| if: steps.nix_help.outcome != 'success' | |
| run: echo "Nix run is non-blocking until nixpkgs toolchain catches up; skipping help-text assertion." |