Bug fix #69
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: Auto-format and Validate Version | |
on: | |
pull_request: | |
jobs: | |
auto-format: | |
name: Auto-format Code | |
runs-on: ubuntu-latest | |
steps: | |
# Step 1: Checkout the repository | |
- name: Checkout Repository | |
uses: actions/checkout@v3 | |
# Step 2: Set up Python environment | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.x' | |
# Step 3: Install tools (black and isort) | |
- name: Install Tools | |
run: | | |
python -m pip install --upgrade pip | |
pip install black isort | |
# Step 4: Run black and isort to format the code | |
- name: Format Code with Black and isort | |
run: | | |
black --line-length=119 . | |
isort . | |
# Step 5: Commit Formatting Changes | |
- name: Commit Formatting Changes | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
git config user.name "github-actions[bot]" | |
git config user.email "github-actions[bot]@users.noreply.github.com" | |
git add . | |
if git diff --cached --quiet; then | |
echo "No formatting changes to commit." | |
exit 0 | |
fi | |
git commit -m "Auto-format code with Black and isort" | |
git push origin HEAD | |
validate-version: | |
name: Validate Version | |
runs-on: ubuntu-latest | |
needs: auto-format | |
if: github.base_ref == 'main' | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v3 | |
- name: Skip Validation for Non-patch/dev Branches | |
run: | | |
if [[ "$GITHUB_HEAD_REF" != patch* && "$GITHUB_HEAD_REF" != dev* ]]; then | |
echo "Skipping validation for non-patch/dev branch." | |
exit 0 | |
fi | |
- name: Fetch main branch into a temporary branch | |
run: | | |
git fetch origin main | |
git checkout -b temp-main origin/main | |
- name: Get VERSION from patch branch | |
id: get_patch_version | |
run: | | |
VERSION=$(grep -m 1 -oP '(?<=^VERSION = ")[^"]+' apps/pv_opt/pv_opt.py) | |
if [ -z "$VERSION" ]; then | |
echo "Error: VERSION not found in apps/pv_opt/pv_opt.py on patch branch." >&2 | |
exit 1 | |
fi | |
echo "patch_version=$VERSION" >> $GITHUB_ENV | |
- name: Get VERSION from main branch | |
id: get_main_version | |
run: | | |
git checkout temp-main | |
VERSION=$(grep -m 1 -oP '(?<=^VERSION = ")[^"]+' apps/pv_opt/pv_opt.py) | |
if [ -z "$VERSION" ]; then | |
echo "Error: VERSION not found in apps/pv_opt/pv_opt.py on main branch." >&2 | |
exit 1 | |
fi | |
echo "main_version=$VERSION" >> $GITHUB_ENV | |
- name: Validate or Fix Version Increment | |
id: validate_or_fix_version | |
run: | | |
patch_version=$patch_version | |
main_version=$main_version | |
main_major=$(echo "$main_version" | awk -F '.' '{print $1}') | |
main_minor=$(echo "$main_version" | awk -F '.' '{print $2}') | |
main_patch=$(echo "$main_version" | awk -F '.' '{print $3}') | |
if [[ "$GITHUB_HEAD_REF" == patch* ]]; then | |
new_patch_version="$main_major.$main_minor.$((main_patch + 1))" | |
elif [[ "$GITHUB_HEAD_REF" == dev* ]]; then | |
new_patch_version="$main_major.$((main_minor + 1)).0" | |
else | |
echo "Error: Unsupported source branch type." >&2 | |
exit 1 | |
fi | |
sed -i "s/^VERSION = \".*\"/VERSION = \"$new_patch_version\"/" apps/pv_opt/pv_opt.py | |
echo "Corrected version to $new_patch_version." | |
echo "new_patch_version=$new_patch_version" >> $GITHUB_ENV | |
echo "VERSION_CHANGED=true" >> $GITHUB_ENV | |
- name: Update README.md version | |
run: | | |
new_patch_version=${{ env.new_patch_version }} | |
sed -i "1s/v[0-9]*\\.[0-9]*\\.[0-9]*/v$new_patch_version/" README.md | |
- name: Commit Version Changes | |
if: env.VERSION_CHANGED == 'true' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
git config user.name "github-actions[bot]" | |
git config user.email "github-actions[bot]@users.noreply.github.com" | |
git add apps/pv_opt/pv_opt.py README.md | |
git commit -m "Update version to ${{ env.new_patch_version }}" | |
git push origin HEAD | |