{"id":43132727,"url":"https://github.com/a-line-services/release-pilot","last_synced_at":"2026-02-28T15:04:49.575Z","repository":{"id":335725856,"uuid":"1146631824","full_name":"A-Line-Services/release-pilot","owner":"A-Line-Services","description":"Agnostic package/library development/release CI/CD tool","archived":false,"fork":false,"pushed_at":"2026-02-16T09:57:23.000Z","size":1480,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-16T18:03:51.766Z","etag":null,"topics":["ci-cd","deployment","docker","github-actions","monorepo","npm","release","release-automation","rust"],"latest_commit_sha":null,"homepage":"http://release-pilot.a-line.be/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/A-Line-Services.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-31T12:21:08.000Z","updated_at":"2026-02-16T09:57:26.000Z","dependencies_parsed_at":"2026-02-19T12:01:05.670Z","dependency_job_id":null,"html_url":"https://github.com/A-Line-Services/release-pilot","commit_stats":null,"previous_names":["a-line-services/release-pilot"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/A-Line-Services/release-pilot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/A-Line-Services%2Frelease-pilot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/A-Line-Services%2Frelease-pilot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/A-Line-Services%2Frelease-pilot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/A-Line-Services%2Frelease-pilot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/A-Line-Services","download_url":"https://codeload.github.com/A-Line-Services/release-pilot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/A-Line-Services%2Frelease-pilot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29612508,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T10:52:55.328Z","status":"ssl_error","status_checked_at":"2026-02-19T10:52:26.323Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ci-cd","deployment","docker","github-actions","monorepo","npm","release","release-automation","rust"],"created_at":"2026-01-31T21:49:03.942Z","updated_at":"2026-02-19T12:01:36.298Z","avatar_url":"https://github.com/A-Line-Services.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/release-pilot.svg\" alt=\"Release Pilot\" width=\"600\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Framework-agnostic release automation GitHub Action with multi-package and multi-ecosystem support.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/a-line-services/release-pilot/actions\"\u003e\u003cimg src=\"https://github.com/a-line-services/release-pilot/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/a-line-services/release-pilot/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/a-line-services/release-pilot\" alt=\"Release\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/a-line-services/release-pilot\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Multi-Ecosystem Support**: npm, cargo (Rust), Python, Go, Composer, Docker, and custom scripts\n- **Multi-Package/Monorepo**: Release multiple packages in dependency order\n- **Label-Based Versioning**: Determine version bumps from PR labels (`release:major`, `release:minor`, `release:patch`)\n- **Dev Releases**: Automatic prerelease versions (e.g., `1.2.3-dev.ml2fz8yd`)\n- **Prerelease Support**: Alpha, beta, and RC releases via labels\n- **Configurable**: YAML configuration with sensible defaults\n- **Dry Run Mode**: Test releases without making changes\n\n## Quick Start\n\n### Simple Usage (Auto-detect)\n\n```yaml\n# .github/workflows/release.yml\nname: Release\n\non:\n  push:\n    branches: [main]\n\njobs:\n  release:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - uses: a-line-services/release-pilot@v1\n```\n\n### With Configuration File\n\n```yaml\n# .github/release-pilot.yml\npackages:\n  - name: core\n    ecosystem: npm\n    path: ./packages/core\n    \n  - name: cli\n    ecosystem: npm\n    path: ./packages/cli\n\nrelease-order:\n  - core\n  - cli\n\nlabels:\n  major: \"release:major\"\n  minor: \"release:minor\"\n  patch: \"release:patch\"\n\nversion:\n  defaultBump: patch\n  devRelease: true\n\ngit:\n  tagPrefix: v\n  commitMessage: \"chore(release): {version}\"\n```\n\n## Inputs\n\n| Input | Description | Default |\n|-------|-------------|---------|\n| `github-token` | GitHub token for API access | `${{ github.token }}` |\n| `config-file` | Path to config file | `.github/release-pilot.yml` |\n| `mode` | Release mode: `stable`, `dev`, or `check` | `stable` |\n| `dry-run` | Run without making changes | `false` |\n| `dev-suffix` | Suffix for dev releases | `dev` |\n| `default-bump` | Default bump when no label | `patch` |\n| `packages` | JSON array of packages (alternative to config file) | - |\n| `npm-token` | NPM registry token for publishing | - |\n| `npm-registry` | NPM registry URL | `https://registry.npmjs.org` |\n| `cargo-token` | Cargo registry token for crates.io | - |\n\n## Outputs\n\n| Output | Description |\n|--------|-------------|\n| `version` | The new version released |\n| `previous-version` | Version before this release |\n| `bump-type` | Bump type applied (major/minor/patch) |\n| `released-packages` | JSON array of released package names |\n| `skipped` | Whether release was skipped |\n| `release-url` | URL of GitHub release |\n| `tag` | Git tag created |\n\n## Release Modes\n\n### Stable Release\n\nFull release with version bump, tag, and GitHub release:\n\n```yaml\n- uses: a-line-services/release-pilot@v1\n  with:\n    mode: stable\n```\n\n### Dev Release\n\nPrerelease version with base36 timestamp (e.g., `1.2.3-dev.ml2fz8yd`):\n\n```yaml\n- uses: a-line-services/release-pilot@v1\n  with:\n    mode: dev\n```\n\n### Check Mode (Dry Run)\n\nReport what would happen without making changes:\n\n```yaml\n- uses: a-line-services/release-pilot@v1\n  with:\n    mode: check\n    dry-run: true\n```\n\n## Supported Ecosystems\n\n| Ecosystem | Version File | Publish Command |\n|-----------|--------------|-----------------|\n| `npm` | `package.json` | `npm publish` |\n| `cargo` | `Cargo.toml` | `cargo publish` |\n| `python` | `pyproject.toml` | `uv publish` / `twine upload` |\n| `go` | `go.mod` | Git tag only (no publish) |\n| `composer` | `composer.json` | Git tag only (Packagist) |\n| `docker` | `Dockerfile` | `docker buildx build --push` |\n| `custom` | User-defined | User-defined script |\n\n## Docker Support\n\n```yaml\npackages:\n  - name: api-image\n    ecosystem: docker\n    docker:\n      registry: ghcr.io\n      image: myorg/api\n      platforms:\n        - linux/amd64\n        - linux/arm64\n      tags:\n        - latest\n        - \"{version}\"\n        - \"{major}.{minor}\"\n```\n\n## Registry Authentication\n\nFor detailed authentication guides for each ecosystem, see the [Authentication Documentation](https://release-pilot.a-line.be/authentication/):\n\n- [NPM / Node.js](https://release-pilot.a-line.be/authentication/npm.html)\n- [Cargo / Rust](https://release-pilot.a-line.be/authentication/cargo.html)\n- [PyPI / Python](https://release-pilot.a-line.be/authentication/python.html)\n- [Docker](https://release-pilot.a-line.be/authentication/docker.html)\n- [Go](https://release-pilot.a-line.be/authentication/go.html)\n- [Composer / PHP](https://release-pilot.a-line.be/authentication/composer.html)\n\n## PR Labels\n\nAdd these labels to your PRs to control version bumps:\n\n### Version Bump Labels\n\n- `release:major` - Breaking changes (1.0.0 -\u003e 2.0.0)\n- `release:minor` - New features (1.0.0 -\u003e 1.1.0)\n- `release:patch` - Bug fixes (1.0.0 -\u003e 1.0.1)\n- `release:skip` - Skip release entirely\n\n### Prerelease Labels\n\n- `release:alpha` - Alpha release (1.0.0 -\u003e 1.0.0-alpha.ml2fz8yd)\n- `release:beta` - Beta release (1.0.0 -\u003e 1.0.0-beta.ml2fz8yd)\n- `release:rc` - Release candidate (1.0.0 -\u003e 1.0.0-rc.ml2fz8yd)\n\nCombine with bump labels: `release:minor` + `release:rc` creates `1.1.0-rc.ml2fz8yd`\n\n### Priority\n\n- Bump type: major \u003e minor \u003e patch\n- Prerelease: rc \u003e beta \u003e alpha\n- Skip always wins (no release created)\n\n## Full Configuration Reference\n\n```yaml\n# .github/release-pilot.yml\n\npackages:\n  - name: string          # Package identifier (required)\n    path: string          # Directory path (default: .)\n    ecosystem: string     # npm|cargo|python|go|composer|docker|custom\n    versionFile: string   # Custom version file path\n    updateVersionFile: boolean  # Update version in manifest (default: true)\n    publish: boolean      # Enable publishing (default: true)\n    publishCommand: string    # For custom ecosystem\n    publishArgs: string[]     # Arguments for custom command\n    docker:               # Docker-specific config\n      registry: string    # Registry URL (default: docker.io)\n      image: string       # Image name (required)\n      dockerfile: string  # Dockerfile path (default: Dockerfile)\n      platforms: string[] # Target platforms\n      tags: string[]      # Tag templates\n      devTags: string[]   # Dev release tag templates\n\nreleaseOrder: string[]    # Package release order\n\nlabels:\n  major: string           # Major bump label (default: release:major)\n  minor: string           # Minor bump label (default: release:minor)\n  patch: string           # Patch bump label (default: release:patch)\n  skip: string            # Skip release label (default: release:skip)\n  alpha: string           # Alpha prerelease label (default: release:alpha)\n  beta: string            # Beta prerelease label (default: release:beta)\n  rc: string              # Release candidate label (default: release:rc)\n\nversion:\n  defaultBump: string     # Default bump type (default: patch)\n  devRelease: boolean     # Enable dev releases (default: false)\n  devSuffix: string       # Dev version suffix (default: dev)\n\ngit:\n  pushVersionCommit: boolean  # Push version commit (default: true)\n  pushTag: boolean            # Push tag (default: true)\n  tagPrefix: string           # Tag prefix (default: v)\n  commitMessage: string       # Commit message template\n\npublish:\n  enabled: boolean            # Enable publishing (default: true)\n  delayBetweenPackages: number  # Seconds between publishes (default: 30)\n\ngithubRelease:\n  enabled: boolean        # Create GitHub release (default: true)\n  draft: boolean          # Create as draft (default: false)\n  generateNotes: boolean  # Auto-generate notes (default: true)\n\nchangelog:\n  enabled: boolean        # Generate changelog (default: false)\n  file: string            # Changelog file (default: CHANGELOG.md)\n\nskipIfNoChanges: boolean  # Skip release if no PRs merged (default: false)\n\nversionFiles:\n  enabled: boolean        # Enable version file updates (default: false)\n  updateOn:               # Which release types trigger updates\n    stable: boolean       # Update on stable releases (default: true)\n    dev: boolean          # Update on dev releases (default: false)\n    alpha: boolean        # Update on alpha releases (default: false)\n    beta: boolean         # Update on beta releases (default: false)\n    rc: boolean           # Update on release candidates (default: false)\n  files:                  # List of files to update\n    - file: string        # File path relative to repo root\n      pattern: string     # Regex pattern to match\n      replace: string     # Replacement with {version}, {major}, {minor}, {patch}\n```\n\n## Version File Updates\n\nAutomatically update version references in files like README:\n\n```yaml\n# .github/release-pilot.yml\nversionFiles:\n  enabled: true\n  files:\n    - file: README.md\n      pattern: 'uses: org/action@v[0-9.]+'\n      replace: 'uses: org/action@v{version}'\n    - file: docs/installation.md\n      pattern: 'version: [0-9.]+'\n      replace: 'version: {version}'\n```\n\nBy default, version files are only updated on stable releases. To also update on prereleases:\n\n```yaml\nversionFiles:\n  enabled: true\n  updateOn:\n    stable: true\n    rc: true      # Also update for release candidates\n  files:\n    - file: README.md\n      pattern: 'version: [0-9.]+'\n      replace: 'version: {version}'\n```\n\n### Placeholders\n\n| Placeholder | Description | Example |\n|-------------|-------------|---------|\n| `{version}` | Full version | `1.2.3` |\n| `{major}` | Major version | `1` |\n| `{minor}` | Minor version | `2` |\n| `{patch}` | Patch version | `3` |\n\n## Examples\n\nSee the [examples](./examples) directory for complete configurations:\n\n- [Simple NPM](./examples/simple-npm) - Single package with auto-detection\n- [Monorepo](./examples/monorepo) - NPM monorepo with ordered releases\n- [Rust Crate](./examples/rust-crate) - Cargo crate for crates.io\n- [Python Package](./examples/python-package) - Python package for PyPI\n- [Go Module](./examples/go-module) - Go module with git tags\n- [Docker Image](./examples/docker-image) - Multi-arch Docker builds\n- [Multi-Ecosystem](./examples/multi-ecosystem) - Rust + Node.js bindings\n\n## Development\n\n```bash\n# Install dependencies\nbun install\n\n# Run tests\nbun test\n\n# Type check\nbun run typecheck\n\n# Build\nbun run build\n\n# Run all checks\nbun run all\n```\n\n## License\n\nGPL-3.0\n\n## Contributing\n\nContributions welcome! Please read our contributing guidelines and submit PRs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fa-line-services%2Frelease-pilot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fa-line-services%2Frelease-pilot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fa-line-services%2Frelease-pilot/lists"}