Skip to content

Commit

Permalink
Add github action for getting version info and making releases
Browse files Browse the repository at this point in the history
  • Loading branch information
drewcassidy committed Aug 20, 2024
1 parent d6da31b commit 80e35de
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 1 deletion.
76 changes: 76 additions & 0 deletions action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: 'Hello World'
description: 'Greet someone'

inputs:
markdown:
description: If outputs should be in markdown format or not
default: 'true'

release:
description: >
Creates a new release and commits it if set. Directly passed to the arguments of `yaclog release`.
Can be a version number or an increment tag like `--major`, `--minor`, or `--patch`.
The resulting commit and tag will be pushed back to the repo, but the workflow must have write permissions.
Add
```yaml
permissions:
contents: write
```
to your workflow to allow this.
outputs:
name:
description: "The current version name. For example, `Version 1.3.0`"
value: ${{ steps.yaclog-show.outputs.name}}
header:
description: "The entire header for the current version. For example, `Version 1.3.0 - 2024-08-08`"
value: ${{ steps.yaclog-show.outputs.header }}
version:
description: "The current version number. For example, `1.3.0`"
value: ${{ steps.yaclog-show.outputs.version }}
body_file:
description: "Path to a temporary file containing the version body"
value: ${{ steps.yaclog-show.outputs.body_file }}
changelog:
description: "Path to the entire changelog file."
value: ${{ steps.yaclog-show.outputs.changelog }}

runs:
using: "composite"
steps:
- id: setup-python
uses: actions/setup-python@v5
with:
python-version: '3.10'

- name: Setup Yaclog
shell: bash
run: python -m pip install ${{ github.action_path }}

- name: Create New Release
shell: bash
if: ${{ inputs.release }}
run: yaclog release --yes --commit ${{ inputs.release }}

- name: Get Version Information
id: yaclog-show
shell: bash
run: |
yaclog show ---gh-actions ${{ inputs.markdown && '--markdown' }} >> "$GITHUB_OUTPUT"
# output like so:
# name=Version 1.3.0
# header=Version 1.3.0 - 2024-08-08
# version=1.3.0
# body_file={path to file containing version body}
# changelog={path to changelog}
- name: Push Changes
if: ${{ inputs.release }}
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: |
git config --global user.name "github-actions"
git config --global user.email "[email protected]"
git push
git push --tags
17 changes: 16 additions & 1 deletion yaclog/cli/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,10 @@ def reformat(obj: Changelog):
help='Show only the version header.')
@click.option('--version', '-v', 'mode', flag_value='version', help='Show only the version number. If the current version is unreleased, '
'this is inferred by incrementing the patch number of the last released version')
@click.option('---gh-actions', 'gh_actions', is_flag=True, hidden=True)
@click.argument('version_names', metavar='VERSIONS', type=str, nargs=-1)
@click.pass_obj
def show(obj: Changelog, all_versions, markdown, mode, version_names):
def show(obj: Changelog, all_versions, markdown, mode, version_names, gh_actions):
"""
Show the changes for VERSIONS.
Expand Down Expand Up @@ -110,6 +111,20 @@ def show(obj: Changelog, all_versions, markdown, mode, version_names):
raise click.ClickException(str(v))

sep = '\n\n' if mode == 'body' or mode == 'full' else '\n'

if gh_actions:
import tempfile

all_modes = [ 'name', 'header', 'version' ]
outputs = [f'{mode}={sep.join([functions[mode](v, kwargs) for v in versions])}' for mode in all_modes]
click.echo('\n'.join(outputs))
body_fd, body_file = tempfile.mkstemp(text=True)
with os.fdopen(body_fd, 'w') as f:
f.write(sep.join([functions['body'](v, kwargs) for v in versions]))
click.echo(f'body_file={body_file}')
click.echo(f'changelog={obj.path}')
return

click.echo(sep.join([str_func(v, kwargs) for v in versions]))


Expand Down

0 comments on commit 80e35de

Please sign in to comment.