{"id":39734728,"url":"https://github.com/agilecustoms/release","last_synced_at":"2026-02-12T06:15:49.594Z","repository":{"id":301475829,"uuid":"846299600","full_name":"agilecustoms/release","owner":"agilecustoms","description":"GitHub action to release a microservice - git tags, upload binary in S3","archived":false,"fork":false,"pushed_at":"2026-02-09T18:44:44.000Z","size":592,"stargazers_count":78,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-09T19:00:34.370Z","etag":null,"topics":["aws-codeartifact","aws-ecr","aws-s3","engineering-productivity","npm-packages","release-automation"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/agilecustoms.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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-22T23:24:36.000Z","updated_at":"2026-02-09T18:44:06.000Z","dependencies_parsed_at":"2025-06-27T04:51:52.639Z","dependency_job_id":"65e25632-a0be-4a8b-a629-b15783f4bb12","html_url":"https://github.com/agilecustoms/release","commit_stats":null,"previous_names":["agilecustoms/publish","agilecustoms/release"],"tags_count":125,"template":false,"template_full_name":null,"purl":"pkg:github/agilecustoms/release","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agilecustoms%2Frelease","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agilecustoms%2Frelease/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agilecustoms%2Frelease/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agilecustoms%2Frelease/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/agilecustoms","download_url":"https://codeload.github.com/agilecustoms/release/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agilecustoms%2Frelease/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29360549,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T01:03:07.613Z","status":"online","status_checked_at":"2026-02-12T02:00:06.911Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["aws-codeartifact","aws-ecr","aws-s3","engineering-productivity","npm-packages","release-automation"],"created_at":"2026-01-18T11:04:20.803Z","updated_at":"2026-02-12T06:15:49.587Z","avatar_url":"https://github.com/agilecustoms.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# About\n\nRelease software artifacts in AWS (S3, ECR, CodeArtifact) and NPM with consistent versioning!\n\n\u003e **⚠️ Feb 9, 2026 — version 5 was released to accommodate for breaking changes in NPM made back in Dec 9, 2025, see [Migration Guide](./docs/MIGRATION.md)**\n\n![Cover](docs/images/cover.png)\n\nYou can release **any combination** of software packages, binary files, docker images, and raw repo files\n\nThis is especially useful in microservices where the release is a _binary_ + _IaC_ versioned via git tag\n\n## Features\n\n- automatic and manual [version generation](./docs/features/version-generation.md)\n- release notes generation and changelog update\n- [floating tags](./docs/features/floating-tags.md) — given the current version is `1.2.3` and you release `1.2.4` then also create/move tags `1.2`, `1` and `latest`\n- [maintenance releases](./docs/features/maintenance-release.md) — made from branch like `1.x.x` (given `2.x.x` development is in `main`)\n- [prereleases](./docs/features/prerelease.md) — develop a next (often major, sometimes minor) version, typically made from a branch `next`\n- [dev-release](./docs/features/dev-release.md) — ability to publish artifacts for dev testing when testing on a local machine is impossible/complicated\n- [idempotency](./docs/features/idempotency.md) — ability to re-run the action without side effects\n- GitHub release\n\n## Artifact types ⇔ features\n\n| Artifact type                                                             | floating tags | idempotency | dev-release | auto cleanup |\n|---------------------------------------------------------------------------|---------------|-------------|-------------|--------------|\n| [git](./docs/artifact-types/git.md)                                       | ✅             | ✅           | ✅ ️         | ✅            |\n| [AWS S3](./docs/artifact-types/aws-s3.md)                                 | ✅             | ✅           | ✅           | ✅            |\n| [AWS ECR](./docs/artifact-types/aws-ecr.md)                               | ✅             | ✅           | ✅           | ✅            |\n| [AWS CodeArtifact maven](./docs/artifact-types/aws-codeartifact-maven.md) | ❌️            | ⚠️          | ❌️          | N/A          |\n| [npmjs](./docs/artifact-types/npmjs.md)                                   | ✅             | ⚠️          | ❌️          | N/A          |\n\n_See the respective artifact type to learn about idempotency limitations ⚠️_\n\n## Usage\n\nAll examples are structured by [artifact types](./docs/artifact-types/index.md) and [features](./README.md#features)\n\nThe example below shows how to publish binaries in S3:\n\n```yaml\nname: Release\n\non:\n  push: # note that 'pull_request' and 'pull_request_target' are not supported\n    branches:\n      - main\n\njobs:\n  Release:\n    runs-on: ubuntu-latest\n    environment: release # has secret GH_TOKEN - a PAT with permission to bypass branch protection rule\n    permissions:\n      contents: read     # to checkout the code\n      id-token: write    # to assume AWS role via OIDC\n    steps:\n      # (example) package AWS Lambda code as a zip archive in ./s3 directory\n        \n      - name: Release\n        uses: agilecustoms/release@v5\n        with:\n          aws-account: ${{ vars.AWS_ACCOUNT_DIST }}\n          aws-region: us-east-1\n          aws-role: 'ci/publisher'\n          aws-s3-bucket: 'mycompany-dist'\n        env:\n          GH_TOKEN: ${{ secrets.GH_TOKEN }}\n```\n\nAssume:\n- you store artifacts in AWS account \"Dist\" and its number is stored in GH org variable `AWS_ACCOUNT_DIST`\n- you have an S3 bucket `mycompany-dist` in `us-east-1` region\n- there is a role `ci/publisher` with permissions to upload files in this S3 bucket and trust policy that allows to assume this role from GH action\n- you have repo `mycompany/myapp`\n- current release branch `main` has a protection rule so all changes must be done via PR\n- you have a GH environment `release` associated with branch `main`\n- There is a PAT (Personal Access Token) with permission to bypass the branch protection rule. This PAT is stored as environment secret `GH_TOKEN`\n- the latest tag is `v1.2.3`\n\nScenario:\n- a developer made a feature branch and a commit with message `feat: new-feature`\n(alternatively use input [version-bump](./docs/features/version-generation.md#version-bump) for default minor/patch bump)\n- the developer created and merged a PR which triggered a `Release` workflow\n- build steps (omitted) produced a directory `./s3` with files (like a zip archive for AWS Lambda)\n\nThe action will:\n- generate a new version `v1.3.0` (minor bump based on commit message prefix `feat:`)\n- upload files from `./s3` directory to S3 bucket `mycompany-dist` at path `/myapp/v1.3.0/`\n- update `CHANGELOG.md` with release notes\n- push tags `v1.3.0`, `v1.3`, `v1` and `latest` to the remote repository\n- create a GH Release tied to tag `v1.3.0`\n\n## Ecosystem\n\nThe action comes with an **ecosystem**:\n- Terraform module to create a Release-ready [GitHub repository](https://registry.terraform.io/modules/agilecustoms/repo/github/latest)\n- Terraform modules to provide AWS policies to [read](https://registry.terraform.io/modules/agilecustoms/ci-builder/aws/latest) and [publish](https://registry.terraform.io/modules/agilecustoms/ci-publisher/aws/latest) artifacts\n- GitHub actions to use in build workflows, e.g., [setup-maven-codeartifact](https://github.com/agilecustoms/setup-maven-codeartifact)\n- documentation and examples for all supported [artifact types](./docs/artifact-types/index.md)\n- [Authorization and Security](./docs/authorization.md) — how to make releases secure, including self-service (dev-releases)\n- Release workflow [best practices](./docs/best-practices.md)\n- Articles: 🧩 [Software distribution in AWS](https://www.linkedin.com/pulse/software-distribution-aws-alexey-chekulaev-ubl0e),\n  🧩 [GitFlow vs Build-and-deploy](https://www.linkedin.com/pulse/gitflow-build-and-deploy-alex-chekulaev-lvive)\n\n## Inputs\n\n_There are no required inputs. The action only controls that the combination of inputs is valid_\n\n| Name                        | Default           | Description                                                                                                                                                                                                                                             |\n|-----------------------------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| aws-account                 |                   | AWS account to publish artifacts to. Not needed if there are no artifacts, just a git tag                                                                                                                                                               |\n| aws-codeartifact-domain     |                   | AWS CodeArtifact domain name, e.g., `mycompany`                                                                                                                                                                                                         |\n| aws-codeartifact-repository | (see description) | AWS CodeArtifact repository name, e.g., `maven`. If `aws-codeartifact-maven` is set, then default to `maven`                                                                                                                                            |\n| aws-codeartifact-maven      |                   | Two possible values: build and publish. publish - publish maven artifacts to AWS CodeArtifact, build - just access CodeArtifact to update version in pom.xml                                                                                            |\n| aws-ecr                     |                   | If true, then push docker image to AWS ECR, [example](./docs/artifact-types/aws-ecr.md)                                                                                                                                                                 |\n| aws-region                  |                   | AWS region                                                                                                                                                                                                                                              |\n| aws-role                    |                   | AWS IAM role to assume to publish, e.g., `ci/publisher`                                                                                                                                                                                                 |\n| aws-s3-bucket               |                   | AWS S3 bucket to upload artifacts to                                                                                                                                                                                                                    |\n| aws-s3-dir                  |                   | Allows you to specify AWS S3 bucket directory to upload artifacts to. By default, just place in `bucket/{repo-name}/{version}/*`                                                                                                                        |\n| changelog-file              | CHANGELOG.md      | Changelog file path. Pass an empty string to disable changelog generation                                                                                                                                                                               |\n| changelog-title             | # Changelog       | Title of the changelog file (first line of the file)                                                                                                                                                                                                    |\n| dev-branch-prefix           | feature/          | Allows you to enforce branch prefix for dev-releases; this helps to write auto-disposal rules. Empty string disables enforcement                                                                                                                        |\n| dev-release                 | false             | Allows you to create a temporary named release, mainly for dev testing. Implementation is different for all supported artifact types                                                                                                                    |\n| floating-tags               | true              | When next version to be released is `1.2.4`, then also release `1.2`, `1` and `latest`. Not desired for public terraform modules                                                                                                                        |\n| java-cache                  | maven             | Enable Maven dependency caching. Use empty string `\"\"` to disable                                                                                                                                                                                       |\n| java-cachedependency-path`  | (see doc.)        | See description at [actions/setup-java](https://github.com/actions/setup-java?tab=readme-ov-file#usage)                                                                                                                                                 |\n| java-distribution           | temurin           | Java distribution. Default is Temurin as it is pre-cached in ubuntu-latest                                                                                                                                                                              |\n| java-version                | 21                | Java version to use. [Example](./docs/artifact-types/aws-codeartifact-maven.md)                                                                                                                                                                         |\n| npm-publish                 | false             | If true, then publish package to npmjs.com registry. [Example](./docs/artifact-types/npmjs.md)                                                                                                                                                          |\n| npm-visibility              | public            | Used together with input `npm-publish`. Specifies package visibility: public or private (not tested yet)                                                                                                                                                |\n| python-version              | 3.13              | Python version, so far only used to bump version in pyproject.toml                                                                                                                                                                                      |\n| pre-publish-script          |                   | Custom shell script that allows you to update version in arbitrary file(s), not only files governed by build tool (pom.xml, package.json, etc.). In this script you can use variable `$version`. See example in [npmjs](./docs/artifact-types/npmjs.md) |\n| release-branches            | (see description) | Semantic-release [branches](https://semantic-release.gitbook.io/semantic-release/usage/configuration#branches), mainly used to support [maintenance releases](./docs/features/maintenance-release.md) and [prereleases](./docs/features/prerelease.md)  |\n| release-channel             |                   | Repeat `.releaserc.json` `channel` behavior when `version` is set explicitly. See [floating-tags](./docs/features/floating-tags.md) for details                                                                                                         |\n| release-gh                  | true              | If true, then create a GitHub release                                                                                                                                                                                                                   |\n| release-plugins             | (see description) | Semantic-release \"plugins\" configuration, see [details](./docs/configuration.md)                                                                                                                                                                        |\n| summary                     | (see description) | Text to print in step summary. Can use `${version}` placeholder. Default is `### Released ${version}`. Set to an empty string to omit summary generation                                                                                                |\n| tag-format                  | v${version}       | Default tag format is `v1.0.0` _(default is in code level, not input value)_. Use `${version}` to remove `v` prefix                                                                                                                                     |\n| update-version-in-manifest  | true              | Update version in language-specific manifest files (e.g., pom.xml, package.json, pyproject.toml)                                                                                                                                                        |\n| version                     |                   | [Explicit version](./docs/features/version-generation.md#explicit-version) to use instead of auto-generation                                                                                                                                            |\n| version-bump                |                   | Allows you to [bump a version](./docs/features/version-generation.md#version-bump) without conventional commits                                                                                                                                         |\n\n## Outputs\n\n| Name              | Description                                                  |\n|-------------------|--------------------------------------------------------------|\n| version           | Version that was generated (or provided via `version` input) |\n\n## Environment variables\n\n| Name      | Description                                                                                                                                       |\n|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------|\n| GH_TOKEN  | Takes GH PAT with permission to bypass the branch and tags protection rules. See details in [Authorization and Security](./docs/authorization.md) |\n\n## Misc\n\n- [More about this project](./docs/about.md): history, motivation\n- [Troubleshooting](./docs/troubleshooting.md)\n- [Contribution guideline](./docs/contribution.md)\n- [Feature test coverage](./docs/test-coverage.md)\n\n## License\n\nThis project is released under the [MIT License](./LICENSE)\n\n## Acknowledgements\n\n- https://github.com/semantic-release/semantic-release — NPM library to generate the next version and release notes. Used as essential part of `agilecustoms/release` action\n- https://github.com/cycjimmy/semantic-release-action — GH action wrapper for `semantic-release` library. Used as a reference on how to write my own GH action-adapter for semantic-release\n- https://github.com/anothrNick/github-tag-action — easy and powerful GH action to generate the next version and push it as a tag. Used it for almost 2 years until switched to semantic-release\n- https://github.com/googleapis/release-please-action — GH action to create release PRs based on conventional commits\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagilecustoms%2Frelease","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagilecustoms%2Frelease","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagilecustoms%2Frelease/lists"}