diff --git a/.github/workflows/coder.yaml b/.github/workflows/coder.yaml index 08a63aad98..f33e44e922 100644 --- a/.github/workflows/coder.yaml +++ b/.github/workflows/coder.yaml @@ -60,8 +60,7 @@ jobs: key: js-${{ runner.os }}-test-${{ hashFiles('**/yarn.lock') }} - name: Install node_modules - run: yarn install - working-directory: site + run: ./scripts/yarn_install.sh - name: "yarn lint" run: yarn lint @@ -108,8 +107,7 @@ jobs: key: js-${{ runner.os }}-test-${{ hashFiles('**/yarn.lock') }} - name: Install node_modules - run: yarn install - working-directory: site + run: ./scripts/yarn_install.sh - name: "make fmt" run: "make --output-sync -j fmt" @@ -214,8 +212,8 @@ jobs: with: node-version: "14" - - run: yarn install - working-directory: site + - name: Install node_modules + run: ./scripts/yarn_install.sh - uses: actions/setup-go@v2 with: @@ -252,13 +250,15 @@ jobs: with: node-version: "14" - - run: yarn install + - name: Install node_modules + run: ./scripts/yarn_install.sh + + - name: Build frontend + run: yarn build working-directory: site - - run: yarn build - working-directory: site - - - run: yarn storybook:build + - name: Build Storybook + run: yarn storybook:build working-directory: site - run: yarn test:coverage diff --git a/develop.sh b/develop.sh index 3ecffdff62..f7df8100b0 100755 --- a/develop.sh +++ b/develop.sh @@ -22,7 +22,7 @@ function create_initial_user() { } # Run yarn install, to make sure node_modules are ready to go -yarn --cwd=./site install +"$PROJECT_ROOT/scripts/yarn_install.sh" # Do initial build - a dev build for coderd. # It's OK that we don't build the front-end before - because the front-end diff --git a/scripts/yarn_install.sh b/scripts/yarn_install.sh new file mode 100755 index 0000000000..6cccda2dd5 --- /dev/null +++ b/scripts/yarn_install.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# +# Run "yarn install" with flags appropriate to the environment +# (local development vs build system) +# +# Usage: yarn_install.sh [optional extra flags] + +set -euo pipefail + +PROJECT_ROOT=$(git rev-parse --show-toplevel) +cd "$PROJECT_ROOT/site" + +yarn_flags=( + # Do not execute install scripts + # TODO: check if build works properly with this enabled + # --ignore-scripts + + # Check if existing node_modules are valid + # TODO: determine if this is necessary + # --check-files + + # Do not install optional dependencies + --ignore-optional +) + +if [ -n "${CI:-}" ]; then + yarn_flags+=( + # Install dependencies from lockfile, ensuring builds are fully + # reproducible + --frozen-lockfile + # Suppress progress information + --silent + # Disable interactive prompts for build + --non-interactive + ) +fi + +# Append whatever is specified on the command line +yarn_flags+=("$@") + +echo "+ yarn install ${yarn_flags[*]}" +yarn install "${yarn_flags[@]}"