Run your project’s checks in Woodpecker and publish its artifacts when you tag a release. Choose a workflow below and keep its YAML in your repository.
Migrate a repository · Dependency updates · Release flow · Releases
| Project output | Starting point |
|---|---|
| Checks only | Minimal start |
| Docker images | Docker workflow |
| Binaries, archives or other files | Task workflow |
Each starting point includes lint and unit tests. For both images and files, share validation.
Enable the repository in Woodpecker. From the repository root, run task lint and task test:unit to confirm both tasks exist and pass. If Go and Task provide all the tools they need, save this as .woodpecker.yaml:
when:
- event: [pull_request, manual]
- event: push
branch: ${CI_REPO_DEFAULT_BRANCH}
- event: tag
ref: refs/tags/v*
steps:
- name: lint
image: ghcr.io/revotale/ci/base:v0.1.5@sha256:6e63627e23192f3e6258776bc9eeca0cc42829b1c447bc252ece997541e73f09
depends_on: []
commands: [task lint]
- name: unit
image: ghcr.io/revotale/ci/base:v0.1.5@sha256:6e63627e23192f3e6258776bc9eeca0cc42829b1c447bc252ece997541e73f09
depends_on: []
commands: [task test:unit]Open a pull request. In Woodpecker, look for two parallel steps, lint and unit. Open a failed step to see the output of its Task command.
If your tasks need extra tools or services, choose a check environment. Add optional steps for capabilities the project uses.
flowchart TD
A["PR · main push · manual · v* tag"] --> L["task lint"]
A --> U["task test:unit"]
L --> T["artifact-test target · native platform"]
U --> T
T --> E{"Event"}
E -->|"PR / push / manual"| B["Build release target · native platform"]
E -->|"v* tag"| P["Build and publish · ARM64 + AMD64"]
Checks use the builder's native platform. Only release publication builds ARM64 and AMD64. Additional check platforms are an explicit project choice. See optional steps for integration tests and the Task workflow.
Working-branch pushes do not duplicate PR checks. Each release tag runs its own checks before publishing. Other tags are ignored.
Artifact checks run during the Dockerfile build. Both targets share the runtime stage; matching layers are reused through Buildx cache.
Cache is shared between steps in one workflow. Persistent and cross-project caching require separate configuration.
Real Dockerfile · Why tests live in Dockerfile targets · Multiple images with a matrix
| Component | When to use it |
|---|---|
ghcr.io/revotale/ci/base |
Run Go and Task commands on Debian Trixie. |
ghcr.io/revotale/ci/buildx |
Build a Docker image and publish it with the project’s name, purpose, authors and license. |
Both images support ARM64 and AMD64.
Use a dedicated CI machine and require approval for untrusted PRs. Allow the exact Buildx image used by the workflow: our wrapper needs the same builder privileges as the official plugin.
| Secret | Used for | Allowed events |
|---|---|---|
registry_username, registry_password |
Publishing images | tag |
forge_token |
Release PRs and forge releases | Default-branch push |
Registry credentials need push access. Forge credentials need repository contents and pull-request write access. Do not expose them to PR checks.
In RevoTale/ci itself, merging a release PR triggers the tag and forge release after main checks pass. The tag pipeline publishes artifacts and verifies them for consumers. See release flow.
Updatecli is a companion tool. Use only official Updatecli releases, plugins and configuration. This repository does not maintain an Updatecli image, shared policy, custom updater or scheduled dependency workflow.
See Vladyslav's decision and the official integration references.
Our Buildx wrapper requires title, description, authors and licenses.
It checks that values are present, not that they are correct.
A workflow that bypasses the wrapper also bypasses these checks.
Keep image versions explicit in every step so dependency updates show exactly which steps change.
Read AGENTS.md and DECISIONS.md before proposing changes. For existing projects, follow the migration guide.
Build shared functionality here. Propose extraction into woodpecker-toolkit only when it provides clear value outside RevoTale.