linear-release-setup

작성자: linear

Linear Release를 위한 CI/CD 구성을 생성합니다. 릴리스 추적 설정, Linear용 CI 파이프라인 구성, 또는 배포를 Linear 릴리스와 통합할 때 사용합니다. GitHub Actions, GitLab CI, CircleCI 및 기타 플랫폼을 지원합니다.

npx skills add https://github.com/linear/linear-release --skill linear-release-setup

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:

  1. Pipeline exists in Linear — the user must have created a release pipeline in Linear first (Settings → Releases). Each pipeline has its own access key.
  2. Detect CI platform — look for .github/workflows/*.yml (GitHub Actions), .gitlab-ci.yml (GitLab CI), .circleci/config.yml (CircleCI), or other CI config.
  3. Detect default branch — check git symbolic-ref refs/remotes/origin/HEAD or the CI config. Don't assume main.

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:

  1. CI platform — if not auto-detected.

  2. 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.

  3. 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).
  4. For each scheduled pipeline, ask explicitly:

    • Branch model — just main, or main + 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)?
  5. 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). Avoid alpine, any *-alpine tag, and curlimages/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 (or wget). 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 is none or empty (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).

PlatformPipeline TypeExample
GitHub ActionsContinuousgithub-actions-continuous/
GitHub ActionsScheduledgithub-actions-scheduled/
GitLab CIContinuousgitlab-ci-continuous/
GitLab CIScheduledgitlab-ci-scheduled/
CircleCIContinuouscircleci-continuous/
CircleCIScheduledcircleci-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 HEAD while production ships 1.2 from a release branch. Web staging auto-deploying from main while 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, and GIT_STRATEGY not none)
  • LINEAR_ACCESS_KEY set as a secret (one per pipeline)
  • Correct binary platform (linux-x64, darwin-arm64, or darwin-x64)
  • Docker-based CI: glibc base image (no Alpine/musl) with git and curl available
  • Triggers on the correct branches (main for continuous; main + release/* for scheduled)
  • Monorepo: path filters set (in Linear config or via --include-paths), and separate workflows if using release branches

관련 스킬

attack-path-analysis
openai
Codex가 보안 스캔의 attack-path-analysis 단계에 이미 있거나, 사용자가 보안 발견 항목을 소스에서 싱크까지 추적하도록 명시적으로 요청했을 때 사용합니다. 그리고…
auth0-aspnetcore-authentication
auth0
다음을 추가할 때 사용합니다: ASP.NET Core MVC, Razor Pages 또는 Blazor Server 웹 앱에 쿠키 기반 로그인, 로그아웃 또는 사용자 프로필. 통합합니다…
wp-rest-api
automattic
WordPress REST API 엔드포인트/라우트를 구축, 확장 또는 디버깅할 때 사용: register_rest_route, WP_REST_Controller/컨트롤러 클래스, 스키마/인수…
sandbox-agent
rivet-dev
샌드박스 환경에서 여러 AI 코딩 에이전트를 조율하기 위한 범용 API입니다. 통합된 응답, 이벤트 및 세션 관리 스키마를 통해 네 가지 코딩 에이전트(Claude Code, Codex, OpenCode, Amp)를 지원합니다. E2B, Daytona, Docker, Vercel, Cloudflare 등 환경별 구성을 통해 로컬 또는 클라우드 샌드박스에 배포할 수 있습니다. 에이전트 이벤트를 스트리밍하고, 여러 백엔드(인메모리, SQLite, Postgres, IndexedDB)에서 세션 지속성을 관리하며, 인간 개입 루프를 처리합니다...
langfuse-cli
langfuse
Langfuse와 상호작용하고 해당 문서에 접근합니다. (1) CLI를 통해 Langfuse 데이터를 프로그래밍 방식으로 쿼리하거나 수정해야 할 때 사용합니다 — 트레이스, 프롬프트,…
repo-intake-and-plan
lllllllama
README 우선 딥러닝 리포지토리 재현을 위한 엄격한 인테이크 도우미입니다. 리포지토리를 스캔하고, README 및 일반 프로젝트 파일을 읽고, 문서화된 명령어를 추출하고, 추론, 평가, 학습 후보를 분류한 후, 가장 신뢰할 수 있는 최소 재현 계획을 메인 오케스트레이터에 반환하는 작업에 사용하세요. 환경 설정, 에셋 다운로드, 명령어 실행, 최종 보고, 논문 조회, 또는 종단 간 오케스트레이션에는 사용하지 마십시오.
developmentresearchdocument
accessibility
microsoft
WCAG 2.2, ARIA 저작 관행, 인지 접근성, 섹션 508, EN 301 549 및 접근성…을 위한 통합 접근성 스킬 진입점
integrate-video
runwayml
사용자가 Runway 비디오 생성 API(텍스트-투-비디오, 이미지-투-비디오, 비디오-투-비디오)를 통합할 수 있도록 지원합니다.