Repository navigation
Development and Testing
English · 繁體中文
No Docker required:
make test
make test-race
make lintmake lint runs go vet and golangci-lint run. The complete gate:
make verifywhich is test, test-race, lint, and build together.
make test-integrationThe harness brings up a real Taiga in a dedicated taiga-cli-e2e Compose project on
localhost:19000, waits for the API, builds the CLI, and runs the tests behind the integration
build tag, covering auth, projects, agile workflows, wiki, attachments, batch, stats, and
export/import.
The tests create their own throwaway account, project, and issues, and on exit tear down only their own containers and volumes — they never touch the Taiga instance you use day to day.
The E2E tests live in test/e2e. Because of the //go:build integration tag they are not picked up
by go test ./....
cmd/taiga CLI entry point
cmd/releasepack Cross-platform reproducible packaging tool
internal/cli Cobra command layer
internal/taiga Taiga REST API client
internal/config TOML profiles and Git-local settings
internal/credential OS keyring abstraction
internal/output JSON envelopes and field filtering
internal/completioncache Completion metadata cache
internal/atomicfile Atomic file replacement
internal/version Build information injected via ldflags
internal/releasepack Archives, checksums, and SBOM generation
internal/taiga does not depend on internal/cli and can be used as a standalone Taiga SDK.
The App type in internal/cli exposes every I/O dependency and side effect as an injectable field
— stdin, stdout, stderr, the HTTP client, environment lookups, the working directory, and the keyring
— so command-layer tests never touch the real environment or network. They run entirely against
httptest.
make release \
VERSION=v0.1.0 \
COMMIT="$(git rev-parse HEAD)" \
SOURCE_DATE_EPOCH="$(git show -s --format=%ct HEAD)"This produces archives for six platforms, completions for four shells, SHA256SUMS, and an SPDX 2.3
SBOM under dist/<version>/. CI rebuilds the Linux archive and compares it byte for byte to prove
reproducibility.
Release builds additionally sign and notarize the macOS binaries, which the packaging tool accepts
through SIGN_IDENTITY, SIGN_KEYCHAIN, NOTARY_KEY, NOTARY_KEY_ID, and NOTARY_ISSUER. Leaving
them unset — the default for a local build — skips signing entirely and keeps every archive
reproducible. Signing only ever touches darwin targets.
The full maintainer release process is in RELEASING.md.
Getting started
Command reference
- Projects
- Members and Roles
- Work Items
- Sprints
- Wiki Pages
- Attachments
- Metadata and Custom Fields
- Search, Timeline and Stats
- Batch Operations
- Automation Recipes
- Alternatives
- Webhooks
- Account and Integrations
Operations