diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 8e75e97..262812a 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -8,6 +8,10 @@ on: - main workflow_dispatch: # Allows manual trigger +concurrency: + group: build-and-deploy + cancel-in-progress: false + jobs: build_and_deploy: runs-on: ubuntu-latest @@ -16,7 +20,7 @@ jobs: - name: Check out the repository uses: actions/checkout@v4 with: - fetch-depth: 0 # Fetch full history to support rebasing + fetch-depth: 0 # Fetch full history for proper merging - name: Set up SSH for Git (deploy key) run: | @@ -35,41 +39,33 @@ jobs: python3 -m pip install --upgrade pip pip install -r requirements.txt - - name: Generate Merged Data - run: | - python3 gh-data.py - python3 merge-data.py - - - name: Switch to `gh-pages` and Preserve Changes + - name: Configure Git User run: | git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" - # Stash changes to preserve them - git stash --include-untracked - - # Fetch and switch to `gh-pages` - git fetch origin gh-pages:gh-pages || git checkout --orphan gh-pages + - name: Fetch and Check Out `gh-pages` + run: | + git fetch origin gh-pages:gh-pages git checkout gh-pages - # Rebase `gh-pages` onto `main` to ensure a linear history - git rebase main + - name: Merge `main` into `gh-pages` with `-s theirs` + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + run: | + git merge ${{ github.sha }} -s theirs --no-edit - # Apply stashed changes - git stash pop || echo "No changes to apply." + - name: Generate Merged Data + run: | + python3 gh-data.py + python3 merge-data.py - name: Commit and Push Updates run: | # Add changes git add -f merged-data.json - git add . # Commit changes if there are any - if git diff --cached --quiet; then - echo "No changes to commit." - else - git commit -m "Update GitHub Pages with latest data" - fi + git commit -m "Update GitHub Pages with latest data" # Push changes back to `gh-pages` git remote set-url origin git@github.com:${{ github.repository }}.git