Skip to content

Commit

Permalink
Revert "feat(action): use composite action for semantic release (#692)"
Browse files Browse the repository at this point in the history
This reverts commit 4648d87.
  • Loading branch information
bernardcooke53 committed Oct 24, 2023
1 parent 9c5bbe0 commit f145257
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 48 deletions.
24 changes: 24 additions & 0 deletions Dockerfile
@@ -0,0 +1,24 @@
# This Dockerfile is only for GitHub Actions
FROM python:3.10-bullseye

RUN set -ex; \
apt-get update; \
apt-get install -y --no-install-recommends \
git-lfs

# install backported stable version of git, which supports ssh signing
RUN echo "deb http://deb.debian.org/debian bullseye-backports main" >> /etc/apt/sources.list; \
apt-get update;\
apt-get install -y git/bullseye-backports

ENV PYTHONPATH /semantic-release

COPY . /semantic-release

RUN cd /semantic-release && \
python -m venv /semantic-release/.venv && \
/semantic-release/.venv/bin/pip install .

RUN /semantic-release/.venv/bin/python -m semantic_release --help

ENTRYPOINT ["/semantic-release/action.sh"]
47 changes: 31 additions & 16 deletions action.sh
Expand Up @@ -24,8 +24,19 @@ eval_boolean_action_input() {
}

# Copy inputs into correctly-named environment variables
source ~/semantic-release/.venv/bin/activate
export GH_TOKEN="${INPUT_GITHUB_TOKEN}"
export PATH="${PATH}:/semantic-release/.venv/bin"
export GIT_COMMITTER_NAME="${INPUT_GIT_COMMITTER_NAME:="github-actions"}"
export GIT_COMMITTER_EMAIL="${INPUT_GIT_COMMITTER_EMAIL:="github-actions@github.com"}"
export SSH_PRIVATE_SIGNING_KEY="${INPUT_SSH_PRIVATE_SIGNING_KEY}"
export SSH_PUBLIC_SIGNING_KEY="${INPUT_SSH_PUBLIC_SIGNING_KEY}"
export GIT_COMMIT_AUTHOR="${GIT_COMMITTER_NAME} <${GIT_COMMITTER_EMAIL}>"
export ROOT_OPTIONS="${INPUT_ROOT_OPTIONS:="-v"}"
export PRERELEASE="${INPUT_PRERELEASE:="false"}"
export COMMIT="${INPUT_COMMIT:="false"}"
export PUSH="${INPUT_PUSH:="false"}"
export CHANGELOG="${INPUT_CHANGELOG:="false"}"
export VCS_RELEASE="${INPUT_VCS_RELEASE:="false"}"

