Skip to content

Commit

Permalink
Document how action works
Browse files Browse the repository at this point in the history
  • Loading branch information
drewcassidy committed Aug 25, 2024
1 parent 76d2d55 commit bc6d0e1
Show file tree
Hide file tree
Showing 6 changed files with 167 additions and 27 deletions.
13 changes: 7 additions & 6 deletions .github/workflows/python-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,11 @@ jobs:
password: ${{ secrets.PYPI_API_TOKEN }}

- name: Publish to Github
uses: softprops/action-gh-release@v2
with:
files: dist/*
name: ${{ steps.yaclog-show.outputs.name }}
body_path: ${{ steps.yaclog-show.outputs.body_file }}
run: |
gh release create ${{ github.ref_name }} \
--notes-file "${{ steps.yaclog-show.outputs.body_file }}" \
--title "${{ steps.yaclog-show.outputs.name }}"
gh release upload ${{ github.ref_name }} dist/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_TOKEN: ${{ github.token }}
21 changes: 2 additions & 19 deletions action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,7 @@ inputs:
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.
The resulting commit and tag will NOT be pushed back to the repo. You must add a step to do this yourself
outputs:
name:
Expand Down Expand Up @@ -68,15 +62,4 @@ runs:
# 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
# changelog={path to changelog}
17 changes: 15 additions & 2 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

from pkg_resources import get_distribution
from importlib.metadata import version

# -- Path setup --------------------------------------------------------------

Expand All @@ -22,8 +22,9 @@
project = 'Yaclog'
copyright = '2021, Andrew Cassidy'
author = 'Andrew Cassidy'
release = get_distribution('yaclog').version
release = version('yaclog')
version = '.'.join(release.split('.')[:3])
ref = version if len(release.split('.')) == 3 else 'main'

# -- General configuration ---------------------------------------------------

Expand All @@ -36,9 +37,13 @@
'sphinx_rtd_theme',
'sphinx.ext.autodoc',
'sphinx.ext.intersphinx',
'sphinx_jinja'
]

myst_heading_anchors = 2
myst_enable_extensions = [
"colon_fence"
]

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
Expand Down Expand Up @@ -76,6 +81,8 @@
'undoc-members': True,
}



# -- Options for Intersphinx -------------------------------------------------

# This config value contains the locations and names of other projects that
Expand All @@ -85,3 +92,9 @@
'python': ('https://docs.python.org/3', None),
'packaging': ('https://packaging.pypa.io/en/latest/', None),
}

jinja_globals = {
'version': version,
'release': release,
'ref': ref,
}
141 changes: 141 additions & 0 deletions docs/handbook/github_actions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# Github Actions

Yaclog makes an action available for Github Actions and compatible CI systems.

## The Yaclog Action

To use the Yaclog action add the following to your workflow steps

````{jinja}
```yaml
- name: Get version info
uses: drewcassidy/yaclog@{{ ref }}
id: yaclog
```
````

### Inputs

```{confval} release
:type: string
When set, creates a new release and commits it. Directly passed to the arguments of `yaclog release --yes --commit`.
Can be a version number or an increment tag like `--major`, `--minor`, or `--patch`.
The resulting commit and tag will NOT be pushed back to the repo. You must add a step to do this yourself
```

```{confval} markdown
:type: boolean
:default: true
If the output should be in markdown format or not. Equivalent to the `--markdown` flag
```

### Outputs

```{confval} version
The current version number, equivalent to the output of `yaclog show --version`. For example, `1.3.1`
```

```{confval} name
The most recent version name, equivalent to the output of `yaclog show --name`. For example, `Version 1.3.0`
```

```{confval} header
The entire header for the most recent version, equivalent to the output of `yaclog show --header`. For example, `Version 1.3.0 - 2024-08-08`
```

```{confval} body_file
The path to a temporary file containing the body of the most recent version. Contents equivalent to `yaclog show --body`
```

```{confval} changelog
The path to the changelog file. Usually `CHANGELOG.md` in the current directory.
```

## Example Usage

### Get changelog information in your Build workflow

````{jinja}
```yaml
name: Build
on:
push:
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Mod Repo
uses: actions/checkout@v4
- uses: drewcassidy/yaclog@{{ ref }}
id: yaclog
# Your build and test actions go here
- name: Publish to Github
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
run: |
gh release create {{ '${{ github.ref_name }}' }} \
--notes-file "{{ '${{ steps.yaclog.outputs.body_file }}' }}" \
--title "{{ '${{ steps.yaclog.outputs.name }}' }}"
env:
GH_TOKEN: {{ '${{ github.token }}' }}
```
````

### Workflow to make a new release

If you want to be able to create a new release for your project directly from the Github UI, you can make a new workflow
you can dispatch directly.

Please note that this workflow does NOT create any releases in Github or any package managers. Instead, your normal build workflow should do this when it detects a push to a tag.

````{jinja}
```yaml
name: Release
on:
workflow_dispatch:
inputs:
release:
description: 'type of release to use'
required: true
default: 'patch'
type: choice
options:
- major
- minor
- patch
permissions:
contents: write
jobs:
yaclog-release:
runs-on: ubuntu-latest
steps:
- name: Checkout Mod Repo
uses: actions/checkout@v4
- name: Yaclog Release
uses: drewcassidy/yaclog@{{ ref }}
with:
release: '--{{ '${{ inputs.release }}' }}'
- name: Push Changes
run: |
git config --global user.name "github-actions"
git config --global user.email "[email protected]"
git push
git push --tags
env:
GH_TOKEN: {{ '${{ github.token }}' }}
```
````
1 change: 1 addition & 0 deletions docs/handbook/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ maxdepth: 3
getting_started
changelog_files
commands
github_actions
```
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ docs = [
"sphinx-click >= 2.7",
"sphinx-rtd-theme",
"myst-parser >= 0.14",
"sphinx-jinja >=1.2.1",
]

[project.scripts]
Expand Down

0 comments on commit bc6d0e1

Please sign in to comment.