diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..26c65c92 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,75 @@ +name: CI + +on: + pull_request: + types: [opened, synchronize, closed] + +permissions: + contents: read + +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + backend: + name: Backend build and test + if: github.event.action != 'closed' || github.event.pull_request.merged == true + runs-on: ubuntu-latest + timeout-minutes: 15 + env: + GOWORK: 'off' + + steps: + - name: Checkout + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + + - name: Set up Go + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 + with: + go-version-file: go.mod + cache-dependency-path: | + go.sum + relaykit/go.sum + + - name: Create frontend embed placeholder + run: | + mkdir -p web/dist + touch web/dist/index.html + + - name: Build root module + run: go build ./... + + - name: Build relaykit independently + working-directory: relaykit + run: go build ./... + + - name: Test root and relaykit modules + run: make test + + frontend: + name: Frontend typecheck and test + if: github.event.action != 'closed' || github.event.pull_request.merged == true + runs-on: ubuntu-latest + timeout-minutes: 10 + defaults: + run: + working-directory: web + + steps: + - name: Checkout + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + + - name: Set up Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + bun-version: '1.3.14' + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: Typecheck + run: bun run typecheck + + - name: Test + run: bun test