Open
Description
Description
Current GitHub action has some inputs, then it does something, but it has not usable outputs to check what the results were.
As a user of the GitHub action, i want several outputs, so that i can use them programmatically in GitHub workflows.
- released: bool(-ish) value that indicates whether a released happened
- version: (new) semantic version that was calculated. if
released
wasfalse
than this would be the current version detected. - tag: VCS tag-name was used for the release. if
released
wasfalse
than this would be empty string. - url: Github.com URL for the release. if
released
isfalse
, then this value is empty string - id: Release ID. if
released
isfalse
, then this value isnull
- assets: JSON array containing information about each uploaded asset, in the format given here (minus the uploader field). if
released
isfalse
, then this value is an empty JSON list - assets-dist: JSON object containing information about each uploaded dist asset, in the format given here (minus the uploader field). if
released
isfalse
, then this value is an empty JSON object - upload_url: URL for uploading assets to the release. if
released
isfalse
, then this value is an empty string
output inspired by https://github.com/softprops/action-gh-release
Use cases
- released: python-semantic-release GitHub action might detect that no release should happen. To indicate this, you can check this value. As an example, you can use
${{ steps.<step-id>.outputs.released }}
to check if a release happened and control other steps based on that information. For example, a DockerHub release can be skipped, if python-semantic-release did not happen, although the GitHub action ended withsuccess()
state. - version: As an example, you can use
${{ steps.<step-id>.outputs.version }}
to get the version that was currently detected/used for the release. - tag: As an example, you can use
${{ steps.<step-id>.outputs.tag }}
as an input for https://github.com/marketplace/actions/upload-files-to-a-github-release - assets: As an example, you can use
${{ fromJSON(steps.<step-id>.outputs.assets-dist)[0].browser_download_url }}
to get the download URL of the first asset. This file can then be downloaded and put in a docker image. - asset-dist: As an example, you can use
${{ fromJSON(steps.<step-id>.outputs.assets-dist).wheel.browser_download_url }}
to get the download URL of the wheel-dist asset. This file can then be downloaded and put in a docker image. - upload_url: As an example, you can use
${{ steps.<step-id>.outputs.upload_url }}
as an input for https://github.com/actions/upload-release-asset
Possible implementation
- outputs can be defined in the https://github.com/relekang/python-semantic-release/blob/master/action.yml
- output can be issued via workflow commands on stdOut - see https://docs.github.com/en/actions/learn-github-actions/workflow-commands-for-github-actions
alaprint('::set-output name=version::1.2.3')
- maybe there is a lib for that, or the sanitizers can be copied from https://github.com/actions/toolkit/blob/daf8bb00606d37ee2431d9b1596b88513dcf9c59/packages/core/src/command.ts#L80-L94 - output
released
should be booleantrue
/`` so it is usable in expressions
Therefore, it seems like GitHub expression treats every non-empty string as true and empty string as false. - to print the needed output for "workflow commands" only when run in GitHub action, the code could check if a certain environment variable is present in GitHub action only. Maybe have an extra log-stream just for "workflow commands" that is dis/enabled based on the env
- detection that run in a GitHub action can be done via env vars that are set by GitHub actions anyway:
/usr/bin/docker run .... -e GITHUB_ACTIONS=true -e CI=true ....