refactor: replace yarn with pnpm (#2424)
* Check for pnpm in authelia-scripts * Improve husky hooks to check for required apps * Use pnpm in coverage dockerfile * Use pnpm in dev workflow * Stop buildx log truncation * Ignore pnpm lockfile in yamllint * Update versions required for docker and docker-compose in contributing docspull/2426/head
parent
2f3f0818c3
commit
3d312cf3b9
|
@ -17,7 +17,7 @@ if [[ ! "${BUILDKITE_BRANCH}" =~ ^(v.*) ]] && [[ "${BUILDKITE_COMMAND_EXIT_STATU
|
||||||
fi
|
fi
|
||||||
bash <(curl -s --connect-timeout 10 --retry 10 --retry-max-time 0 https://codecov.io/bash) -Z -c -s 'coverage*.txt' -F backend "${BUILDKITE_AGENT_META_DATA_CODECOV}"
|
bash <(curl -s --connect-timeout 10 --retry 10 --retry-max-time 0 https://codecov.io/bash) -Z -c -s 'coverage*.txt' -F backend "${BUILDKITE_AGENT_META_DATA_CODECOV}"
|
||||||
if [[ "${BUILDKITE_LABEL}" =~ ":selenium:" ]]; then
|
if [[ "${BUILDKITE_LABEL}" =~ ":selenium:" ]]; then
|
||||||
cd web && yarn report
|
cd web && pnpm report
|
||||||
fi
|
fi
|
||||||
bash <(curl -s --connect-timeout 10 --retry 10 --retry-max-time 0 https://codecov.io/bash) -Z -c -f '!*.go' -f '!*.zst' -F frontend "${BUILDKITE_AGENT_META_DATA_CODECOV}"
|
bash <(curl -s --connect-timeout 10 --retry 10 --retry-max-time 0 https://codecov.io/bash) -Z -c -f '!*.go' -f '!*.zst' -F frontend "${BUILDKITE_AGENT_META_DATA_CODECOV}"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -3,7 +3,15 @@
|
||||||
set +u
|
set +u
|
||||||
|
|
||||||
if [[ "${BUILDKITE_LABEL}" == ":service_dog: Linting" ]]; then
|
if [[ "${BUILDKITE_LABEL}" == ":service_dog: Linting" ]]; then
|
||||||
cd web && yarn install && cd ../
|
cd web && pnpm install --shamefully-hoist && cd ../
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${BUILDKITE_LABEL}" == ":docker: Build Image [coverage]" ]]; then
|
||||||
|
cp -R /buildkite/.pnpm-store .
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${BUILDKITE_LABEL}" =~ ":debian: Build Package" ]]; then
|
||||||
|
buildkite-agent artifact download "authelia-linux-${ARCH}.tar.gz" .
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${BUILDKITE_LABEL}" =~ ":selenium:" ]]; then
|
if [[ "${BUILDKITE_LABEL}" =~ ":selenium:" ]]; then
|
||||||
|
@ -14,10 +22,6 @@ if [[ "${BUILDKITE_LABEL}" =~ ":selenium:" ]]; then
|
||||||
docker tag authelia/authelia authelia:dist
|
docker tag authelia/authelia authelia:dist
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${BUILDKITE_LABEL}" =~ ":debian: Build Package" ]]; then
|
|
||||||
buildkite-agent artifact download "authelia-linux-${ARCH}.tar.gz" .
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${BUILDKITE_LABEL}" == ":docker: Deploy Manifest" ]]; then
|
if [[ "${BUILDKITE_LABEL}" == ":docker: Deploy Manifest" ]]; then
|
||||||
echo "--- :go: :react: :swagger: Extract pre-built binary"
|
echo "--- :go: :react: :swagger: Extract pre-built binary"
|
||||||
buildkite-agent artifact download "authelia-linux-*-musl.tar.gz" .
|
buildkite-agent artifact download "authelia-linux-*-musl.tar.gz" .
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
. "$(dirname "$0")/required-apps"
|
||||||
|
|
||||||
cd web && yarn run commitlint --edit $1
|
cd web && ${PMGR} commitlint
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
. "$(dirname "$0")/required-apps"
|
||||||
|
|
||||||
golangci-lint run -v --fix && \
|
golangci-lint run -v --fix && \
|
||||||
cd web && yarn lint
|
cd web && ${PMGR} lint
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
PMGR=pnpm
|
||||||
|
|
||||||
|
if [[ ! -x "$(command -v golangci-lint)" ]]; then
|
||||||
|
echo "You must install golangci-lint."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -x "$(command -v pnpm)" ]]; then
|
||||||
|
PMGR=yarn
|
||||||
|
if [[ ! -x "$(command -v yarn)" ]]; then
|
||||||
|
PMGR=npm
|
||||||
|
if [[ ! -x "$(command -v npm)" ]]; then
|
||||||
|
echo "You must install a node package manager."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
|
@ -3,6 +3,7 @@ extends: default
|
||||||
|
|
||||||
ignore: |
|
ignore: |
|
||||||
internal/configuration/test_resources/config_bad_quoting.yml
|
internal/configuration/test_resources/config_bad_quoting.yml
|
||||||
|
web/pnpm-lock.yaml
|
||||||
web/node_modules/
|
web/node_modules/
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
|
|
|
@ -5,10 +5,12 @@ FROM node:16-alpine AS builder-frontend
|
||||||
|
|
||||||
WORKDIR /node/src/app
|
WORKDIR /node/src/app
|
||||||
|
|
||||||
|
COPY .pnpm-store /root/.pnpm-store
|
||||||
COPY web ./
|
COPY web ./
|
||||||
|
|
||||||
# Install the dependencies and build
|
# Install the dependencies and build
|
||||||
RUN yarn install --frozen-lockfile && GENERATE_SOURCEMAP=false INLINE_RUNTIME_CHUNK=false yarn coverage
|
RUN yarn global add pnpm && \
|
||||||
|
pnpm install --shamefully-hoist --frozen-lockfile && GENERATE_SOURCEMAP=false INLINE_RUNTIME_CHUNK=false pnpm coverage
|
||||||
|
|
||||||
# =======================================
|
# =======================================
|
||||||
# ===== Build image for the backend =====
|
# ===== Build image for the backend =====
|
||||||
|
|
|
@ -19,4 +19,5 @@ authelia.service
|
||||||
bootstrap.sh
|
bootstrap.sh
|
||||||
|
|
||||||
# Overrides
|
# Overrides
|
||||||
!.healthcheck.env
|
!.healthcheck.env
|
||||||
|
!.pnpm-store
|
|
@ -8,7 +8,7 @@ WORKDIR /node/src/app
|
||||||
COPY web ./
|
COPY web ./
|
||||||
|
|
||||||
# Install the dependencies and build
|
# Install the dependencies and build
|
||||||
RUN yarn install --frozen-lockfile && GENERATE_SOURCEMAP=false INLINE_RUNTIME_CHUNK=false yarn coverage
|
RUN yarn install --frozen-lockfile && GENERATE_SOURCEMAP=false INLINE_RUNTIME_CHUNK=false yarn build
|
||||||
|
|
||||||
# =======================================
|
# =======================================
|
||||||
# ===== Build image for the backend =====
|
# ===== Build image for the backend =====
|
||||||
|
|
|
@ -191,14 +191,16 @@ func readVersion(cmd string, args ...string) {
|
||||||
func readVersions() {
|
func readVersions() {
|
||||||
readVersion("go", "version")
|
readVersion("go", "version")
|
||||||
readVersion("node", "--version")
|
readVersion("node", "--version")
|
||||||
|
readVersion("pnpm", "--version")
|
||||||
readVersion("docker", "--version")
|
readVersion("docker", "--version")
|
||||||
readVersion("docker-compose", "--version")
|
readVersion("docker-compose", "version")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bootstrap bootstrap authelia dev environment.
|
// Bootstrap bootstrap authelia dev environment.
|
||||||
func Bootstrap(cobraCmd *cobra.Command, args []string) {
|
func Bootstrap(cobraCmd *cobra.Command, args []string) {
|
||||||
bootstrapPrintln("Checking command installation...")
|
bootstrapPrintln("Checking command installation...")
|
||||||
checkCommandExist("node")
|
checkCommandExist("node")
|
||||||
|
checkCommandExist("pnpm")
|
||||||
checkCommandExist("docker")
|
checkCommandExist("docker")
|
||||||
checkCommandExist("docker-compose")
|
checkCommandExist("docker-compose")
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ func buildAutheliaBinary(xflags []string, buildkite bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildFrontend() {
|
func buildFrontend() {
|
||||||
cmd := utils.CommandWithStdout("yarn", "install")
|
cmd := utils.CommandWithStdout("pnpm", "install", "--shamefully-hoist")
|
||||||
cmd.Dir = webDirectory
|
cmd.Dir = webDirectory
|
||||||
|
|
||||||
err := cmd.Run()
|
err := cmd.Run()
|
||||||
|
@ -74,7 +74,7 @@ func buildFrontend() {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd = utils.CommandWithStdout("yarn", "build")
|
cmd = utils.CommandWithStdout("pnpm", "build")
|
||||||
cmd.Dir = webDirectory
|
cmd.Dir = webDirectory
|
||||||
|
|
||||||
cmd.Env = append(os.Environ(), "GENERATE_SOURCEMAP=false", "INLINE_RUNTIME_CHUNK=false")
|
cmd.Env = append(os.Environ(), "GENERATE_SOURCEMAP=false", "INLINE_RUNTIME_CHUNK=false")
|
||||||
|
|
|
@ -142,7 +142,7 @@ func runSuiteSetupTeardown(command string, suite string) error {
|
||||||
if _, err := os.Stat("../../web/.nyc_output"); err == nil {
|
if _, err := os.Stat("../../web/.nyc_output"); err == nil {
|
||||||
log.Infof("Generating frontend coverage reports for suite %s...", suite)
|
log.Infof("Generating frontend coverage reports for suite %s...", suite)
|
||||||
|
|
||||||
cmd := utils.Command("yarn", "report")
|
cmd := utils.Command("pnpm", "report")
|
||||||
cmd.Dir = "web"
|
cmd.Dir = "web"
|
||||||
cmd.Env = os.Environ()
|
cmd.Env = os.Environ()
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ func RunUnitTest(cobraCmd *cobra.Command, args []string) {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := utils.Shell("yarn test")
|
cmd := utils.Shell("pnpm test")
|
||||||
cmd.Dir = webDirectory
|
cmd.Dir = webDirectory
|
||||||
|
|
||||||
cmd.Env = append(os.Environ(), "CI=true")
|
cmd.Env = append(os.Environ(), "CI=true")
|
||||||
|
|
|
@ -11,7 +11,7 @@ type Docker struct{}
|
||||||
func (d *Docker) Build(tag, dockerfile, target, ldflags string) error {
|
func (d *Docker) Build(tag, dockerfile, target, ldflags string) error {
|
||||||
return utils.CommandWithStdout(
|
return utils.CommandWithStdout(
|
||||||
"docker", "build", "-t", tag, "-f", dockerfile,
|
"docker", "build", "-t", tag, "-f", dockerfile,
|
||||||
"--build-arg", "LDFLAGS_EXTRA="+ldflags,
|
"--progress=plain", "--build-arg", "LDFLAGS_EXTRA="+ldflags,
|
||||||
target).Run()
|
target).Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,10 +34,10 @@ Here are the versions used for testing in Buildkite:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ docker --version
|
$ docker --version
|
||||||
Docker version 19.03.5, build 633a0ea838
|
Docker version 20.10.8, build 3967b7d
|
||||||
|
|
||||||
$ docker-compose --version
|
$ docker-compose --version
|
||||||
docker-compose version 1.24.1, build unknown
|
docker-compose version 1.28.0, build unknown
|
||||||
```
|
```
|
||||||
|
|
||||||
### How can I serve my application under example.com?
|
### How can I serve my application under example.com?
|
||||||
|
|
|
@ -3,7 +3,9 @@ FROM node:16-alpine
|
||||||
ARG USER_ID
|
ARG USER_ID
|
||||||
ARG GROUP_ID
|
ARG GROUP_ID
|
||||||
|
|
||||||
RUN deluser node && \
|
RUN yarn global add pnpm && \
|
||||||
|
pnpm config set --global store-dir /tmp/.pnpm-store && \
|
||||||
|
deluser node && \
|
||||||
addgroup --gid ${GROUP_ID} dev && \
|
addgroup --gid ${GROUP_ID} dev && \
|
||||||
adduser --uid ${USER_ID} -G dev -D dev
|
adduser --uid ${USER_ID} -G dev -D dev
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
- './example/compose/authelia/resources/:/resources'
|
- './example/compose/authelia/resources/:/resources'
|
||||||
- '../../web:/app'
|
- '../../web:/app'
|
||||||
|
- '~/.pnpm-store:/tmp/.pnpm-store'
|
||||||
labels:
|
labels:
|
||||||
# Traefik 1.x
|
# Traefik 1.x
|
||||||
- 'traefik.frontend.rule=Host:login.example.com'
|
- 'traefik.frontend.rule=Host:login.example.com'
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
yarn install --frozen-lockfile && yarn start
|
pnpm install --shamefully-hoist --frozen-lockfile && pnpm start
|
|
@ -29,7 +29,7 @@
|
||||||
"coverage": "COVERAGE=true craco build",
|
"coverage": "COVERAGE=true craco build",
|
||||||
"test": "craco test --coverage --no-cache",
|
"test": "craco test --coverage --no-cache",
|
||||||
"report": "nyc report -r clover -r json -r lcov -r text",
|
"report": "nyc report -r clover -r json -r lcov -r text",
|
||||||
"eject": "react-scripts eject"
|
"commitlint": "commitlint --edit $1"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"extends": "react-app"
|
"extends": "react-app"
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
12773
web/yarn.lock
12773
web/yarn.lock
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue