Compare commits
6 Commits
record-output
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5d981a7304 | |||
| b17106afab | |||
| 314ba49b9d | |||
| 19aae8bbfe | |||
| 2d28220869 | |||
| cc15bdd1d9 |
@@ -16,12 +16,28 @@ jobs:
|
|||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Relevant changes
|
||||||
|
id: changes
|
||||||
|
run: |
|
||||||
|
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
|
||||||
|
git fetch --no-tags origin "$GITHUB_BASE_REF"
|
||||||
|
base="origin/$GITHUB_BASE_REF"
|
||||||
|
else
|
||||||
|
base='${{ github.event.before }}'
|
||||||
|
fi
|
||||||
|
if git diff --quiet "$base"...HEAD -- '*.go' go.mod go.sum Dockerfile .dockerignore .github data README.md; then
|
||||||
|
echo "code=false" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "code=true" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
# `docker build` streams the context to the daemon. A compose bind-mount of
|
# `docker build` streams the context to the daemon. A compose bind-mount of
|
||||||
# `.` mounts an empty host dir instead, because the job is itself a container.
|
# `.` mounts an empty host dir instead, because the job is itself a container.
|
||||||
- name: Latest supported Go
|
- name: Latest supported Go
|
||||||
|
if: ${{ steps.changes.outputs.code == 'true' }}
|
||||||
run: docker build .
|
run: docker build .
|
||||||
# Runs even when the step above failed, so a red build says whether the
|
# Runs even when the step above failed, so a red build says whether the
|
||||||
# failure is version-specific.
|
# failure is version-specific.
|
||||||
- name: Lowest supported Go
|
- name: Lowest supported Go
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() && steps.changes.outputs.code == 'true' }}
|
||||||
run: docker build --build-arg GO_VERSION=1.22.12 .
|
run: docker build --build-arg GO_VERSION=1.22.12 .
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
.claude
|
.claude
|
||||||
*.out
|
*.out
|
||||||
__pycache__/
|
__pycache__/
|
||||||
todo.md
|
|
||||||
@@ -8,11 +8,3 @@
|
|||||||
- A standing choice a reader would relitigate goes under Decisions in the README, not in a comment.
|
- A standing choice a reader would relitigate goes under Decisions in the README, not in a comment.
|
||||||
- A README example is a `json` block that loads and renders as a category; `readme_test.go` runs every one.
|
- A README example is a `json` block that loads and renders as a category; `readme_test.go` runs every one.
|
||||||
- Cyclomatic complexity is gated at 14: the table-shaped dispatches (`eachToken`, `calc.factor`, `walkPath`) sit at 13–14 and stay whole; anything else that reaches 14 is decomposed.
|
- Cyclomatic complexity is gated at 14: the table-shaped dispatches (`eachToken`, `calc.factor`, `walkPath`) sit at 13–14 and stay whole; anything else that reaches 14 is decomposed.
|
||||||
|
|
||||||
# Deferred
|
|
||||||
|
|
||||||
- **Shipped-data de-duplication (2026-09-02).** `email.json`'s `local` is a
|
|
||||||
drifted copy of `username.json`, and no shipped file yet uses a held path, an
|
|
||||||
operand or a reference. Fixed in the data fill before the first tag, when the
|
|
||||||
shipped set is rewritten anyway; premise: nothing depends on the shipped data's
|
|
||||||
shape until then. Not raised in review before that.
|
|
||||||
|
|||||||
@@ -484,8 +484,10 @@ docker compose run --rm --user "$(id -u):$(id -g)" tidy # go mod tidy
|
|||||||
```
|
```
|
||||||
|
|
||||||
Every pull request runs `docker build .` against both the latest and the lowest
|
Every pull request runs `docker build .` against both the latest and the lowest
|
||||||
supported Go, and must pass before it can be merged. That build is the whole
|
supported Go, and must pass before it can be merged — unless it changes none of
|
||||||
gate — vet, complexity, format check and tests — so run it locally before pushing:
|
the files the build and its tests read, nor the workflow itself, in which case
|
||||||
|
it's skipped (see [Decisions](#decisions)). That build is the whole gate — vet,
|
||||||
|
complexity, format check and tests — so run it locally before pushing:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker build . # latest
|
docker build . # latest
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# Release checklist
|
||||||
|
|
||||||
|
What to settle before the first tag, then the work that follows in a later,
|
||||||
|
data-heavy release.
|
||||||
|
|
||||||
|
## Before the first release — settle the record flag and API contract
|
||||||
|
|
||||||
|
- `--format` vocabulary — confirm `text`, `json`, `ndjson`, `csv`, `sql`; the
|
||||||
|
`json`-as-array vs `ndjson`-as-lines split; `--table` (the SQL INSERT target);
|
||||||
|
the `--separator` rejection on record formats; and the exit codes (misuse 2,
|
||||||
|
runtime 1).
|
||||||
|
- Library surface — confirm `Record`, `FakeRecord`, `NewRecordTemplate`,
|
||||||
|
`RecordTemplate`, `Column`/`Columns()`, and the `JSON()`, `CSVHeader()`,
|
||||||
|
`CSVLine()`, `SQLInsert()` serializers.
|
||||||
|
- Typed scalars — columns are strings today (`"42"`, quoted SQL). Confirm that
|
||||||
|
stays out of scope, or add a per-column `kind` before the tag.
|
||||||
|
- Struct-filling — `fake:"..."` tags (reflection over an arbitrary struct) stay
|
||||||
|
out of scope; `Columns()` hands the caller the values to map themselves.
|
||||||
|
Confirm.
|
||||||
|
- Independent reference draw — within one record every tailed reference to a
|
||||||
|
category is one draw, with no spelling for "these columns should disagree".
|
||||||
|
Confirm the per-record contract, or add the spelling.
|
||||||
|
|
||||||
|
## Later, in a data-heavy release
|
||||||
|
|
||||||
|
- Shipped-data de-duplication — `email.json`'s `local` is a drifted copy of
|
||||||
|
`username.json`; fold it in when the shipped set grows and we add lots more
|
||||||
|
data.
|
||||||
Reference in New Issue
Block a user