120 lines
3.7 KiB
YAML
120 lines
3.7 KiB
YAML
name: 'Commit and push if the version file has changed'
|
|
|
|
inputs:
|
|
name:
|
|
description: 'The name of the commiter'
|
|
required: true
|
|
default: 'github-actions[bot]'
|
|
email:
|
|
description: 'The email of the commiter'
|
|
required: true
|
|
default: 'github-actions[bot]@users.noreply.github.com'
|
|
message:
|
|
description: 'The commit message'
|
|
required: true
|
|
default: 'New release version(s)'
|
|
files:
|
|
description: 'The file(s) to add in the commit'
|
|
required: true
|
|
default: '*'
|
|
directory:
|
|
description: 'The directory in which the action will be performed'
|
|
required: true
|
|
default: '.'
|
|
src_branch:
|
|
description: 'Checkout (or create) a specific branch before commit/push. Defaults to current branch'
|
|
required: false
|
|
default: ''
|
|
dst_branch:
|
|
description: 'Push the created commit on a specific branch. Defaults to current branch'
|
|
required: false
|
|
default: ''
|
|
secret:
|
|
description: 'A token allowing to push the commit on the repository'
|
|
required: true
|
|
default: '.'
|
|
repository:
|
|
description: 'The repository where to push'
|
|
required: true
|
|
default: ''
|
|
|
|
runs:
|
|
using: 'composite'
|
|
steps:
|
|
- name: Commit the changes
|
|
id: commit
|
|
run: |
|
|
git config --global user.name ${{ inputs.name }}
|
|
ORIGIN="$(pwd)"
|
|
cd ${{ inputs.directory }}
|
|
|
|
CURRENT_BRANCH=${GITHUB_REF#refs/heads/};
|
|
# calculating source branch
|
|
if [ -n "${{ inputs.src_branch }}" ]; \
|
|
then \
|
|
git switch ${{ inputs.src_branch }} 2>/dev/null || git switch -c ${{ inputs.src_branch }}; \
|
|
SRC_BRANCH=${{ inputs.src_branch }}; \
|
|
else \
|
|
SRC_BRANCH=`git branch --show-current`; \
|
|
if [ -z "$SRC_BRANCH" ]; \
|
|
then \
|
|
SRC_BRANCH=$CURRENT_BRANCH; \
|
|
fi \
|
|
fi
|
|
|
|
# calculating destination branch
|
|
if [ -n "${{ inputs.dst_branch }}" ]; \
|
|
then \
|
|
DST_BRANCH=${{ inputs.dst_branch }}; \
|
|
else \
|
|
DST_BRANCH=`git branch --show-current`; \
|
|
if [ -z "$DST_BRANCH" ]; \
|
|
then \
|
|
DST_BRANCH=$CURRENT_BRANCH; \
|
|
fi \
|
|
fi
|
|
|
|
echo "-----------------------------------------------------------"
|
|
echo "Initial repo status"
|
|
git status
|
|
# checking changes, commit if needed
|
|
CHANGES="$(git status --porcelain ${{ inputs.files }})"
|
|
if [ -n "${CHANGES}" ]; \
|
|
then \
|
|
echo -e "Changes:\n${CHANGES}"; \
|
|
git add ${{ inputs.files }}; \
|
|
echo "-----------------------------------------------------------"; \
|
|
echo "Repo status before commit"; \
|
|
git status; \
|
|
git commit -am "${{ inputs.message }}"; \
|
|
fi
|
|
|
|
# compute if a push is needed
|
|
if [ -n "${CHANGES}" -o "$SRC_BRANCH" != "$DST_BRANCH" ]; \
|
|
then \
|
|
PUSH="YES"; \
|
|
else \
|
|
PUSH="NO"; \
|
|
fi
|
|
|
|
git log -n 2
|
|
cd "${ORIGIN}"
|
|
|
|
echo " -- Env SRC_BRANCH: $SRC_BRANCH";
|
|
echo " -- Env DST_BRANCH: $DST_BRANCH";
|
|
echo " -- Env PUSH: $PUSH"
|
|
# exporting these variables for next steps
|
|
echo "##[set-output name=src_branch;]$(echo $SRC_BRANCH)";
|
|
echo "##[set-output name=dst_branch;]$(echo $DST_BRANCH)";
|
|
echo "##[set-output name=push;]$(echo $PUSH)";
|
|
shell: bash
|
|
|
|
- name: Push commit
|
|
if: steps.commit.outputs.push == 'YES'
|
|
uses: ad-m/github-push-action@master
|
|
with:
|
|
github_token: ${{ inputs.secret }}
|
|
branch: ${{ steps.commit.outputs.src_branch }}:${{ steps.commit.outputs.dst_branch }}
|
|
directory: ${{ inputs.directory }}
|
|
repository: ${{ inputs.repository }}
|