> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensorlake.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Build projects with GitHub Actions

> Build Rust, Node.js, Python, and Go projects on Tensorlake runners with persistent caches.

Copy a workflow below into `.github/workflows/build.yml` after [connecting your repository](/github-actions/quickstart). Each example runs only when you select **Run workflow** in GitHub; commit it to your default branch first.

Each example restores its [persistent cache](/github-actions/caching) with `tensorlakeai/github-runners@v1` and builds normally when a cache isn’t available. Change the [runner size](/github-actions/runners) to fit your build.

<Tabs>
  <Tab title="Rust">
    Build and test a Cargo project. Dependencies, compiled dependency outputs, and the Rust toolchain persist between runs.

    ```yaml theme={null}
    name: Rust
    on:
      workflow_dispatch:
    permissions:
      contents: read
    jobs:
      build:
        runs-on: tensorlake-medium
        timeout-minutes: 60
        steps:
          - uses: actions/checkout@v6
          - uses: tensorlakeai/github-runners@v1
          - uses: dtolnay/rust-toolchain@stable
          - run: cargo build --locked
          - run: cargo test --locked
    ```
  </Tab>

  <Tab title="Node.js">
    Build a Node.js project with a committed `package-lock.json` and a `build` script in `package.json`. npm’s download cache persists, so `npm ci` installs dependencies without downloading them again. pnpm, Yarn, and Bun work the same way.

    ```yaml theme={null}
    name: Node.js
    on:
      workflow_dispatch:
    permissions:
      contents: read
    jobs:
      build:
        runs-on: tensorlake-medium
        timeout-minutes: 60
        steps:
          - uses: actions/checkout@v6
          - uses: actions/setup-node@v6
            with:
              node-version: '24'
              package-manager-cache: false
          - uses: tensorlakeai/github-runners@v1
          - run: npm ci
          - run: npm run build
    ```
  </Tab>

  <Tab title="Python">
    Install a Python project’s `requirements.txt` and run its `unittest` tests. pip reuses cached downloads while installing dependencies into the new runner.

    ```yaml theme={null}
    name: Python
    on:
      workflow_dispatch:
    permissions:
      contents: read
    jobs:
      test:
        runs-on: tensorlake-small
        timeout-minutes: 60
        steps:
          - uses: actions/checkout@v6
          - uses: actions/setup-python@v6
            with:
              python-version: '3.13'
          - uses: tensorlakeai/github-runners@v1
          - run: python -m pip install -r requirements.txt
          - run: python -m unittest discover
    ```
  </Tab>

  <Tab title="Go">
    Build and test a Go module using the version in `go.mod`. Both module downloads and compiled outputs persist between runs.

    ```yaml theme={null}
    name: Go
    on:
      workflow_dispatch:
    permissions:
      contents: read
    jobs:
      build:
        runs-on: tensorlake-medium
        timeout-minutes: 60
        steps:
          - uses: actions/checkout@v6
          - uses: actions/setup-go@v6
            with:
              go-version-file: go.mod
              cache: false
          - uses: tensorlakeai/github-runners@v1
          - run: go build ./...
          - run: go test ./...
    ```
  </Tab>
</Tabs>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.