API-dokumentationen har fulgt med hele vejen — der er en prøve, der fejler, hvis en rute ikke står i openapi.yaml, og den fangede mig fire gange i går. Brugervejledningen har ikke fulgt med, og det er den, folk læser. Nyt: en side om beskeder — hvad der udløser en, hvorfor gentagne rettelser bliver slået sammen, push pr. apparat og mærket på ikonet. En om at åbne links i en anden browser, som mest af alt handler om, hvad en webside ikke kan: hverken se hvilke browsere der findes eller vælge mellem dem. Og en om tællingen af installationer, som ikke stod nogen steder overhovedet — en melding, der er slået til som udgangspunkt, har en pligt til at være skrevet ned, også når ingen har spurgt. Rettet: AI-siden beskrev to funktioner, hvor der nu er syv, og listen over hvad der sendes hvorhen var derfor forkert som en påstand om noget privat. Noter-siden manglede deling med en e-mailadresse og hvad `@Sofie` gør. Mail-siden manglede den anden vej ind i indbakken. Konfigurationen sagde stadig, at versionstjekket kun kunne se efter. Og tagbeskeden når nu frem. Den ER annonceringen — skrevet på produktets eget sprog til dem, der bruger det — og udgivelsen på GitHub blev fyldt med en autogenereret liste over commit-overskrifter i stedet, som er skrevet til dem, der læser koden. Nu står teksten øverst og listen under den. Linjen med linket til udgivelsen selv tages af: en side, der linker til sig selv, hjælper ingen. Dokumentationen bygges nu også på en PR. `mkdocs build --strict` fejler på et link til en side, der ikke findes, og at bygge først efter merge er at få det at vide på main. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
93 lines
3.4 KiB
YAML
93 lines
3.4 KiB
YAML
name: Release
|
|
|
|
# Tagging is the release trigger: semver tags only, so a stray tag does not publish.
|
|
on:
|
|
push:
|
|
tags: ["v[0-9]+.[0-9]+.[0-9]+*"]
|
|
|
|
permissions:
|
|
# write rather than read: the job creates the GitHub Release the update notice
|
|
# reads. packages: write is for pushing the image.
|
|
contents: write
|
|
packages: write
|
|
|
|
jobs:
|
|
image:
|
|
name: Build and publish image
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
# Taggen selv, ikke kun den commit den peger på: udgivelsesteksten
|
|
# nedenfor står i tagbeskeden, og en overfladisk checkout henter
|
|
# commit'en uden den.
|
|
fetch-depth: 0
|
|
|
|
- uses: docker/setup-qemu-action@v3
|
|
- uses: docker/setup-buildx-action@v3
|
|
|
|
- uses: docker/login-action@v3
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: ghcr.io/${{ github.repository }}
|
|
# v1.4.2 publishes 1.4.2, 1.4 and 1 — so a Rune pinned to :1 gets
|
|
# patches without ever crossing a major version.
|
|
tags: |
|
|
type=semver,pattern={{version}}
|
|
type=semver,pattern={{major}}.{{minor}}
|
|
type=semver,pattern={{major}}
|
|
type=raw,value=latest
|
|
|
|
# arm64 is not optional: a homelab is as likely to be a Raspberry Pi or an
|
|
# Apple silicon VM as it is to be an x86 box.
|
|
- uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
platforms: linux/amd64,linux/arm64
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
build-args: |
|
|
VERSION=${{ github.ref_name }}
|
|
cache-from: type=gha
|
|
cache-to: type=gha,mode=max
|
|
|
|
# A tag is not a release. The in-app update notice reads GitHub's
|
|
# releases/latest, which answers 404 for a repository that only has tags —
|
|
# so without this step the check can never find anything, however correctly
|
|
# it is switched on.
|
|
#
|
|
# Created after the image, so a release never announces a version that
|
|
# failed to build.
|
|
# Tagbeskeden ER annonceringen. Den skrives, når der tagges, på produktets
|
|
# eget sprog og til dem, der bruger det — og indtil nu nåede den aldrig
|
|
# frem: udgivelsen på GitHub blev fyldt med en autogenereret liste over
|
|
# commit-overskrifter, som er skrevet til dem, der læser koden.
|
|
#
|
|
# Den sidste linje er et link til udgivelsen selv, og den tages af: en
|
|
# side, der linker til sig selv, hjælper ingen.
|
|
- id: notes
|
|
run: |
|
|
{
|
|
echo 'body<<VERDANDE_EOF'
|
|
git tag -l --format='%(contents)' "${GITHUB_REF_NAME}" \
|
|
| sed '\#^https://github.com/.*/releases/tag/#d' \
|
|
| sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'
|
|
echo VERDANDE_EOF
|
|
} >> "$GITHUB_OUTPUT"
|
|
|
|
- uses: softprops/action-gh-release@v2
|
|
with:
|
|
body: ${{ steps.notes.outputs.body }}
|
|
# Stadig sat: den autogenererede liste lægges *under* teksten ovenfor,
|
|
# så både den, der vil vide hvad der er nyt, og den, der vil se hvilke
|
|
# ændringer det var, kan læse det samme sted.
|
|
generate_release_notes: true
|
|
make_latest: true
|