Skip to content

ci: add upstream sync #11

ci: add upstream sync

ci: add upstream sync #11

Workflow file for this run

name: Sync with Latest Release
on:
schedule:
- cron: '0 0 * * *' # Runs daily at midnight UTC
workflow_dispatch: # Allow manual triggering
pull_request:
branches:
- dev
jobs:
sync-with-release:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
fetch-depth: 0 # Get full history for commit count
token: ${{ secrets.PAT_SERVICE_ACCOUNT }}
ref: master
- name: Configure Git
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
- name: Add upstream remote and fetch master
env:
GITHUB_TOKEN: ${{ secrets.PAT_SERVICE_ACCOUNT }}
run: |
git remote add upstream https://github.com/ggml-org/llama.cpp.git
git fetch upstream master:refs/remotes/upstream/master --no-tags
- name: Determine target commit
id: target
run: |
RELEASE_INFO=$(curl -s https://api.github.com/repos/ggml-org/llama.cpp/releases/latest)
LATEST_TAG=$(echo "$RELEASE_INFO" | jq -r '.tag_name')
LATEST_COMMIT=$(echo "$RELEASE_INFO" | jq -r '.target_commitish')
if [ -n "$LATEST_TAG" ] && [ "$LATEST_TAG" != "null" ]; then
echo "Latest release tag: $LATEST_TAG (will use upstream/master)"
echo "target=upstream/master" >> $GITHUB_OUTPUT
else
echo "Using upstream/master as target"
echo "target=upstream/master" >> $GITHUB_OUTPUT
fi
- name: Sync master with latest release
env:
GITHUB_TOKEN: ${{ secrets.PAT_SERVICE_ACCOUNT }}
run: |
CURRENT_COMMIT=$(git rev-parse HEAD)
TARGET="${{ steps.target.outputs.target }}"
echo "Resetting master to $TARGET"
git reset --hard $TARGET
NEW_COMMIT=$(git rev-parse HEAD)
if [ "$CURRENT_COMMIT" = "$NEW_COMMIT" ]; then
echo "No new changes found, master is already up to date"
else
echo "Pushing updates to master"
git push origin HEAD:master --force
echo "MASTER_COMMIT=$(git rev-parse HEAD)" >> $GITHUB_ENV
fi
- name: Rebase dev onto master
env:
GITHUB_TOKEN: ${{ secrets.PAT_SERVICE_ACCOUNT }}
run: |
git fetch origin dev:refs/remotes/origin/dev --no-tags
git checkout -b temp-dev origin/dev
echo "Attempting to rebase dev onto master..."
if ! git rebase master; then
echo "⚠️ Rebase conflict detected, aborting"
git rebase --abort
exit 1
fi
echo "Rebase successful, force pushing to dev..."
git push origin HEAD:dev --force
- name: Create version tag
env:
GITHUB_TOKEN: ${{ secrets.PAT_SERVICE_ACCOUNT }}
run: |
git checkout master
COMMIT_COUNT=$(git rev-list --count HEAD)
NEW_TAG="b${COMMIT_COUNT}"
if git ls-remote --tags origin | grep -q "refs/tags/${NEW_TAG}$"; then
echo "Tag $NEW_TAG already exists on remote, skipping tag creation"
else
echo "Creating new tag: $NEW_TAG"
git tag "$NEW_TAG"
git push origin "$NEW_TAG"
echo "Successfully created and pushed tag $NEW_TAG"
fi