pnpm resolves its store from the filesystem layout and never says which
branch it took: `${HOME}/.local/share/pnpm/store` when the project
shares a filesystem with the home directory, `<mountpoint>/.pnpm-store`
when it does not. On the agents `/buildkite` is an anonymous volume and
`/buildkite/builds` is the host bind mount, so every host side pnpm run
lands on `/buildkite/builds/.pnpm-store` and nothing has ever been
written to `/buildkite/.local`.
The coverage image copied that empty `/buildkite/.local` into the build
context and placed it at `/root/.local`, which is where the container's
pnpm does look, since both paths share the overlay there. The copy has
been empty since it was introduced, so its layer was permanently cached
and the image re-downloaded all 690 packages on every build.
Copying the real store in instead would cost more than it saves: it is
several gigabytes of small files that the build context would have to be
scanned through on every build. The store becomes a BuildKit cache
mount, which stays on the agent between builds and costs nothing to
carry, and `--store-dir` is passed explicitly because the guess pnpm
makes without it is what hid the original breakage.
`Dockerfile.dev` takes the same mount under the same cache id so the two
image builds warm each other, and both pin `pnpm@11` to match
`engines.pnpm` in `web/package.json`: a major bump rolls the store
version and would silently cold start the cache.
Rc.d style startup script, coming from the FreeBSD pkg package - to replace the Linux SystemD file packaged with FreeBSD build/release
Signed-off-by: n-connect <info@nconnect.hu>
* 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 docs
* feat: builds with gox and buildx
This change builds all of Authelia respective binaries in parallel within a single step and distributes as necessary to subsequent steps, we now also build and distribute for the following OS/Architecture: freebsd/amd64.
Our CI/CD pipeline now also utilises docker buildx as a default for builds and pushes.
* refactor: clean up docker helper
* Remove `authelia-scripts docker push-image` command as all pushes will be performed with buildx and manifests
* Rename the --arch flag to --container
* Add Dockerfile.dev for users that want to build an Authelia container from source without utilising suites
* Set Dockerfile.dev as default for `authelia-scripts docker build` command
* refactor: variant -> container