Merge branch 'master' into debugconsole-history #698
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Formatting your code | |
concurrency: | |
group: format-${{ github.ref }} | |
cancel-in-progress: true | |
on: | |
# We are interested only in master and PRs, but GitHub explicitly forbids | |
# pushing to the fork when an event is triggered on the base repo. | |
# We therefore need to intercept all calls and filter out the ones we are | |
# interested in. | |
# For master, and branches with an open PR, we run utils/fix_formatting.py. | |
# We then commit and push the changes to the branch. | |
# If someone pushes to the branch while we're still formatting, | |
# we exit 1 instead of pushing. | |
# For other branches without an open PR, we also run fix_formatting.py, but | |
# we do not push anything, only signal the code quality by exiting 0 or 1. | |
push: | |
jobs: | |
run_formatting: | |
name: Run fix_formatting.py | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
persist-credentials: false | |
- name: Fetching branch info | |
run: | | |
echo "branch=${GITHUB_REF##*/}" >> $GITHUB_ENV | |
git config --global user.name "The Widelands Code Formatting Bot" | |
export ACTOR_NAME="${GITHUB_REPOSITORY%/*}" | |
if [ "$ACTOR_NAME" == "widelands" ] | |
then | |
export ACTOR_NAME="bunnybot" | |
git config --global user.email "[email protected]" | |
else | |
git config --global user.email "$(git log -1 --format=\"%ae\")" | |
fi | |
export PAT="${{ secrets.WIDELANDS_FORMAT_TOKEN }}" | |
if [ -z "$PAT" ] | |
then | |
export PAT="${{ secrets.GITHUB_TOKEN }}" | |
echo "WARNING: You did not create a personal access token yet. Please do so soon! See https://github.com/widelands/widelands/#code for more information." | |
fi | |
echo "PAT=$PAT" >> $GITHUB_ENV | |
echo "ACTOR_NAME=$ACTOR_NAME" >> $GITHUB_ENV | |
# copied from https://github.com/stefanzweifel/git-auto-commit-action/blob/master/entrypoint.sh | |
cat <<- EOF > $HOME/.netrc | |
machine github.com | |
login $ACTOR_NAME | |
password $PAT | |
machine api.github.com | |
login $ACTOR_NAME | |
password $PAT | |
EOF | |
chmod 600 $HOME/.netrc | |
- name: Installing python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.x | |
- name: Installing formatting tools | |
run: | | |
sudo apt-get update | |
sudo apt-get purge -y clang-11 clang-format-11 clang-10 clang-format-10 | |
sudo apt-get install clang-format-12 | |
pip install autoflake autopep8 unify docformatter==1.5.1 | |
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-12 100 | |
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-12 100 | |
sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-12 100 | |
# Quit on wrong version | |
clang-format --version | |
clang-format --version | grep 12.0 | |
- name: Invoking fix_formatting.py | |
run: python3 ./utils/fix_formatting.py | |
- name: Gathering changes | |
run: | | |
nrfiles=$(git status -s | wc -l) | |
if [ $nrfiles == 0 ] | |
then | |
echo "Nothing to do" | |
files="" | |
else | |
if [ $nrfiles == 1 ] | |
then | |
echo "1 file formatted" | |
files=$(git status -s) | |
files="'${files#???}' was automatically formatted." | |
else | |
echo "$nrfiles files formatted" | |
files="$nrfiles files were automatically formatted." | |
fi | |
if [ "$branch" == "master" ] | |
then | |
echo "Always push master branch ($GITHUB_REF)" | |
else | |
forkname=${{ github.repository }} | |
# grep returns 1 if the branch is not found | |
set +e | |
output=$(curl -i "https://api.github.com/repos/widelands/widelands/pulls?state=open&head=${forkname%%/*}:$branch" | grep "$branch") | |
set -e | |
if [ -z "$output" ] | |
then | |
echo "Branch $branch in repository $forkname does not have an open pull request, so no changes will be pushed. Please note however that your code is not properly formatted:" | |
git status -s | |
git --no-pager diff --cached | |
exit 1 | |
else | |
echo "Branch $branch in repository $forkname has an open pull request. Changes will be pushed." | |
fi | |
fi | |
fi | |
echo "COMMIT_MESSAGE=$files" >> $GITHUB_ENV | |
- name: Pushing changes | |
run: | | |
if [ -z "$COMMIT_MESSAGE" ] | |
# skip if there's nothing to do | |
then | |
echo "Code was already correctly formatted" | |
exit 0 | |
fi | |
# curl exits 23 because grep will kill it after the first match | |
set +e | |
latest=$(curl -i "https://api.github.com/repos/${{ github.repository }}/commits/$branch" | grep -m 1 "\"sha\": ") | |
set -e | |
latest=${latest#*: \"} | |
latest=${latest%\",} | |
if [ "$latest" == "${{ github.sha }}" ] | |
then | |
echo "No remote changes" | |
git remote add push_target https://${ACTOR_NAME}:${PAT}@github.com/${GITHUB_REPOSITORY}.git | |
git commit -m "$COMMIT_MESSAGE" | |
git push push_target "$branch" | |
echo "Changes were successfully pushed to $branch at ${{ github.repository }}. Don't forget to run 'git pull' before pushing to the branch again." | |
else | |
echo "The remote branch '$branch' ($GITHUB_REF) from '${{ github.repository }}' was updated from '${{ github.sha }}' to '$latest', cancel" | |
exit 1 | |
fi |