Release: one log page, grouped dishes, live search #1
@@ -81,6 +81,14 @@ fix: ## Format Go and templ sources, tidy go.mod
|
|||||||
|
|
||||||
image: ## Build and tag an image as vYYYYMMDD-N. Creates a git tag.
|
image: ## Build and tag an image as vYYYYMMDD-N. Creates a git tag.
|
||||||
@test -n "$(FOODSTER_REPO)" || { echo "set FOODSTER_REPO in .env"; exit 1; }
|
@test -n "$(FOODSTER_REPO)" || { echo "set FOODSTER_REPO in .env"; exit 1; }
|
||||||
|
@# A release tag must point into main, or the tag records a commit that
|
||||||
|
@# was never released.
|
||||||
|
@branch=$$(git symbolic-ref --short HEAD); \
|
||||||
|
if [ "$$branch" != "main" ]; then \
|
||||||
|
echo "releases are cut from main, not $$branch:"; \
|
||||||
|
echo " git switch main && git merge --ff-only dev"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
@day=$$(date +%Y%m%d); \
|
@day=$$(date +%Y%m%d); \
|
||||||
tag="v$$day-$$(( $$(git tag -l "v$$day-*" | wc -l) + 1 ))"; \
|
tag="v$$day-$$(( $$(git tag -l "v$$day-*" | wc -l) + 1 ))"; \
|
||||||
echo "==> $$tag"; \
|
echo "==> $$tag"; \
|
||||||
|
|||||||
@@ -360,7 +360,10 @@ on the server and run with Docker Compose.
|
|||||||
|
|
||||||
- **Branches**: `main` carries released versions only, so its history is the
|
- **Branches**: `main` carries released versions only, so its history is the
|
||||||
deployment history and every release tag points into it. Development happens
|
deployment history and every release tag points into it. Development happens
|
||||||
on `dev` and merges into `main` when a release is cut.
|
on `dev`, and `main` is protected on the remote: it accepts no direct
|
||||||
|
pushes, so a release arrives as a pull request from `dev`. `make image`
|
||||||
|
additionally refuses to run outside `main` — that one has to be local,
|
||||||
|
because the tag and the image are made before anything reaches the remote.
|
||||||
- **Versioning**: CalVer `vYYYYMMDD-N`, where `N` is the Nth build of that
|
- **Versioning**: CalVer `vYYYYMMDD-N`, where `N` is the Nth build of that
|
||||||
day. `make image` derives `N` by counting the day's existing git tags,
|
day. `make image` derives `N` by counting the day's existing git tags,
|
||||||
creates the new tag, and bakes the version into the binary through
|
creates the new tag, and bakes the version into the binary through
|
||||||
|
|||||||
@@ -50,16 +50,31 @@ One static Go binary. No Node.js, no bundler, no separate database server.
|
|||||||
## Branches
|
## Branches
|
||||||
|
|
||||||
`main` holds released versions only. Every release tag points at a commit on
|
`main` holds released versions only. Every release tag points at a commit on
|
||||||
`main`, so its history is the deployment history.
|
`main`, so its history is the deployment history. **Nothing is committed to
|
||||||
|
`main` directly** — it moves only by fast-forwarding `dev` into it.
|
||||||
|
|
||||||
All development happens on `dev`. Merge into `main` when cutting a release,
|
All development happens on `dev`. `main` is protected on the remote: it takes
|
||||||
then build and push the image from there.
|
no direct pushes, so a release arrives through a pull request.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git switch dev # where the work happens
|
git switch dev # where the work happens
|
||||||
git switch main && git merge dev && make release
|
# ... commits ...
|
||||||
|
make check # lint, unit tests, smoke
|
||||||
|
git push origin dev
|
||||||
|
|
||||||
|
tea pr create --base main --head dev # or open it in the forge
|
||||||
|
# merge the pull request, then:
|
||||||
|
|
||||||
|
git switch main && git pull --ff-only
|
||||||
|
make release # builds, tags vYYYYMMDD-N, pushes the image
|
||||||
|
git push origin --tags
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`make image` additionally refuses to run from any branch but `main`, so a
|
||||||
|
release tag can never point at a commit that was not released. That check
|
||||||
|
lives locally because it has to: tags and images are built before anything
|
||||||
|
reaches the remote, so protection there cannot catch it.
|
||||||
|
|
||||||
## Quick start
|
## Quick start
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|||||||
Reference in New Issue
Block a user