Updates to make sure github issues have been addressed #65
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: Create and Update Translation Branches and PRs | |
# This will run when there is a push to any English language branch | |
# With the format listed below. | |
on: | |
push: | |
branches: | |
- 'handbook_v*_en' | |
jobs: | |
create_and_update_translation_branches: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Set up Git and Github CLI | |
run: | | |
git config --global user.name 'ntluong95' | |
git config --global user.email '[email protected]' | |
sudo apt update | |
sudo apt install -y gh | |
- name: Fetch all branches | |
run: git fetch --all | |
- name: Create and update language branches and PRs | |
run: | | |
LANGS=("fr" "es" "vn" "jp" "tr" "pt" "ru") | |
EN_BRANCH="${{ github.ref }}" | |
VERSION_SUFFIX="${EN_BRANCH#refs/heads/handbook_}" | |
for lang in "${LANGS[@]}"; do | |
TRANSLATION_BRANCH="handbook_${VERSION_SUFFIX/_en/_$lang}" | |
git fetch --prune | |
# Ensure we have all history | |
git fetch --all | |
# Check if the translation branch exists | |
if git ls-remote --exit-code --heads origin "${TRANSLATION_BRANCH}"; then | |
echo "Branch ${TRANSLATION_BRANCH} exists. Checking out and rebasing with ${EN_BRANCH}" | |
git checkout "${TRANSLATION_BRANCH}" | |
git pull -s recursive -X theirs --no-rebase --no-edit origin "${EN_BRANCH#refs/heads/}" --allow-unrelated-histories | |
else | |
echo "Branch ${TRANSLATION_BRANCH} does not exist. Creating new branch from ${EN_BRANCH}." | |
git checkout -b "${TRANSLATION_BRANCH}" | |
git pull origin "${EN_BRANCH#refs/heads/}" | |
fi | |
# Force push the changes to the remote repository | |
git push origin "${TRANSLATION_BRANCH}" --force | |
# Get the date of the latest commit on the english branch | |
latest_commit_date=$(git show -s --format=%ci ${EN_BRANCH}) | |
echo "Commits on the English branch that were made after the latest commit on the translation branch at $latest_commit_date" | |
latest_commit_en_branch=$(git show --format=%H -s ${EN_BRANCH}) | |
latest_commit_info=$(git log ${EN_BRANCH} --since="$latest_commit_date" --format="%H %s" --reverse) | |
commit_messages=$(echo "$latest_commit_info" | cut -d' ' -f2-) | |
latest_commit_main=$(git show --format=%H -s origin/main) | |
echo $latest_commit_en_branch | |
echo $latest_commit_main | |
echo $latest_commit_info | |
# Check if there are new commits | |
if [ "$latest_commit_en_branch" == "$latest_commit_main" ]; then | |
echo "No new commits to include in PR for ${TRANSLATION_BRANCH}" | |
continue | |
fi | |
# Check if a PR already exists for this branch | |
PR_EXISTS=$(gh pr list --head "${TRANSLATION_BRANCH}" --state open --json number --jq length) | |
if [ "$PR_EXISTS" -eq 0 ]; then | |
echo "Creating new PR for ${TRANSLATION_BRANCH}" | |
PR_URL=$(gh pr create --base deploy-preview --head "$TRANSLATION_BRANCH" --title "Handbook ${VERSION_SUFFIX/_en/} $lang" --body "Automated pull request for $lang handbook version ${VERSION_SUFFIX/_en/}") | |
PR_NUMBER=$(echo "$PR_URL" | grep -oE '[0-9]+$') | |
else | |
# Get the PR number for the translation branch | |
echo "PR already exists for ${TRANSLATION_BRANCH}" | |
PR_NUMBER=$(gh pr list --head "${TRANSLATION_BRANCH}" --state open --json number --jq ".[0].number") | |
fi | |
echo "Pull Request Number: $PR_NUMBER" | |
# Add new commits as checkboxes to the PR description | |
IFS=$'\n' # Change the Internal Field Separator to newline for correct iteration over lines | |
checkboxes="" | |
for commit_info in $latest_commit_info; do | |
commit_hash=$(echo "$commit_info" | cut -d' ' -f1) | |
commit_message=$(echo "$commit_info" | cut -d' ' -f2-) | |
checkboxes="$checkboxes- [ ] [$commit_message](https://github.com/\${{ github.repository }}/commit/$commit_hash)" | |
done | |
# Mention a user in the PR description | |
case "$lang" in | |
"vn") checkboxes="$checkboxes @ntluong95, please check the box when you finish" ;; | |
"fr") checkboxes="$checkboxes @oliviabboyd, please check the box when you finish" ;; | |
"es") checkboxes="$checkboxes @amateo250, please check the box when you finish" ;; | |
"jp") checkboxes="$checkboxes @ntluong95, please check the box when you finish" ;; | |
"tr") checkboxes="$checkboxes @ntluong95, please check the box when you finish" ;; | |
"pt") checkboxes="$checkboxes @Luccan97, please check the box when you finish" ;; | |
"ru") checkboxes="$checkboxes @ntluong95, please check the box when you finish" ;; | |
esac | |
# Retrieve the current PR description | |
current_pr_body=$(gh pr view $PR_NUMBER --json body --jq '.body') | |
# Append checkboxes to the current PR description | |
new_pr_body=$(printf "%s\n%s" "$current_pr_body" "$checkboxes") | |
gh api repos/${{ github.repository }}/issues/$PR_NUMBER --method PATCH --field body="$new_pr_body" | |
done | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |