Prepare Hunk for npm packaging and install verification #28
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: | |
| - master | |
| pull_request: | |
| concurrency: | |
| group: ci-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| validate: | |
| name: Typecheck + tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: 1.3.10 | |
| - name: Install dependencies | |
| run: bun install --frozen-lockfile | |
| - name: Typecheck | |
| run: bun run typecheck | |
| - name: Test suite | |
| run: bun test | |
| tty-smoke: | |
| name: Terminal smoke tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: 1.3.10 | |
| - name: Install dependencies | |
| run: bun install --frozen-lockfile | |
| - name: Verify terminal tools | |
| run: | | |
| command -v script | |
| command -v timeout | |
| - name: TTY smoke tests | |
| run: bun run test:tty-smoke | |
| pack-npm: | |
| name: Verify npm package | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: 1.3.10 | |
| - name: Set up Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - name: Install dependencies | |
| run: bun install --frozen-lockfile | |
| - name: Build npm runtime bundle | |
| run: bun run build:npm | |
| - name: Verify npm pack output | |
| run: bun run check:pack | |
| - name: Simulate global npm install | |
| run: | | |
| pkg_dir="$(mktemp -d)" | |
| install_dir="$(mktemp -d)" | |
| npm pack --pack-destination "$pkg_dir" >/dev/null | |
| pkg="$(find "$pkg_dir" -maxdepth 1 -name 'hunkdiff-*.tgz' | head -n1)" | |
| npm install -g --prefix "$install_dir" "$pkg" | |
| PATH="$install_dir/bin:$PATH" hunk --help | grep 'Usage: hunk' | |
| build-bin: | |
| name: Build compiled binary | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: 1.3.10 | |
| - name: Install dependencies | |
| run: bun install --frozen-lockfile | |
| - name: Build binary | |
| run: bun run build:bin | |
| - name: Upload binary artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: hunk-linux-binary | |
| path: dist/hunk | |
| if-no-files-found: error |