# Convert inputs to command line arguments
export ARGS=()
Expand All @@ -38,24 +49,28 @@ ARGS+=("$(eval_boolean_action_input "vcs_release" "$VCS_RELEASE" "--vcs-release"
# Handle --patch, --minor, --major
# https://stackoverflow.com/a/47541882
valid_force_levels=("patch" "minor" "major")
if [ -z "$FORCE" ]; then
if [ -z "$INPUT_FORCE" ]; then
true # do nothing if 'force' input is not set
elif printf '%s\0' "${valid_force_levels[@]}" | grep -Fxzq "$FORCE"; then
ARGS+=("--$FORCE")
elif printf '%s\0' "${valid_force_levels[@]}" | grep -Fxzq "$INPUT_FORCE"; then
ARGS+=("--$INPUT_FORCE")
else
printf "Error: Input 'force' must be one of: %s\n" "${valid_force_levels[@]}" >&2
fi

if [ -n "$BUILD_METADATA" ]; then
ARGS+=("--build-metadata $BUILD_METADATA")
if [ -n "$INPUT_BUILD_METADATA" ]; then
ARGS+=("--build-metadata $INPUT_BUILD_METADATA")
fi

# Change to configured directory
cd "${DIRECTORY}"
cd "${INPUT_DIRECTORY}"

# Set Git details
git config user.name "$GIT_COMMITTER_NAME"
git config user.email "$GIT_COMMITTER_EMAIL"
git config --global user.name "$GIT_COMMITTER_NAME"
git config --global user.email "$GIT_COMMITTER_EMAIL"

# See https://github.com/actions/runner-images/issues/6775#issuecomment-1409268124
# and https://github.com/actions/runner-images/issues/6775#issuecomment-1410270956
git config --system --add safe.directory "*"

if [[ -n $SSH_PUBLIC_SIGNING_KEY && -n $SSH_PRIVATE_SIGNING_KEY ]]; then
echo "SSH Key pair found, configuring signing..."
Expand All @@ -67,16 +82,16 @@ if [[ -n $SSH_PUBLIC_SIGNING_KEY && -n $SSH_PRIVATE_SIGNING_KEY ]]; then
chmod 600 ~/.ssh/signing_key && chmod 600 ~/.ssh/signing_key.pub
eval "$(ssh-agent)"
ssh-add ~/.ssh/signing_key
git config gpg.format ssh
git config user.signingKey ~/.ssh/signing_key
git config commit.gpgsign true
git config user.email $GIT_COMMITTER_EMAIL
git config user.name $GIT_COMMITTER_NAME
git config --global gpg.format ssh
git config --global user.signingKey ~/.ssh/signing_key
git config --global commit.gpgsign true
git config --global user.email $GIT_COMMITTER_EMAIL
git config --global user.name $GIT_COMMITTER_NAME
touch ~/.ssh/allowed_signers
echo "$GIT_COMMITTER_EMAIL $SSH_PUBLIC_SIGNING_KEY" >~/.ssh/allowed_signers
git config gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers
git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers
fi

# Run Semantic Release
~/semantic-release/.venv/bin/python \
/semantic-release/.venv/bin/python \
-m semantic_release ${ROOT_OPTIONS} version ${ARGS[@]}
35 changes: 3 additions & 32 deletions action.yml
Expand Up @@ -21,7 +21,7 @@ inputs:
required: false
git_committer_email:
description: "The email address for the “committer” field"
default: "action@github.com"
default: "github-actions@github.com"
required: false
ssh_public_signing_key:
description: "The ssh public key used to sign commits"
Expand Down Expand Up @@ -88,46 +88,17 @@ inputs:
outputs:
released:
value: ${{ steps.semrel.outputs.released }}
description: |
"true" if a release was made, "false" otherwise
version:
value: ${{ steps.semrel.outputs.released }}
description: |
The newly released version if one was made, otherwise the current version
tag:
value: ${{ steps.semrel.outputs.tag }}
description: |
The Git tag corresponding to the version output
runs:
using: "composite"
steps:
- run: echo "${{ github.action_path }}" >> $GITHUB_PATH
shell: bash
- run: |
python -m venv ~/semantic-release/.venv
source ~/semantic-release/.venv/bin/activate
pip install python-semantic-release
semantic-release --help
shell: bash
- run: action.sh
id: semrel
shell: bash
env:
GH_TOKEN: ${{ inputs.github_token }}
GIT_COMMITTER_NAME: ${{ inputs.git_committer_name }}
GIT_COMMITTER_EMAIL: ${{ inputs.git_committer_email }}
SSH_PRIVATE_SIGNING_KEY: ${{ inputs.ssh_private_signing_key }}
SSH_PUBLIC_SIGNING_KEY: ${{ inputs.ssh_public_signing_key }}
ROOT_OPTIONS: ${{ inputs.root_options }}
PRERELEASE: ${{ inputs.prerelease }}
COMMIT: ${{ inputs.commit }}
PUSH: ${{ inputs.push }}
CHANGELOG: ${{ inputs.changelog }}
VCS_RELEASE: ${{ inputs.vcs_release }}
FORCE: ${{ inputs.force }}
BUILD_METADATA: ${{ inputs.build_metadata }}
DIRECTORY: ${{ inputs.directory }}
using: "docker"
image: "Dockerfile"

0 comments on commit f145257

Please sign in to comment.