Files

195 lines
7.4 KiB
YAML

---
name: "release-please-manifest-action"
description: >-
Opinionated action for running release-please in manifest mode with optional
support to authenticate as a GitHub App.
author: "jimeh"
inputs:
token:
description: "GitHub token used to authenticate."
default: ${{ github.token }}
app-id:
description: >-
ID of the GitHub App to use for authentication. If set, takes precedence
over token input.
private-key:
description: >-
Private key of the GitHub App (can be Base64 encoded). Required when
app-id is provided.
installation-retrieval-mode:
description: >-
When using app authentication, the mode used to retrieve the installation
for which the token will be requested. For more information, see:
https://github.com/tibdex/github-app-token/blob/v2/action.yml
default: repository
installation-retrieval-payload:
description: >-
When using app authentication, the payload used to retrieve the
installation. For more information, see:
https://github.com/tibdex/github-app-token/blob/v2/action.yml
default: ${{ github.repository }}
repositories:
description: >-
When using app authentication, the JSON-stringified array of the full names
of the repositories the token should have access to. Defaults to all
repositories that the installation can access. See
https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#create-an-installation-access-token-for-an-app's
`repositories`.
permissions:
description: >-
JSON-stringified permissions granted to the app token. Defaults to all the
GitHub app permissions, see:
https://docs.github.com/en/rest/apps/apps#create-an-installation-access-token-for-an-app
github-api-url:
description: >-
Configure github API URL. Default `https://api.github.com`
default: ${{ github.api_url }}
github-graphql-url:
description: >-
Configure github GraphQL URL. Default `https://api.github.com/graphql`
default: ${{ github.graphql_url }}
repository:
description: >-
The full name of the repository to operate on in owner/repo format.
Defaults to the current repository.
default: ${{ github.repository }}
target-branch:
description: >-
Branch to open pull release PR against. Defaults to the repository's
default branch.
default: ""
target-branch-pattern:
description: >-
Regular expression pattern to determine if current ref name is a target
branch or not. When specified, the action will only run if the current
ref name matches the pattern, and the current ref name will be used as the
target branch. When not specified, the action will always run, and target
the specified target-branch, or the repository's default branch if
target-branch is not specified.
default: ""
config-file:
description: Path to config file within the project.
default: ".github/release-please-config.json"
manifest-file:
description: Path to manifest file within the project.
default: ".github/.release-please-manifest.json"
outputs:
release_created:
description: "Whether or not a release was created."
value: ${{ steps.release-please.outputs.release_created }}
upload_url:
description: "Release upload URL."
value: ${{ steps.release-please.outputs.upload_url }}
html_url:
description: "Release URL."
value: ${{ steps.release-please.outputs.html_url }}
tag_name:
description: "Release tag name."
value: ${{ steps.release-please.outputs.tag_name }}
version:
description: "Version that was released."
value: ${{ steps.release-please.outputs.version }}
major:
description: "Major version that was released."
value: ${{ steps.release-please.outputs.major }}
minor:
description: "Minor version that was released."
value: ${{ steps.release-please.outputs.minor }}
patch:
description: "Patch version that was released."
value: ${{ steps.release-please.outputs.patch }}
sha:
description: "Release SHA."
value: ${{ steps.release-please.outputs.sha }}
pr:
description: "Pull request number."
value: ${{ steps.release-please.outputs.pr }}
path:
description: "Path that was released."
value: ${{ steps.release-please.outputs.path }}
releases_created:
description: "Whether or not a release was created."
value: ${{ steps.release-please.outputs.releases_created }}
paths_released:
description: "Paths that were released."
value: ${{ steps.release-please.outputs.paths_released }}
id:
description: "Release ID."
value: ${{ steps.release-please.outputs.id }}
name:
description: "Release name."
value: ${{ steps.release-please.outputs.name }}
body:
description: "Release body."
value: ${{ steps.release-please.outputs.body }}
draft:
description: "Whether or not the release is a draft."
value: ${{ steps.release-please.outputs.draft }}
prs_created:
description: "Whether or not a pull request was created."
value: ${{ steps.release-please.outputs.prs_created }}
pr_number:
description: "Pull request number that created the release."
value: ${{ steps.release-please.outputs.prNumber }}
prs:
description: "Pull request numbers."
value: ${{ steps.release-please.outputs.prs }}
raw:
description: "All outputs from release-please action as a JSON string."
value: ${{ toJSON(steps.release-please.outputs) }}
runs:
using: "composite"
steps:
- name: prepare
shell: bash
id: prepare
run: |
if [[ -n "$TARGET_BRANCH_PATTERN" ]]; then
if [[ "$GITHUB_REF_NAME" =~ $TARGET_BRANCH_PATTERN ]]; then
RUN="true"
TARGET="$GITHUB_REF_NAME"
fi
else
RUN="true"
fi
echo "target_branch=${TARGET:-$TARGET_BRANCH}" >> "$GITHUB_OUTPUT"
echo "run=${RUN:-false}" >> "$GITHUB_OUTPUT"
env:
TARGET_BRANCH: "${{ inputs.target-branch }}"
TARGET_BRANCH_PATTERN: "${{ inputs.target-branch-pattern }}"
- uses: tibdex/github-app-token@v2
if: steps.prepare.outputs.run == 'true' && inputs.app-id != null && inputs.app-id != ''
id: github-app-token
with:
app_id: ${{ inputs.app-id }}
github_api_url: ${{ inputs.github-api-url }}
installation_retrieval_mode: ${{ inputs.installation-retrieval-mode }}
installation_retrieval_payload: ${{ inputs.installation-retrieval-payload }}
permissions: ${{ inputs.permissions }}
private_key: ${{ inputs.private-key }}
repositories: ${{ inputs.repositories }}
revoke: true
- name: resolve token
if: steps.prepare.outputs.run == 'true'
id: token
shell: bash
run: |-
echo "token=${APP_TOKEN:-$INPUT_TOKEN}" >> "$GITHUB_OUTPUT"
env:
APP_TOKEN: "${{ steps.github-app-token.outputs.token }}"
INPUT_TOKEN: "${{ inputs.token }}"
- uses: googleapis/release-please-action@v4
if: steps.prepare.outputs.run == 'true'
id: release-please
with:
token: ${{ steps.token.outputs.token }}
target-branch: ${{ steps.prepare.outputs.target_branch }}
config-file: ${{ inputs.config-file }}
manifest-file: ${{ inputs.manifest-file }}
github-api-url: ${{ inputs.github-api-url }}
github-graphql-url: ${{ inputs.github-graphql-url }}
repo-url: ${{ inputs.repository }}