#!/usr/bin/env bash # Installs the tools needed to develop and build job-search: the Go tools # (with go install, into $(go env GOBIN), or $(go env GOPATH)/bin), and the # frontend's npm packages (with npm ci in web/). Run it from anywhere; run it # again after a version below changes. set -euo pipefail cd "$(dirname "$0")/.." # The Go tools. A generator is pinned, as a different version could generate # different code; the others follow their latest release. GO_TOOLS=( # Generates the OCDS types (internal/findatender/ocds) from extensions.json "git.avsdev.uk/Go/go-ocds/cmd/ocdsgen@v1.0.0" # Generates the API's OpenAPI 3.1 description; v2 is only a release # candidate so far "github.com/swaggo/swag/v2/cmd/swag@v2.0.0-rc6" # Lints the Go code with .golangci.json "github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest" # Creates migration files (internal/store/migrations) "github.com/pressly/goose/v3/cmd/goose@latest" # Adds cobra commands "github.com/spf13/cobra-cli@latest" ) # The oldest Node.js the frontend's scripts run on: they run TypeScript # directly. NODE_MAJOR=24 for tool in "${GO_TOOLS[@]}"; do echo "go install $tool" go install "$tool" done if ! command -v node >/dev/null || ! command -v npm >/dev/null; then echo "Node.js $NODE_MAJOR or later (with npm) is needed for web/: install it, then run this again" >&2 exit 1 fi node_version=$(node --version) node_major=${node_version#v} node_major=${node_major%%.*} if (( node_major < NODE_MAJOR )); then echo "Node.js $NODE_MAJOR or later is needed for web/, found $node_version" >&2 exit 1 fi echo "npm ci (web/)" (cd web && npm ci) # go generate and the build script find the Go tools on PATH. bin_dir=$(go env GOBIN) if [[ -z $bin_dir ]]; then bin_dir=$(go env GOPATH)/bin fi if [[ ":$PATH:" != *":$bin_dir:"* ]]; then echo "Add $bin_dir to PATH, where the Go tools were installed" >&2 fi echo "Installed the development tools"