Skip to content

Refresh Upstream and Notify API #342

Refresh Upstream and Notify API

Refresh Upstream and Notify API #342

name: Refresh Upstream and Notify API
on:
schedule:
- cron: '0 0 * * *' # Runs every day
push:
branches:
- master
workflow_dispatch: # Allows manual triggering
permissions:
contents: write
actions: write
jobs:
monitor_changes:
runs-on: ubuntu-latest
steps:
# Step 1: Check out your forked repository
- name: Checkout Fork
uses: actions/checkout@v3
with:
ref: master
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0 # full history to allow merges
# Step 2: Set Git identity
- name: Set Git Identity
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions"
echo "Git identity set"
# Step 2: Add the upstream repository and fetch changes
- name: Set Upstream Repository
run: |
echo "Adding upstream repository..."
git remote add upstream https://github.com/electric-capital/crypto-ecosystems.git
echo "Fetching from upstream..."
git fetch upstream master
echo "Current remotes:"
git remote -v
echo "Current branch:"
git branch -v
# Step 3: Check for Changes in Migrations Folder
- name: Check for Changes in Migrations Folder
id: changed_files
run: |
echo "Checking for changed files in migrations folder..."
# Compare your fork with the upstream repository, focusing on migrations folder
CHANGED_FILES=$(git diff --name-only HEAD upstream/master | grep '^migrations/' || true)
HAS_CHANGES="false"
echo "Changed Files in Migrations:"
echo "$CHANGED_FILES"
if [[ -n "$CHANGED_FILES" ]]; then
HAS_CHANGES="true"
fi
echo "Has changes: $HAS_CHANGES"
echo "has_changes=$HAS_CHANGES" >> $GITHUB_OUTPUT
- name: Sync Fork with Upstream
if: steps.changed_files.outputs.has_changes == 'true' # Only run if there are changes
run: |
echo "Starting sync with upstream..."
# Merge upstream/master into the current branch
git checkout master
echo "Current branch after checkout:"
git branch -v
# Store the current commit hash before merge
CURRENT_COMMIT=$(git rev-parse HEAD)
echo "Current commit before merge: $CURRENT_COMMIT"
# Merge upstream changes
git merge --no-edit upstream/master || true
# Merge upstream changes (this may include workflow file changes)
git merge --no-edit upstream/master || true
# Remove workflow files from the merge commit
echo "Excluding workflow files from merge commit"
# Remove workflow files from index (they won't be in the commit)
git rm --cached -r .github/workflows/ 2>/dev/null || true
# Restore workflow files to pre-merge state in working directory only (not staged)
# Use git show to extract files without staging them
for file in $(git ls-tree -r --name-only $CURRENT_COMMIT | grep '^\.github/workflows/'); do
mkdir -p $(dirname "$file")
git show $CURRENT_COMMIT:"$file" > "$file" 2>/dev/null || true
done
# Complete the merge commit (workflow files are not in index, so won't be committed)
if [[ -f .git/MERGE_HEAD ]]; then
git commit --no-edit || true
fi
echo "Pushing merge to origin..."
# Push the updated branch back to the fork without rewriting history
git push origin master
echo "Sync completed"
- name: Install uv
if: steps.changed_files.outputs.has_changes == 'true'
run: |
echo "Installing uv..."
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
uv --version
- name: Run Export Command
if: steps.changed_files.outputs.has_changes == 'true'
run: |
echo "Running export command..."
chmod +x ./run.sh
./run.sh export exports.jsonl
echo "Export completed"
ls -la exports.jsonl
- name: Configure AWS Credentials
if: steps.changed_files.outputs.has_changes == 'true'
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Upload to S3
if: steps.changed_files.outputs.has_changes == 'true'
run: |
echo "Uploading exports.jsonl to S3..."
aws s3 cp exports.jsonl s3://${{ secrets.S3_BUCKET_NAME }}/exports.jsonl
echo "File uploaded to s3://${{ secrets.S3_BUCKET_NAME }}/exports.jsonl"
# Final Step: Call API to notify about completed changes
- name: Notify API
if: steps.changed_files.outputs.has_changes == 'true'
id: api_call
env:
API_URL: ${{ secrets.TALENT_PROTOCOL_API_URL }}
API_KEY: ${{ secrets.TALENT_PROTOCOL_API_SECRET }}
run: |
echo "Preparing API call..."
echo "Repository: ${{ github.repository }}"
echo "Actor: ${{ github.actor }}"
echo "Notifying API that new export is available on S3"
# Make the API call with verbose output
HTTP_CODE=$(curl -s -o response.json -w "%{http_code}" -X PUT $API_URL \
-H "Content-Type: application/json" \
-H "X-API-SECRET: $API_KEY")
echo "HTTP Response Code: $HTTP_CODE"
echo "API Response:"
cat response.json
if [[ "$HTTP_CODE" -ge 200 && "$HTTP_CODE" -lt 300 ]]; then
echo "API call successful"
echo "success=true" >> $GITHUB_OUTPUT
else
echo "API call failed with status $HTTP_CODE"
echo "success=false" >> $GITHUB_OUTPUT
exit 1
fi