steps:
# 1. from workflow tag (can be v-prefixed)
# good for release workflows and pushing tags
- name: Parse version from tag
id: version
uses: release-kit/semver@v2
# 2. from manually defined v-prefixed string
- name: Parse version from string
id: version
uses: release-kit/semver@v2
with:
string: 'v4.5.0'
# 3. from a string with the custom pattern
- name: Parse version from a string with a custom pattern
id: version
uses: release-kit/semver@v2
with:
string: 'my-version:4.5.0'
pattern: '^my-version:(.*)$' # ^v?(.*)$ by default
# 4. from a tag with the custom fallback
# the fallback is used when there is no tag found
# works only for "latest-tag" source
- name: Parse version from tag with custom fallback
id: version
uses: release-kit/semver@v2
with:
source: latest-tag
fallback: 'v1.0.0' # v0.1.0 by default- name: Use parsed version
run: |
echo "${{ steps.version.outputs.major }}"
echo "${{ steps.version.outputs.minor }}"
echo "${{ steps.version.outputs.patch }}"
echo "${{ steps.version.outputs.prerelease }}"
echo "${{ steps.version.outputs.build }}"
echo "${{ steps.version.outputs.full }}"Check out the Outputs section for the full description.
source(optional, defaults toworkflow-tag)workflow-tag- use tag from the workflow event (good from releases and tag pushes)latest-tag- use the latest tag from current repository (requires executingcheckoutaction first)string- use the value fromstringinput (can be omitted, automatically selected whenstringis defined)
string(optional, defaults to empty) - a string to be parsed, required only whensourceisstringfallback(optional, defaults tov0.1.0) - fallback string when a tag is not foundpattern(optional, defaults to^v?(.*)$) - regex to extract a version from a string
full-3.4.5-alpha+1.2inv3.4.5-alpha+1.2major-3inv3.4.5-alpha+1.2minor-4inv3.4.5-alpha+1.2patch-5inv3.4.5-alpha+1.2prerelease-alphainv3.4.5-alpha+1.2(empty string if no present)build-1.2inv3.4.5-alpha+1.2(empty string if no present)
- Fork this repo
- Use the Regular flow
Please follow Conventions
The dev branch is main - any developer changes is merged in there.
Also, there is a release/latest branch. It always contains the actual source code for release published with latest tag.
All changes is made using Pull Requests - push is forbidden. PR can be merged only after successfull test-and-build workflow checks.
When PR is merged, release-drafter workflow creates/updates a draft release. The changelog is built from the merged branch scope (feat, fix, etc) and PR title. When release is ready - we publish the draft.
Then, the release workflow handles everything:
- It runs tests, builds a package, and publishes it
- It synchronizes released tag with
release/latestbranch
- Create feature branch
- Make changes in your feature branch and commit
- Create a Pull Request from your feature branch to
main
The PR is needed to test the code before pushing to release branch - If your PR contains breaking changes, don't forget to put a
BREAKING CHANGESlabel - Merge the PR in
main - All done! Now you have a drafted release - just publish it when ready
- Assume your prerelease tag is
beta - Create
release/betabranch - Create feature branch
- Make changes in your feature branch and commit
- Create a Pull Request from your feature branch to
release/beta
The PR is needed to test the code before pushing to release branch - Create Github release with tag like
v1.0.0-beta, pointing torelease/betabranch
For nextbetaversions use semver build syntax:v1.0.0-beta+1 - After that, the
releaseworkflow will publish your package with thebetatag - When the
betaversion is ready to becomelatest- create a Pull Request fromrelease/betatomainbranch - Continue from the Regular flow's #5 step
Feature branches:
- Should start with
feat/,fix/,docs/,refactor/, and etc., depending on the changes you want to propose (see pr-labeler.yml for a full list of scopes)
Commits:
- Should follow the Conventional Commits specification
Pull requests:
- Should have human-readable name, for example: "Add a TODO list feature"
- Should describe changes
- Should have correct labels