Skip to content

Commit

Permalink
Improve CI setup
Browse files Browse the repository at this point in the history
Changes the CI setup to:

- Extract Go and node setup to a "composite" action, allowing us to

  setup all CI jobs consistently. For example, the golangci-lint was building
  turbo with Go 1.17, while the Go unit and e2e tests were building with Go 1.18.

- Parallelize some jobs for faster feedback

  Separates Go unit and e2e tests, and JS lint and tests into separate workflows.
  The tradeoff is that each Github Action runner will need to install Go and Node and
  build turbo multiple times, but this is fairly fast, and these steps are highly cacheable.

- Improve the names of Workflows, Jobs, and Steps to be more debuggable

  Some of the naming changes are for consistency, but some make it easier to
  scan the list of PR checks and the Action summaries to see what failed and where.
  In some cases, the names of Steps are removed, as the command itself is descriptive
  enough, that we do not need to name it.
  • Loading branch information
mehulkar committed Sep 10, 2022
1 parent aa019da commit 789b26d
Show file tree
Hide file tree
Showing 11 changed files with 303 additions and 304 deletions.
60 changes: 60 additions & 0 deletions .github/actions/setup-deps/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: "Turborepo CI Setup"
description: "Sets up everything for CI"
inputs:
github-token:
description: "Github token. You can pass secrets.GITHUB_TOKEN"
required: true
setup-node:
description: "Set to false to prevent Node setup steps"
required: false
default: true
runs:
using: "composite"
steps:
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: 1.18.0
cache: true
cache-dependency-path: cli/go.sum

- name: Set Up Protoc
uses: arduino/setup-protoc@v1
with:
version: "3.x"
repo-token: ${{ inputs.github-token }}

- name: Set Up GRPC protobuf
shell: bash
run: |
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.0
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2.0
# Setup Node things
- name: Setup pnpm
uses: pnpm/action-setup@v2.2.2
if: ${{ inputs.setup-node == 'true' }}
with:
version: 7.2.1

- name: Setup Node.js
uses: actions/setup-node@v2
if: ${{ inputs.setup-node == 'true' }}
with:
node-version: 16
cache: pnpm

- name: Configure corepack
if: ${{ inputs.setup-node == 'true' }}
# Forcibly upgrade our available version of corepack.
# The bundled version in node 16 has known issues.
# Prepends the corepack bin dir so that it is always first.
shell: bash
run: |
npm install --force --global corepack@latest
npm config get prefix >> $GITHUB_PATH
corepack enable
- run: pnpm install
shell: bash
if: ${{ inputs.setup-node == 'true' }}
Original file line number Diff line number Diff line change
Expand Up @@ -17,29 +17,14 @@ jobs:
os: [ubuntu-latest, macos-latest]

steps:
- name: Check out code
uses: actions/checkout@v3
- uses: actions/checkout@v3
with:
fetch-depth: 2

- name: Set up Go
uses: actions/setup-go@v3
- uses: ./.github/actions/setup-deps
with:
go-version: 1.18.0
cache: true
cache-dependency-path: cli/go.sum
id: go

- name: Set Up Protoc
uses: arduino/setup-protoc@v1
with:
version: "3.x"
repo-token: ${{ secrets.GITHUB_TOKEN }}

- name: Set Up Go and GRPC protobuf
run: |
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.0
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2.0
github-token: "${{ secrets.GITHUB_TOKEN }}"
setup-node: false # TODO: does this need to be customized in this workflow?

- uses: pnpm/action-setup@v2.2.2
with:
Expand Down
154 changes: 0 additions & 154 deletions .github/workflows/ci-go.yml

This file was deleted.

89 changes: 0 additions & 89 deletions .github/workflows/ci-js.yml

This file was deleted.

36 changes: 36 additions & 0 deletions .github/workflows/pr-go-e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: CLI E2E tests

env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

on:
push:
branches: ["main"]
pull_request:
types: [opened, edited, synchronize]

jobs:
test:
timeout-minutes: 15
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]

steps:
- uses: actions/checkout@v3
with:
fetch-depth: 2

- uses: ./.github/actions/setup-deps
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"

- name: E2E Tests
run: pnpm -- turbo run e2e --filter=cli

0 comments on commit 789b26d

Please sign in to comment.