Compare commits
1
Commits
next
...
36e6329602
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36e6329602 |
@@ -21,6 +21,13 @@ fmt-check, and commit.
|
|||||||
|
|
||||||
# Completed Steps
|
# Completed Steps
|
||||||
|
|
||||||
|
- 2026-11-04: Rewrote `prompts/REPO_POLICIES.md` sentence by sentence
|
||||||
|
(https://git.eeqj.de/sneak/prompts/issues/136), on sneak's yes at
|
||||||
|
https://git.eeqj.de/sneak/prompts/issues/136#issuecomment-165193. Every rule
|
||||||
|
keeps its meaning and its place, and `must` and `should` stay as they were.
|
||||||
|
Long sentences are split, comma-chained lists are now bulleted lists, and
|
||||||
|
every reason stays. Code blocks, digests, URLs, file names, commands and
|
||||||
|
quoted strings are unchanged.
|
||||||
- 2026-11-03: The canonical golangci-lint is now v2.15.0, still built with
|
- 2026-11-03: The canonical golangci-lint is now v2.15.0, still built with
|
||||||
go1.27.0, so the `go` directive rule is unchanged (issue 142). Repositories
|
go1.27.0, so the `go` directive rule is unchanged (issue 142). Repositories
|
||||||
pick this up on their next re-vendor. Each item in the canonical
|
pick this up on their next re-vendor. Each item in the canonical
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: Existing Repo Checklist
|
title: Existing Repo Checklist
|
||||||
last_modified: 2026-11-03
|
last_modified: 2026-11-04
|
||||||
---
|
---
|
||||||
|
|
||||||
Use this checklist when beginning work in a repo that may not yet conform to our
|
Use this checklist when beginning work in a repo that may not yet conform to our
|
||||||
@@ -105,37 +105,43 @@ with your task.
|
|||||||
`services/api/.claude/`: add anchored entries for those directories.
|
`services/api/.claude/`: add anchored entries for those directories.
|
||||||
- [ ] If the repo embeds a version in a binary: `.dockerignore` lets `.git` into
|
- [ ] If the repo embeds a version in a binary: `.dockerignore` lets `.git` into
|
||||||
the build context. It keeps out every git `config` at any depth
|
the build context. It keeps out every git `config` at any depth
|
||||||
(`**/.git/config`, `**/.git/modules/**/config`): the repository's own,
|
(`**/.git/config`, `**/.git/modules/**/config`):
|
||||||
each submodule's under `.git/modules/`, and that of a submodule keeping
|
- the repository's own
|
||||||
its own `.git` directory. `git describe` does not need them, and each can
|
- each submodule's under `.git/modules/`
|
||||||
hold a credential: a password in a remote URL, or the token the CI
|
- that of a submodule keeping its own `.git` directory
|
||||||
checkout step stores there. A submodule whose name has a `config` segment
|
|
||||||
(`config`, `deploy/config`, `config/lib`) loses its whole git directory to
|
`git describe` does not need them, and each can hold a credential: a
|
||||||
`**/.git/modules/**/config`, and Go's version stamping then fails the
|
password in a remote URL, or the token the CI checkout step stores there. A
|
||||||
build: give it a name without that segment (`git submodule add --name`).
|
submodule name may have a `config` segment, as in `config`, `deploy/config`
|
||||||
The stage that compiles has `git` (the Debian Go image has it; an alpine
|
or `config/lib`. Such a submodule loses its whole git directory to
|
||||||
one needs `apk add --no-cache git`) and takes the version from the
|
`**/.git/modules/**/config`, and Go's version stamping then fails the build.
|
||||||
`VERSION` build argument when one is given, otherwise from
|
Give it a name without that segment (`git submodule add --name`). The stage
|
||||||
`git describe --tags --always`. That gives the tag on a tagged commit; on
|
that compiles has `git`: the Debian Go image has it, and an alpine one needs
|
||||||
a later commit, the tag, the number of commits since it and the short
|
`apk add --no-cache git`. That stage takes the version from the `VERSION`
|
||||||
commit (`v1.2.3-4-gabc1234`); and the short commit when no tag is
|
build argument when one is given, otherwise from
|
||||||
reachable. The stage that compiles also marks its working directory safe
|
`git describe --tags --always`. That gives:
|
||||||
for git (`git config --system --add safe.directory /src`): a context sent
|
- the tag, on a tagged commit
|
||||||
as a tar stream keeps the sender's file owners, and git refuses a checkout
|
- the tag, the number of commits since it and the short commit
|
||||||
owned by another user, so the version would come out empty. `ARG VERSION`
|
(`v1.2.3-4-gabc1234`), on a later commit
|
||||||
has no default, and the build fails if the context carries `.git` and the
|
- the short commit, when no tag is reachable
|
||||||
version still comes out empty, `dev` or `unknown`. A plain
|
|
||||||
`docker build .` with no build arguments must succeed; a Dockerfile that
|
The stage that compiles also marks its working directory safe for git
|
||||||
refuses an empty build argument drops that refusal and keeps the argument.
|
(`git config --system --add safe.directory /src`). A context sent as a tar
|
||||||
A checkout whose `.git` is a file (a linked worktree, or a repository
|
stream keeps the sender's file owners, and git refuses a checkout owned by
|
||||||
checked out as a submodule) is the exception: that file points to a git
|
another user, so the version would come out empty. `ARG VERSION` has no
|
||||||
directory outside the build context, so the build cannot read the version
|
default. The build fails if the context carries `.git` and the version still
|
||||||
and a plain `docker build .` fails; pass the version with
|
comes out empty, `dev` or `unknown`. A plain `docker build .` with no build
|
||||||
`--build-arg VERSION=...`. `script/docker` and `script/cibuild` already
|
arguments must succeed; a Dockerfile that refuses an empty build argument
|
||||||
pass the version they compute on the host; it takes precedence. The
|
drops that refusal and keeps the argument. A checkout whose `.git` is a file
|
||||||
canonical `.gitea/workflows/check.yml` sets `fetch-depth: 0` on its
|
is the exception: a linked worktree, or a repository checked out as a
|
||||||
checkout step, which otherwise clones shallow and fetches no tags, so a CI
|
submodule. That file points to a git directory outside the build context, so
|
||||||
build finds the tag too.
|
the build cannot read the version and a plain `docker build .` fails. Pass
|
||||||
|
the version with `--build-arg VERSION=...`. `script/docker` and
|
||||||
|
`script/cibuild` already pass the version they compute on the host; it takes
|
||||||
|
precedence. The canonical `.gitea/workflows/check.yml` sets `fetch-depth: 0`
|
||||||
|
on its checkout step, which otherwise clones shallow and fetches no tags, so
|
||||||
|
a CI build finds the tag too.
|
||||||
|
|
||||||
- [ ] Gitea Actions workflow in `.gitea/workflows/` runs `script/cibuild` on
|
- [ ] Gitea Actions workflow in `.gitea/workflows/` runs `script/cibuild` on
|
||||||
push, checks out with `persist-credentials: false` and with
|
push, checks out with `persist-credentials: false` and with
|
||||||
`fetch-depth: 0` (which fetches the tags `git describe` needs), carries
|
`fetch-depth: 0` (which fetches the tags `git describe` needs), carries
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: New Repo Checklist
|
title: New Repo Checklist
|
||||||
last_modified: 2026-11-03
|
last_modified: 2026-11-04
|
||||||
---
|
---
|
||||||
|
|
||||||
Use this checklist when creating a new repository from scratch. Follow the steps
|
Use this checklist when creating a new repository from scratch. Follow the steps
|
||||||
@@ -75,34 +75,42 @@ Template files can be fetched from:
|
|||||||
anchored entry.
|
anchored entry.
|
||||||
- If the image embeds a version in a binary: `.dockerignore` lets `.git`
|
- If the image embeds a version in a binary: `.dockerignore` lets `.git`
|
||||||
into the build context. It keeps out every git `config` at any depth
|
into the build context. It keeps out every git `config` at any depth
|
||||||
(`**/.git/config`, `**/.git/modules/**/config`): the repository's own,
|
(`**/.git/config`, `**/.git/modules/**/config`):
|
||||||
each submodule's under `.git/modules/`, and that of a submodule keeping
|
- the repository's own
|
||||||
its own `.git` directory. `git describe` does not need them, and each can
|
- each submodule's under `.git/modules/`
|
||||||
hold a credential: a password in a remote URL, or the token the CI
|
- that of a submodule keeping its own `.git` directory
|
||||||
checkout step stores there. A submodule whose name has a `config` segment
|
|
||||||
(`config`, `deploy/config`, `config/lib`) loses its whole git directory to
|
`git describe` does not need them, and each can hold a credential: a
|
||||||
`**/.git/modules/**/config`, and Go's version stamping then fails the
|
password in a remote URL, or the token the CI checkout step stores
|
||||||
build: give it a name without that segment (`git submodule add --name`).
|
there. A submodule name may have a `config` segment, as in `config`,
|
||||||
The stage that compiles has `git` (the Debian Go image has it; an alpine
|
`deploy/config` or `config/lib`. Such a submodule loses its whole git
|
||||||
one needs `apk add --no-cache git`) and takes the version from the
|
directory to `**/.git/modules/**/config`, and Go's version stamping then
|
||||||
`VERSION` build argument when one is given, otherwise from
|
fails the build. Give it a name without that segment
|
||||||
`git describe --tags --always`. That gives the tag on a tagged commit; on
|
(`git submodule add --name`). The stage that compiles has `git`: the
|
||||||
a later commit, the tag, the number of commits since it and the short
|
Debian Go image has it, and an alpine one needs
|
||||||
commit (`v1.2.3-4-gabc1234`); and the short commit when no tag is
|
`apk add --no-cache git`. That stage takes the version from the
|
||||||
reachable. The stage that compiles also marks its working directory safe
|
`VERSION` build argument when one is given, otherwise from
|
||||||
for git (`git config --system --add safe.directory /src`): a context sent
|
`git describe --tags --always`. That gives:
|
||||||
as a tar stream keeps the sender's file owners, and git refuses a checkout
|
- the tag, on a tagged commit
|
||||||
owned by another user, so the version would come out empty. `ARG VERSION`
|
- the tag, the number of commits since it and the short commit
|
||||||
has no default, and the build fails if the context carries `.git` and the
|
(`v1.2.3-4-gabc1234`), on a later commit
|
||||||
version still comes out empty, `dev` or `unknown`. A plain
|
- the short commit, when no tag is reachable
|
||||||
`docker build .` with no build arguments must succeed; a Dockerfile that
|
|
||||||
refuses an empty build argument drops that refusal and keeps the argument.
|
The stage that compiles also marks its working directory safe for git
|
||||||
A checkout whose `.git` is a file (a linked worktree, or a repository
|
(`git config --system --add safe.directory /src`). A context sent as a
|
||||||
checked out as a submodule) is the exception: that file points to a git
|
tar stream keeps the sender's file owners, and git refuses a checkout
|
||||||
directory outside the build context, so the build cannot read the version
|
owned by another user, so the version would come out empty.
|
||||||
and a plain `docker build .` fails; pass the version with
|
`ARG VERSION` has no default. The build fails if the context carries
|
||||||
`--build-arg VERSION=...`, as `script/docker` and `script/cibuild` already
|
`.git` and the version still comes out empty, `dev` or `unknown`. A
|
||||||
do.
|
plain `docker build .` with no build arguments must succeed; a
|
||||||
|
Dockerfile that refuses an empty build argument drops that refusal and
|
||||||
|
keeps the argument. A checkout whose `.git` is a file is the exception:
|
||||||
|
a linked worktree, or a repository checked out as a submodule. That file
|
||||||
|
points to a git directory outside the build context, so the build cannot
|
||||||
|
read the version and a plain `docker build .` fails. Pass the version
|
||||||
|
with `--build-arg VERSION=...`, as `script/docker` and `script/cibuild`
|
||||||
|
already do.
|
||||||
|
|
||||||
- The Dockerfile carries a `lint` phase and a `test` phase, each invoking
|
- The Dockerfile carries a `lint` phase and a `test` phase, each invoking
|
||||||
its tool directly rather than through `make` or `script/`, and the final
|
its tool directly rather than through `make` or `script/`, and the final
|
||||||
stage carries a `COPY --from=` of a harmless file from each so the image
|
stage carries a `COPY --from=` of a harmless file from each so the image
|
||||||
@@ -147,6 +155,7 @@ Template files can be fetched from:
|
|||||||
- Server: the final stage builds and runs the application
|
- Server: the final stage builds and runs the application
|
||||||
- Non-server: the final stage brings up the dev environment
|
- Non-server: the final stage brings up the dev environment
|
||||||
- Image pinned by sha256 hash with version/date comment
|
- Image pinned by sha256 hash with version/date comment
|
||||||
|
|
||||||
- [ ] Gitea Actions workflow at `.gitea/workflows/check.yml` that runs
|
- [ ] Gitea Actions workflow at `.gitea/workflows/check.yml` that runs
|
||||||
`script/cibuild` on push, checks out with `persist-credentials: false` and
|
`script/cibuild` on push, checks out with `persist-credentials: false` and
|
||||||
with `fetch-depth: 0` (which fetches the tags `git describe` needs),
|
with `fetch-depth: 0` (which fetches the tags `git describe` needs),
|
||||||
|
|||||||
+473
-345
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user