linear-release-setup
linear/linear-release
Generate CI/CD configuration for Linear Release tracking and deployment integration.
What is linear-release-setup?
Sets up CI/CD pipelines to integrate with Linear Release, enabling release tracking and automated deployment workflows. Use this when configuring GitHub Actions, GitLab CI, CircleCI, or other platforms to work with Linear's release management system.
- Detects your CI platform (GitHub Actions, GitLab CI, CircleCI) and default branch automatically
- Guides you through mapping independent release streams (pipelines) vs. release phases (stages)
- Distinguishes between continuous releases (ship on every merge) and scheduled releases (collect changes, move through gates)
- Generates platform-specific CI configuration templates with proper environment setup
- Handles monorepo path filtering and multi-pipeline secrets management
- Validates runtime requirements (glibc, git, curl) for Docker-based CI environments
How to install linear-release-setup
npx skills add https://github.com/linear/linear-release --skill linear-release-setup- A Linear Release pipeline already created in Linear (Settings → Releases)
- An existing CI configuration file (.github/workflows/*.yml, .gitlab-ci.yml, .circleci/config.yml, etc.)
- Access to create secrets in your CI platform
- Linear pipeline access key (generated from the pipeline's settings page in Linear)
How to use linear-release-setup
- 1.Confirm you have created a release pipeline in Linear and note its access key
- 2.Run the skill and let it auto-detect your CI platform and default branch
- 3.Answer questions about what you ship independently (products, environments, platforms) to map pipelines
- 4.For each pipeline, specify whether it's continuous (ship on merge) or scheduled (collect and gate releases)
- 5.For scheduled pipelines, provide branch model, version source, release stages, and automation preferences
- 6.Review the generated CI configuration template matching your platform and pipeline type
- 7.Customize the template with your branch patterns, stage names, paths, and version format
- 8.Add the LINEAR_ACCESS_KEY secret to your CI platform's secret management
Use cases
- Setting up GitHub Actions to automatically update Linear releases on every production deploy
- Configuring GitLab CI for a mobile app with separate iOS, Android, and web release pipelines
- Creating scheduled release workflows that move builds through code-freeze and QA stages before shipping
- Integrating CircleCI with Linear to track nightly builds and dogfood releases
- Managing monorepo deployments where different services ship to different Linear pipelines
- DevOps engineers setting up release automation
- Mobile app teams managing versioned releases across platforms
- Web teams shipping continuous deployments
- Monorepo maintainers coordinating multi-service releases
- Engineering leads implementing release tracking and governance
linear-release-setup FAQ
A pipeline is one independent stream of releases (e.g., iOS app, web service, nightly build). A stage is one phase within a release on that pipeline (e.g., code freeze, QA, production). The test: can two things hold different commits at the same time? Yes = separate pipelines; no = one pipeline with stages.
Use continuous if every deploy completes a release (nightlies, dogfood, web apps shipping on merge). Use scheduled if the team needs to track a release before it ships—naming it, seeing what's queued, or moving it through phases. The test: does the team need to track the release as an in-progress thing before it ships?
The prebuilt binary requires glibc and will not run on Alpine/musl images. Use a Debian or Ubuntu base image (debian:bookworm-slim, ubuntu:24.04, buildpack-deps:bookworm) and ensure git and curl are installed.
Create one Linear pipeline per independent product or service. In your CI config, use path filters to trigger the correct job for each pipeline, and set a separate LINEAR_ACCESS_KEY secret per pipeline (e.g., LINEAR_ACCESS_KEY_IOS, LINEAR_ACCESS_KEY_WEB).
The linear-release repository includes example templates for GitHub Actions, GitLab CI, and CircleCI, each in both continuous and scheduled variants. The skill will guide you to the matching example and help you adapt it for your setup.
Full instructions (SKILL.md)
Source of truth, from linear/linear-release.
name: linear-release-setup description: Generate CI/CD configuration for Linear Release. Use when setting up release tracking, configuring CI pipelines for Linear, or integrating deployments with Linear releases. Supports GitHub Actions, GitLab CI, CircleCI, and other platforms.
Linear Release Setup
The linear-release README is the source of truth for commands, flags, installation, environment variables, path filtering, and troubleshooting. Fetch it before generating any config — this skill focuses on the interactive setup workflow and the pipeline modeling decisions the README cannot make for the user.
Interactive Workflow
Step 1: Preflight
Before generating config, confirm:
- Pipeline exists in Linear — the user must have created a release pipeline in Linear first (Settings → Releases). Each pipeline has its own access key.
- Detect CI platform — look for
.github/workflows/*.yml(GitHub Actions),.gitlab-ci.yml(GitLab CI),.circleci/config.yml(CircleCI), or other CI config. - Detect default branch — check
git symbolic-ref refs/remotes/origin/HEADor the CI config. Don't assumemain.
Step 2: Map pipelines, then ask
Start by listing every build the user ships independently — each becomes its own Linear pipeline. Pipeline-vs-stage confusion is the single most common setup mistake, so whenever a split isn't obvious, apply the test in "Stages vs Pipelines" below.
Ask, in order:
-
CI platform — if not auto-detected.
-
What do you ship, and to whom? Prompt explicitly about common split candidates: production vs. beta or TestFlight, nightly or dogfood builds, staging, per-platform builds (iOS, Android, web), per-service in a monorepo. For each candidate, apply the test: can these hold different commits at the same time? Yes → separate pipelines. No (same immutable build moving through gates) → one pipeline with stages.
-
For each pipeline: continuous or scheduled?
- Continuous — every deploy completes a release. Typical for nightlies, dogfood, and web apps that ship on merge.
- Scheduled — releases collect changes over time and move through stages before shipping. Typical for versioned mobile and on-prem.
The test: does the team need to track a release before it ships — naming it, seeing what's queued in it, or moving it through phases (code freeze, QA, etc.)?
- Yes → scheduled (the release exists as an in-progress thing before it ships).
- No → continuous (the release is created at the moment of shipping).
-
For each scheduled pipeline, ask explicitly:
- Branch model — just
main, ormain+ release branches (release/*)? - Version source — calendar (
2026.05), semver (1.2.0), or commit SHA? Derived from branch name, CI variable, file, or git tag? - Stages — what phases does a release move through before completion (e.g. "code freeze", "in qa")? Stages are gates on one build, not separate pipelines.
- Automation — all manual via
workflow_dispatch, or automated (e.g. cutting a release branch auto-promotes it)?
- Branch model — just
-
Monorepo paths — if multiple pipelines share one repo, note which paths belong to each and wire up path filters in Linear pipeline settings or via
--include-paths.
Step 3: Generate the CI configuration
Fetch the README first for the current commands, flags, install snippet, and command-targeting rules. For GitHub Actions, prefer the official action (linear/linear-release-action@v0); for other platforms, use the CLI binary per the README's Installation section.
Runtime requirements (Docker-based CI)
The image running the linear-release job must provide:
- glibc. The prebuilt binary is dynamically linked against glibc and will not run on Alpine/musl images. Pick a Debian/Ubuntu base (
debian:bookworm-slim,ubuntu:24.04,buildpack-deps:bookworm). Avoidalpine, any*-alpinetag, andcurlimages/curl— on musl, the binary fails with an opaque "not found" error because the glibc dynamic loader is absent. git. Slim images do not include it. Install it explicitly:apt-get update && apt-get install -y git.curl(orwget). Needed to download the CLI binary.
GitLab CI: check existing variables
If .gitlab-ci.yml already exists, inspect any default variables: block. The linear-release job needs a full clone, so override at the job level when project defaults would prevent that:
GIT_STRATEGY: clone— required if the project default isnoneorempty(both skip cloning entirely).GIT_DEPTH: 0— set this on the linear-release job regardless. New GitLab projects default to a shallow clone of depth 20, and projects often lower it further.
Pick the matching example template, adapt it (branch patterns, stage names, paths, version format), and add it to an existing workflow or create a new one. Multiple pipelines mean multiple workflows or jobs, each calling the CLI with its own access key — one secret per pipeline (e.g. LINEAR_ACCESS_KEY_IOS, LINEAR_ACCESS_KEY_WEB).
| Platform | Pipeline Type | Example |
|---|---|---|
| GitHub Actions | Continuous | github-actions-continuous/ |
| GitHub Actions | Scheduled | github-actions-scheduled/ |
| GitLab CI | Continuous | gitlab-ci-continuous/ |
| GitLab CI | Scheduled | gitlab-ci-scheduled/ |
| CircleCI | Continuous | circleci-continuous/ |
| CircleCI | Scheduled | circleci-scheduled/ |
Each scheduled example includes a monorepo note in the header explaining how to split workflows for path filtering per platform.
Step 4: Remind about secrets
Tell the user to add the LINEAR_ACCESS_KEY secret to their CI environment:
- GitHub Actions: Repository Settings → Secrets and variables → Actions → New repository secret
- GitLab CI: Settings → CI/CD → Variables
- CircleCI: Project Settings → Environment Variables
The access key is created in Linear from the pipeline's settings page. Each pipeline has its own access key.
Key Concepts
A Linear release pipeline is one independent stream of releases, with its own version history, current release, and access key. This is not a CI pipeline; it is the unit Linear uses to track releases, and your CI config calls the CLI to update it. Different products, environments, or distribution channels that ship independently are different pipelines.
Pipelines come in two types — continuous and scheduled. See the README's Pipeline Types section for the canonical description of each.
Stages vs Pipelines
A pipeline is one stream of releases. A stage is one phase inside a release on that pipeline. Confusing the two is the single most common setup mistake — work through the test below before writing any config.
The test: can two things be in-flight at the same time, holding different commits?
- Yes → separate pipelines. TestFlight running on
HEADwhile production ships 1.2 from a release branch. Web staging auto-deploying frommainwhile prod lags behind. A hotfix landing in one stream but not the other. - No, it's the same build moving through gates → one pipeline with stages. A release is cut at 1.2, goes through code freeze, QA, and RC soak, then ships. The build never changes; only the phase does.
Stages are process gates: "code freeze", "in qa", "in review", "rc soak". They only exist on scheduled pipelines.
Ambiguous cases — apply the test:
- Beta / TestFlight. TestFlight soak before GA on the same build → stage on the production pipeline. A separate nightly or dogfood channel shipping distinct builds → its own pipeline.
- Staging. Staging that auto-deploys from
main(or runs hotfixes prod doesn't have) → separate pipeline. Staging that holds the exact same build as prod, just earlier in the promotion path → stage. - Per-service monorepo. Each service that ships independently → its own pipeline, scoped by path filters. Unambiguous; services are never stages.
Stages can also be frozen in Linear. A frozen stage makes sync (without --release-version) skip that release and land commits on the next one — a safety net for code freezes. This is a process tool, not a way to squeeze two pipelines into one.
Reference
Everything about commands, flags, environment variables, command targeting, path filtering, JSON output, and troubleshooting lives in the linear-release README. For GitHub Action inputs and how they map to CLI flags, see the action README. Always fetch these rather than relying on memory — they move ahead of this skill.
Checklist
- Full clone /
fetch-depth: 0(GitLab:GIT_DEPTH: 0, andGIT_STRATEGYnotnone) -
LINEAR_ACCESS_KEYset as a secret (one per pipeline) - Correct binary platform (
linux-x64,darwin-arm64, ordarwin-x64) - Docker-based CI: glibc base image (no Alpine/musl) with
gitandcurlavailable - Triggers on the correct branches (
mainfor continuous;main+release/*for scheduled) - Monorepo: path filters set (in Linear config or via
--include-paths), and separate workflows if using release branches
Related skills
More from linear/linear-release and the wider catalog.

algorithm-design
Design algorithms with LaTeX pseudocode and UML diagrams for formal method documentation.

atomic-decomposition
Decompose research papers into atomic concepts with bidirectional math-to-code mapping.

backward-traceability
Make every number in your PDF traceable to the exact code line that produced it.

citation-management
Manage BibTeX citations for LaTeX papers with Semantic Scholar integration and validation.

code-debugging
Debug experiment code with structured error analysis and retry logic.

data-analysis
Generate rigorous statistical analysis code with multi-round review and proper uncertainty reporting.