622 lines
18 KiB
YAML
622 lines
18 KiB
YAML
---
|
|
version: '3'
|
|
|
|
env:
|
|
RELEASE_ANSIBLE:
|
|
sh: |
|
|
if [[ '{{.REPOSITORY_TYPE}}' == 'ansible' ]] && [[ '{{.REPOSITORY_SUBTYPE}}' == 'role' ]]; then
|
|
echo 'release'
|
|
fi
|
|
RELEASE_DOCKER:
|
|
sh: |
|
|
if [ -f Dockerfile ] && ([[ '{{.REPOSITORY_TYPE}}' == 'docker' ]] || [[ "$(jq -r '.blueprint.dockerPublish' package.json)" == 'true' ]]); then
|
|
echo 'release'
|
|
fi
|
|
RELEASE_GO:
|
|
sh: |
|
|
if [[ '{{.REPOSITORY_TYPE}}' == 'go' ]] && [[ '{{.REPOSITORY_SUBTYPE}}' == 'cli' ]]; then
|
|
echo 'release'
|
|
fi
|
|
RELEASE_NPM:
|
|
sh: |
|
|
if [[ '{{.REPOSITORY_TYPE}}' == 'npm' ]] || [[ "$(jq -r '.blueprint.npmPublish' package.json)" == 'true' ]]; then
|
|
echo 'release'
|
|
fi
|
|
RELEASE_PACKER:
|
|
sh: |
|
|
if [[ '{{.REPOSITORY_TYPE}}' == 'packer' ]]; then
|
|
echo 'release'
|
|
fi
|
|
RELEASE_PYTHON:
|
|
sh: |
|
|
if [[ '{{.REPOSITORY_TYPE}}' == 'python' ]] || [[ "$(jq -r '.blueprint.pythonPublish' package.json)" == 'true' ]]; then
|
|
echo 'release'
|
|
fi
|
|
SNAP_PACKAGE:
|
|
sh: jq -r '.blueprint.snapPackage' package.json
|
|
|
|
tasks:
|
|
add-channel:
|
|
deps:
|
|
- add-channel:ansible
|
|
- add-channel:docker
|
|
- add-channel:npm
|
|
- add-channel:packer
|
|
- add-channel:python
|
|
- add-channel:snap
|
|
summary: |
|
|
Must return a parseable JSON string that resembles the following format:
|
|
|
|
```json
|
|
{
|
|
type: 'patch',
|
|
channel: 'master',
|
|
gitHead: 'c7dbb1e87ebff9b177bdb52a326f5b8373b79442',
|
|
version: '1.1.26',
|
|
gitTag: 'v1.1.26',
|
|
name: 'GitLab release',
|
|
notes: '## [1.1.26](https://gitlab.com/megabyte-labs/npm/configs/release/compare/v1.1.25...v1.1.26) (2022-04-07)\n' +
|
|
'\n' +
|
|
'\n' +
|
|
'\n',
|
|
url: 'https://gitlab.com/megabyte-labs%2Fnpm%2Fconfigs%2Frelease/-/releases/v1.1.26',
|
|
pluginName: '@semantic-release/gitlab'
|
|
}
|
|
```
|
|
|
|
add-channel:ansible:
|
|
vars:
|
|
GALAXY_URL:
|
|
sh: |
|
|
if [ -n "$RELEASE_ANSIBLE" ]; then
|
|
echo "https://galaxy.ansible.com/{{.GALAXY_NAMESPACE}}/{{.GALAXY_ROLE_NAME}}"
|
|
fi
|
|
cmds:
|
|
- |
|
|
echo '{"name": "Ansible Galaxy role", "url": "{{.GALAXY_URL}}"}'
|
|
status:
|
|
- '[ -z "$RELEASE_ANSIBLE" ]'
|
|
|
|
add-channel:docker:
|
|
vars:
|
|
DOCKERHUB_URL:
|
|
sh: |
|
|
if [ -n "$RELEASE_DOCKER" ]; then
|
|
echo "https://hub.docker.com/r/{{.DOCKERHUB_PROFILE}}/$(jq -r '.blueprint.slug' package.json)"
|
|
fi
|
|
cmds:
|
|
- |
|
|
echo '{"name": "DockerHub", "url": "{{.DOCKERHUB_URL}}"}'
|
|
status:
|
|
- '[ -z "$RELEASE_DOCKER" ]'
|
|
|
|
add-channel:npm:
|
|
cmds:
|
|
- |
|
|
echo '{"name": "Testing", "url": "https://megabyte.space"}'
|
|
status:
|
|
- '[ -z "$RELEASE_NPM" ]'
|
|
|
|
add-channel:packer:
|
|
vars:
|
|
VAGRANTUP_URL:
|
|
sh: |
|
|
if [ -n "$RELEASE_PACKER" ]; then
|
|
BASENAME="$(jq -r '.variables.box_basename' template.json)"
|
|
VAGRANTUP_USER="$(jq -r '.variables.vagrantup_user' template.json)"
|
|
if [ "$BASENAME" != 'null' ] && [ "$BASENAME" != 'null' ]; then
|
|
echo "https://app.vagrantup.com/$VAGRANTUP_USER/boxes/$BASENAME"
|
|
else
|
|
echo "https://megabyte.space"
|
|
fi
|
|
fi
|
|
cmds:
|
|
- |
|
|
echo '{"name": "VagrantUp box", "url": "{{.VAGRANTUP_URL}}"}'
|
|
status:
|
|
- '[ -z "$RELEASE_PACKER" ]'
|
|
|
|
add-channel:python:
|
|
vars:
|
|
PYPI_URL:
|
|
sh: |
|
|
if [ -n "$RELEASE_PYTHON" ]; then
|
|
PKG_NAME="$(jq -r '.blueprint.customPyPiPackageName' package.json)"
|
|
if [ "$PKG_NAME" == 'null' ]; then
|
|
PKG_NAME="$(jq -r '.blueprint.customPackageName' package.json)"
|
|
fi
|
|
if [ "$PKG_NAME" == 'null' ]; then
|
|
PKG_NAME="$(jq -r '.name' package.json)"
|
|
fi
|
|
echo "https://pypi.org/project/$PKG_NAME"
|
|
fi
|
|
cmds:
|
|
- |
|
|
echo '{"name": "pip package", "url": "{{.PYPI_URL}}"}'
|
|
status:
|
|
- '[ -z "$RELEASE_PYTHON" ]'
|
|
|
|
add-channel:snap:
|
|
vars:
|
|
SNAP_PACKAGE:
|
|
sh: echo "$SNAP_PACKAGE"
|
|
cmds:
|
|
- |
|
|
echo '{"name": "Snap", "url": "https://snapcraft.io/{{.SNAP_PACKAGE}}"}'
|
|
status:
|
|
- '[ "$SNAP_PACKAGE" == "null" ]'
|
|
|
|
analyze:
|
|
summary: |
|
|
| Command property | Description |
|
|
|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
| `exit code` | Any non `0` code is considered as an unexpected error and will stop the `semantic-release` execution with an error. |
|
|
| `stdout` | Only the release type (`major`, `minor` or `patch` etc..) can be written to `stdout`. If no release has to be done the command must not write to `stdout`. |
|
|
| `stderr` | Can be used for logging. |
|
|
cmds:
|
|
- |
|
|
if [ "$FORCE_SEMANTIC_RELEASE" == 'true' ]; then
|
|
echo 'patch'
|
|
fi
|
|
|
|
build:
|
|
deps:
|
|
- build:ansible
|
|
- build:docker
|
|
- build:go
|
|
- build:npm
|
|
- build:packer
|
|
- build:python
|
|
|
|
build:ansible:
|
|
cmds:
|
|
- task: :build
|
|
status:
|
|
- '[ -z "$RELEASE_ANSIBLE" ]'
|
|
|
|
build:docker:
|
|
cmds:
|
|
- task: :build
|
|
status:
|
|
- '[ -z "$RELEASE_DOCKER" ]'
|
|
|
|
build:go:
|
|
cmds:
|
|
- task: build:go:continue
|
|
status:
|
|
- '[ -z "$RELEASE_GO" ]'
|
|
|
|
build:go:continue:
|
|
deps:
|
|
- build:go:deps
|
|
cmds:
|
|
- task: :build
|
|
|
|
build:go:deps:
|
|
deps:
|
|
- :docker:login
|
|
- :install:go:goreleaser
|
|
- :install:go:nfpm
|
|
- :install:software:go
|
|
- :install:software:snapcraft
|
|
|
|
build:npm:
|
|
deps:
|
|
- build:npm:deps
|
|
cmds:
|
|
- task: :build
|
|
status:
|
|
- '[ -z "$RELEASE_NPM" ]'
|
|
|
|
build:npm:deps:
|
|
deps:
|
|
- build:npm:deps:go
|
|
|
|
build:npm:deps:go:
|
|
cmds:
|
|
- task: build:go:deps
|
|
status:
|
|
- '[ "{{.REPOSITORY_SUBTYPE}}" != "cli" ]'
|
|
|
|
build:packer:
|
|
cmds:
|
|
- task: :build
|
|
status:
|
|
- '[ -z "$RELEASE_PACKER" ]'
|
|
|
|
build:python:
|
|
cmds:
|
|
- task: :build
|
|
status:
|
|
- '[ -z "$RELEASE_PYTHON" ]'
|
|
|
|
fail:
|
|
deps:
|
|
- :install:software:jq
|
|
env:
|
|
ARTIFACTS_JSON:
|
|
sh: jq -r '.' build/artifacts.json || echo null
|
|
METADATA_JSON:
|
|
sh: jq -r '.' build/metadata.json || echo null
|
|
PACKAGE_JSON:
|
|
sh: jq -r '.' package.json
|
|
RELEASE_JSON:
|
|
sh: jq -r '.' .release.json || echo null
|
|
TMP:
|
|
sh: mktemp
|
|
VARIABLES_JSON:
|
|
sh: jq -r '.' .variables.json
|
|
cmds:
|
|
- jq -n --arg artifacts "$ARTIFACTS_JSON" --arg metadata "$METADATA_JSON" --arg pkg "$PACKAGE_JSON" --arg release "$RELEASE_JSON" --arg vars "$VARIABLES_JSON" --arg job "$CI_JOB_ID"
|
|
'.["package.json"] = $pkg | .[".release.json"] = $release | .["build/artifacts.json"] = $artifacts | .["build/metadata.json"] = $metadata | .[".variables.json"] = $vars | .CI_JOB_ID = $job' > "$TMP"
|
|
- >
|
|
curl -X POST -H "Content-Type: application/json" -d "$(cat "$TMP")"
|
|
"https://maker.ifttt.com/trigger/SemanticReleaseFail/json/with/key/$IFTTT_WEBHOOK_TOKEN"
|
|
status:
|
|
- '[ -z "$IFTTT_WEBHOOK_TOKEN" ]'
|
|
|
|
notes:
|
|
cmds:
|
|
- task: notes:introduction
|
|
- task: notes:project-specific
|
|
|
|
notes:ansible:
|
|
vars:
|
|
PKG_NAME:
|
|
sh: |
|
|
if [ -n "$RELEASE_ANSIBLE" ]; then
|
|
echo "{{.GALAXY_NAMESPACE}}.{{.GALAXY_ROLE_NAME}}"
|
|
fi
|
|
VERSION:
|
|
sh: jq -r '.version' package.json
|
|
cmds:
|
|
- echo -e '```shell\nansible-galaxy install {{.PKG_NAME}},v{{.VERSION}}\n```\n'
|
|
status:
|
|
- '[ -z "$RELEASE_ANSIBLE" ]'
|
|
|
|
notes:docker:
|
|
vars:
|
|
IMAGE:
|
|
sh: |
|
|
if [ -n "$RELEASE_DOCKER" ]; then
|
|
echo "{{.DOCKERHUB_PROFILE}}/$(jq -r '.blueprint.slug' package.json)"
|
|
fi
|
|
VERSION:
|
|
sh: jq -r '.version' package.json
|
|
cmds:
|
|
- echo -e '```shell\ndocker pull {{.IMAGE}}:{{.VERSION}}\n```\n'
|
|
status:
|
|
- '[ -z "$RELEASE_DOCKER" ]'
|
|
|
|
notes:go:
|
|
vars:
|
|
GITHUB_GO_URL:
|
|
sh: jq -r '.blueprint.repository.github' package.json | sed 's/https:\/\///'
|
|
VERSION:
|
|
sh: jq -r '.version' package.json
|
|
cmds:
|
|
- echo -e '```shell\ngo install {{.GITHUB_GO_URL}}@v{{.VERSION}}\n```\n'
|
|
status:
|
|
- '[ -z "$RELEASE_GO" ]'
|
|
|
|
notes:introduction:
|
|
cmds:
|
|
- echo -e 'Grab this version by running:\n\n'
|
|
|
|
notes:npm:
|
|
vars:
|
|
FLAG:
|
|
sh: |
|
|
if [ '{{.REPOSITORY_SUBTYPE}}' == 'cli' ]; then
|
|
echo ' -g'
|
|
elif [ '{{.REPOSITORY_SUBTYPE}}' == 'config' ] || [ '{{.REPOSITORY_SUBTYPE}}' == 'plugin' ]; then
|
|
echo ' --save-dev'
|
|
else
|
|
echo ' --save'
|
|
fi
|
|
PKG_NAME:
|
|
sh: jq -r '.name' package.json
|
|
VERSION:
|
|
sh: jq -r '.version' package.json
|
|
cmds:
|
|
- echo -e '```shell\nnpm i{{.FLAG}} {{.PKG_NAME}}@{{.VERSION}}\n```\n'
|
|
status:
|
|
- '[ -z "$RELEASE_NPM" ]'
|
|
|
|
notes:packer:
|
|
vars:
|
|
VAGRANTUP_BOX:
|
|
sh: |
|
|
if [ -n "$RELEASE_PACKER" ]; then
|
|
BASENAME="$(jq -r '.variables.box_basename' template.json)"
|
|
VAGRANTUP_USER="$(jq -r '.variables.vagrantup_user' template.json)"
|
|
if [ "$BASENAME" != 'null' ] && [ "$BASENAME" != 'null' ]; then
|
|
echo "$VAGRANTUP_USER/$BASENAME"
|
|
fi
|
|
fi
|
|
VERSION:
|
|
sh: jq -r '.version' package.json
|
|
cmds:
|
|
- echo -e '```shell\nvagrant init --box-version '{{.VERSION}}' {{.VAGRANTUP_BOX}} && vagrant up\n```\n'
|
|
status:
|
|
- '[ -z "$RELEASE_PACKER" ]'
|
|
|
|
notes:project-specific:
|
|
deps:
|
|
- notes:ansible
|
|
- notes:docker
|
|
- notes:go
|
|
- notes:npm
|
|
- notes:packer
|
|
- notes:python
|
|
|
|
notes:python:
|
|
vars:
|
|
PKG_NAME:
|
|
sh: |
|
|
if [ -n "$RELEASE_PYTHON" ]; then
|
|
PKG_NAME="$(jq -r '.blueprint.customPyPiPackageName' package.json)"
|
|
if [ "$PKG_NAME" == 'null' ]; then
|
|
PKG_NAME="$(jq -r '.blueprint.customPackageName' package.json)"
|
|
fi
|
|
if [ "$PKG_NAME" == 'null' ]; then
|
|
PKG_NAME="$(jq -r '.name' package.json)"
|
|
fi
|
|
echo "$PKG_NAME"
|
|
fi
|
|
VERSION:
|
|
sh: jq -r '.version' package.json
|
|
cmds:
|
|
- echo -e '```shell\npip3 install {{.PKG_NAME}}=={{.VERSION}}\n```\n'
|
|
status:
|
|
- '[ -z "$RELEASE_PYTHON" ]'
|
|
|
|
prepare:
|
|
deps:
|
|
- prepare:ansible
|
|
- prepare:docker
|
|
- prepare:go
|
|
- prepare:npm
|
|
- prepare:packer
|
|
- prepare:python
|
|
summary: |
|
|
| Command property | Description |
|
|
|------------------|---------------------------------------------------------------------------------------------------------------------|
|
|
| `exit code` | Any non `0` code is considered as an unexpected error and will stop the `semantic-release` execution with an error. |
|
|
| `stdout` | Can be used for logging. |
|
|
| `stderr` | Can be used for logging. |
|
|
|
|
prepare:ansible:
|
|
cmds:
|
|
- task: :ansible:prepare
|
|
status:
|
|
- '[ -z "$RELEASE_ANSIBLE" ]'
|
|
|
|
prepare:docker:
|
|
cmds:
|
|
- task: :docker:prepare
|
|
status:
|
|
- '[ -z "$RELEASE_DOCKER" ]'
|
|
|
|
prepare:go:
|
|
cmds:
|
|
- task: :go:prepare
|
|
status:
|
|
- '[ -z "$RELEASE_GO" ]'
|
|
|
|
prepare:npm:
|
|
cmds:
|
|
- task: :npm:prepare
|
|
status:
|
|
- '[ -z "$RELEASE_NPM" ]'
|
|
|
|
prepare:packer:
|
|
cmds:
|
|
- task: :packer:prepare
|
|
status:
|
|
- '[ -z "$RELEASE_PACKER" ]'
|
|
|
|
prepare:python:
|
|
cmds:
|
|
- task: :python:prepare
|
|
status:
|
|
- '[ -z "$RELEASE_PYTHON" ]'
|
|
|
|
publish:
|
|
deps:
|
|
- publish:ansible
|
|
- publish:docker
|
|
- publish:go
|
|
- publish:npm
|
|
- publish:packer
|
|
- publish:python
|
|
|
|
publish:ansible:
|
|
cmds:
|
|
- task: :ansible:publish
|
|
status:
|
|
- '[ -z "$RELEASE_ANSIBLE" ]'
|
|
|
|
publish:docker:
|
|
cmds:
|
|
- task: :docker:publish
|
|
status:
|
|
- '[ -z "$RELEASE_DOCKER" ]'
|
|
|
|
publish:go:
|
|
cmds:
|
|
- task: :go:publish
|
|
status:
|
|
- '[ -z "$RELEASE_GO" ]'
|
|
|
|
publish:npm:
|
|
summary: |
|
|
Modify the dist tag used (shown in release notes) by modifying `package.json` with the following:
|
|
|
|
```
|
|
{
|
|
"publishConfig": {
|
|
"registry": "https://registry.npmjs.org/",
|
|
"tag": "latest"
|
|
}
|
|
```
|
|
cmds:
|
|
- task: publish:npm:tasks
|
|
status:
|
|
- '[ -z "$RELEASE_NPM" ]'
|
|
|
|
publish:npm:latest:
|
|
vars:
|
|
PKG_NAME:
|
|
sh: jq -r '.name' package.json
|
|
VERSION:
|
|
sh: jq -r '.version' package.json
|
|
cmds:
|
|
- npm config set -- 'https://registry.npmjs.org/:_authToken' '${NPM_TOKEN}'
|
|
- npm dist-tag add {{.PKG_NAME}}@{{.VERSION}} latest &> /dev/null
|
|
|
|
publish:npm:tasks:
|
|
deps:
|
|
- publish:npm:latest
|
|
- :npm:publish:gitlab
|
|
|
|
publish:packer:
|
|
cmds:
|
|
- task: :packer:publish
|
|
status:
|
|
- '[ -z "$RELEASE_PACKER" ]'
|
|
|
|
publish:python:
|
|
cmds:
|
|
- task: :python:publish
|
|
status:
|
|
- '[ -z "$RELEASE_PYTHON" ]'
|
|
|
|
success:
|
|
deps:
|
|
- :install:software:jq
|
|
summary: |
|
|
| Command property | Description |
|
|
|------------------|---------------------------------------------------------------------------------------------------------------------|
|
|
| `exit code` | Any non `0` code is considered as an unexpected error and will stop the `semantic-release` execution with an error. |
|
|
| `stdout` | Can be used for logging. |
|
|
| `stderr` | Can be used for logging. |
|
|
env:
|
|
PACKAGE_JSON:
|
|
sh: jq -r '.' package.json
|
|
RELEASE_JSON:
|
|
sh: jq -r '.' .release.json
|
|
TMP:
|
|
sh: mktemp
|
|
VARIABLES_JSON:
|
|
sh: jq -r '.' .variables.json
|
|
cmds:
|
|
- jq -n --arg pkg "$PACKAGE_JSON" --arg release "$RELEASE_JSON" --arg vars "$VARIABLES_JSON"
|
|
'.["package.json"] = $pkg | .[".release.json"] = $release | .[".variables.json"] = $vars' > "$TMP"
|
|
- >
|
|
curl -X POST -H "Content-Type: application/json" -d "$(cat "$TMP")"
|
|
"https://maker.ifttt.com/trigger/SemanticRelease/json/with/key/$IFTTT_WEBHOOK_TOKEN"
|
|
status:
|
|
- '[ -z "$IFTTT_WEBHOOK_TOKEN" ]'
|
|
|
|
verify:conditions:
|
|
deps:
|
|
- verify:conditions:ansible
|
|
- verify:conditions:docker
|
|
- verify:conditions:go
|
|
- verify:conditions:npm
|
|
- verify:conditions:packer
|
|
- verify:conditions:python
|
|
summary: |
|
|
| Command property | Description |
|
|
|------------------|--------------------------------------------------------------------------|
|
|
| `exit code` | `0` if the verification is successful, or any other exit code otherwise. |
|
|
| `stdout` | Write only the reason for the verification to fail. |
|
|
| `stderr` | Can be used for logging. |
|
|
|
|
verify:conditions:ansible:
|
|
cmds:
|
|
- task: :ansible:verify
|
|
status:
|
|
- '[ -z "$RELEASE_ANSIBLE" ]'
|
|
|
|
verify:conditions:docker:
|
|
cmds:
|
|
- task: :docker:verify
|
|
status:
|
|
- '[ -z "$RELEASE_DOCKER" ]'
|
|
|
|
verify:conditions:go:
|
|
cmds:
|
|
- task: :go:verify
|
|
status:
|
|
- '[ -z "$RELEASE_GO" ]'
|
|
|
|
verify:conditions:npm:
|
|
cmds:
|
|
- task: :npm:verify
|
|
status:
|
|
- '[ -z "$RELEASE_NPM" ]'
|
|
|
|
verify:conditions:packer:
|
|
cmds:
|
|
- task: :packer:verify
|
|
status:
|
|
- '[ -z "$RELEASE_PACKER" ]'
|
|
|
|
verify:conditions:python:
|
|
cmds:
|
|
- task: :python:verify
|
|
status:
|
|
- '[ -z "$RELEASE_PYTHON" ]'
|
|
|
|
verify:release:
|
|
deps:
|
|
- verify:release:ansible
|
|
- verify:release:docker
|
|
- verify:release:go
|
|
- verify:release:npm
|
|
- verify:release:packer
|
|
- verify:release:python
|
|
summary: |
|
|
| Command property | Description |
|
|
|------------------|--------------------------------------------------------------------------|
|
|
| `exit code` | `0` if the verification is successful, or any other exit code otherwise. |
|
|
| `stdout` | Only the reason for the verification to fail can be written to `stdout`. |
|
|
| `stderr` | Can be used for logging. |
|
|
|
|
verify:release:ansible:
|
|
cmds:
|
|
- 'true'
|
|
status:
|
|
- '[ -z "$RELEASE_ANSIBLE" ]'
|
|
|
|
verify:release:docker:
|
|
cmds:
|
|
- 'true'
|
|
status:
|
|
- '[ -z "$RELEASE_DOCKER" ]'
|
|
|
|
verify:release:go:
|
|
cmds:
|
|
- 'true'
|
|
status:
|
|
- '[ -z "$RELEASE_GO" ]'
|
|
|
|
verify:release:npm:
|
|
cmds:
|
|
- 'true'
|
|
status:
|
|
- '[ -z "$RELEASE_NPM" ]'
|
|
|
|
verify:release:packer:
|
|
cmds:
|
|
- 'true'
|
|
status:
|
|
- '[ -z "$RELEASE_PACKER" ]'
|
|
|
|
verify:release:python:
|
|
cmds:
|
|
- 'true'
|
|
status:
|
|
- '[ -z "$RELEASE_PYTHON" ]'
|