0.2.0 - actions, build #4
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] | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| # TypeScript checks | |
| typescript: | |
| name: TypeScript | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: | | |
| # Remove local-only devDependencies that aren't available in CI | |
| node -e " | |
| const pkg = require('./package.json'); | |
| delete pkg.devDependencies['@vsforge/config']; | |
| delete pkg.devDependencies['@vsforge/shim']; | |
| delete pkg.devDependencies['@vsforge/test']; | |
| require('fs').writeFileSync('./package.json', JSON.stringify(pkg, null, 4)); | |
| " | |
| npm install | |
| - name: Lint | |
| run: npm run lint | |
| - name: Type check | |
| run: npm run compile | |
| # Tests require @vsforge/* local packages which aren't available in CI | |
| # Run tests locally with: npm test | |
| # Rust checks | |
| rust: | |
| name: Rust (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy, rustfmt | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| target/ | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Check formatting | |
| run: cargo fmt --all -- --check | |
| - name: Clippy | |
| run: cargo clippy --all-targets --all-features -- -D warnings | |
| - name: Build | |
| run: cargo build --release | |
| - name: Test | |
| run: cargo test --all-features | |
| # Build binaries for release | |
| build-binaries: | |
| name: Build Binary (${{ matrix.target }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| binary: codegraph-lsp | |
| artifact: codegraph-lsp-linux-x64 | |
| - os: macos-latest | |
| target: x86_64-apple-darwin | |
| binary: codegraph-lsp | |
| artifact: codegraph-lsp-darwin-x64 | |
| - os: macos-latest | |
| target: aarch64-apple-darwin | |
| binary: codegraph-lsp | |
| artifact: codegraph-lsp-darwin-arm64 | |
| - os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| binary: codegraph-lsp.exe | |
| artifact: codegraph-lsp-win32-x64.exe | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| target/ | |
| key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Build | |
| run: cargo build --release --target ${{ matrix.target }} | |
| - name: Rename binary | |
| shell: bash | |
| run: | | |
| mkdir -p artifacts | |
| cp target/${{ matrix.target }}/release/${{ matrix.binary }} artifacts/${{ matrix.artifact }} | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ matrix.artifact }} | |
| path: artifacts/${{ matrix.artifact }} | |
| # Package extension (only on main branch, after all checks pass) | |
| package: | |
| name: Package Extension | |
| needs: [typescript, rust, build-binaries] | |
| runs-on: ubuntu-latest | |
| if: github.ref == 'refs/heads/main' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: | | |
| # Remove local-only devDependencies that aren't available in CI | |
| node -e " | |
| const pkg = require('./package.json'); | |
| delete pkg.devDependencies['@vsforge/config']; | |
| delete pkg.devDependencies['@vsforge/shim']; | |
| delete pkg.devDependencies['@vsforge/test']; | |
| require('fs').writeFileSync('./package.json', JSON.stringify(pkg, null, 4)); | |
| " | |
| npm install | |
| - name: Download all binaries | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: bin/ | |
| - name: Move binaries to correct location | |
| run: | | |
| mkdir -p bin | |
| mv bin/codegraph-lsp-linux-x64/codegraph-lsp-linux-x64 bin/ | |
| mv bin/codegraph-lsp-darwin-x64/codegraph-lsp-darwin-x64 bin/ | |
| mv bin/codegraph-lsp-darwin-arm64/codegraph-lsp-darwin-arm64 bin/ | |
| mv bin/codegraph-lsp-win32-x64.exe/codegraph-lsp-win32-x64.exe bin/ | |
| chmod +x bin/codegraph-lsp-* | |
| ls -la bin/ | |
| - name: Bundle with esbuild | |
| run: npm run esbuild-base -- --production | |
| - name: Package extension | |
| run: npx vsce package --no-dependencies | |
| - name: Upload VSIX | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: codegraph-vsix | |
| path: "*.vsix" |