Development

The source is at git.fig.systems/eddie/birdpal.

Build and test

You need Go 1.27 or newer.

go build -o birdpal .

e2e_test.py runs birdpal against fake Bird Buddy, media and Immich servers. It does not touch your accounts.

go build -o birdpal_test_bin . && python3 e2e_test.py

Two environment variables exist for tests: BIRDBUDDY_GRAPHQL_URL points birdpal at a fake Bird Buddy API, and BIRDPAL_VERIFY_WAIT (a Go duration such as 0s) shortens the wait before the check and between API retries. The fake servers do not check GraphQL queries against Bird Buddy's real schema. Test changes to the queries against the real API with --dry-run.

Release

A tag push builds and publishes a release with GoReleaser (.goreleaser.yaml) in Forgejo Actions (.forgejo/workflows/release.yml):

git tag v1.2.3
git push origin v1.2.3

A tag with a suffix, such as v1.2.3-rc.1, makes a pre-release: no latest image tag. Test the release build locally first; nothing is published:

goreleaser check
goreleaser release --snapshot --clean --skip=ko

Secrets (Forgejo user Settings → Actions → Secrets):

Secret Needed for
RELEASE_TOKEN Optional: a Forgejo access token (Repository: read and write). Set it only if the automatic token cannot create releases.
QUAY_USERNAME, QUAY_PASSWORD, QUAY_NAMESPACE Images on quay.io: a robot account (<namespace>+<robot>) with Write on the repository
DOCKERHUB_USERNAME, DOCKERHUB_TOKEN Images on Docker Hub: an access token with Read & Write

This site

These pages are in docs/ and built with MkDocs and the Terminal theme. Every push to main that changes docs/ or mkdocs.yml, and every release, rebuilds the site with .forgejo/docs.py. The download table on the Install page comes from the latest release.

pip install -r .forgejo/docs-requirements.txt
mkdocs serve