261 lines
10 KiB
YAML
261 lines
10 KiB
YAML
## Updates demo site (https://github.com/zetxek/adritian-demo)
|
|
## taken from https://stackoverflow.com/a/68213855/570087
|
|
|
|
name: Preview demo site
|
|
|
|
permissions:
|
|
contents: read
|
|
id-token: write
|
|
pages: write
|
|
pull-requests: write
|
|
checks: write
|
|
statuses: write
|
|
actions: write
|
|
## This will open a PR which will open a vercel preview URL in the demo site
|
|
|
|
on:
|
|
pull_request:
|
|
branches: [main]
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
label-dependabot:
|
|
runs-on: ubuntu-latest
|
|
if: github.actor == 'dependabot[bot]'
|
|
steps:
|
|
- name: Add safe-to-test label to Dependabot PRs
|
|
uses: actions/github-script@v7
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
script: |
|
|
try {
|
|
// First check if the label exists
|
|
await github.rest.issues.getLabel({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
name: 'safe-to-test'
|
|
});
|
|
|
|
// If it exists, add it to the PR
|
|
await github.rest.issues.addLabels({
|
|
issue_number: context.issue.number,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
labels: ['safe-to-test']
|
|
});
|
|
console.log('Added safe-to-test label to PR');
|
|
} catch (error) {
|
|
// If getting the label failed, the PR workflow can't add it
|
|
// Let's just modify our workflow to handle this differently
|
|
console.log('Could not add safe-to-test label: ' + error.message);
|
|
console.log('Will handle Dependabot PRs directly in check-conditions job');
|
|
}
|
|
|
|
check-dependabot:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
should-run: ${{ steps.check-conditions.outputs.should-run }}
|
|
steps:
|
|
- id: check-conditions
|
|
run: |
|
|
# Check if PR has safe-to-test label
|
|
if [[ "${{ contains(github.event.pull_request.labels.*.name, 'safe-to-test') }}" == "true" ]]; then
|
|
echo "should-run=true" >> $GITHUB_OUTPUT
|
|
echo "PR has safe-to-test label, allowing workflow to run"
|
|
exit 0
|
|
fi
|
|
|
|
# Always allow Dependabot PRs to run
|
|
if [[ "${{ github.actor }}" == "dependabot[bot]" ]]; then
|
|
echo "should-run=true" >> $GITHUB_OUTPUT
|
|
echo "PR is from Dependabot, automatically allowing workflow to run"
|
|
exit 0
|
|
fi
|
|
|
|
# For other contributors
|
|
echo "should-run=true" >> $GITHUB_OUTPUT
|
|
echo "PR is from a trusted contributor, allowing workflow to run"
|
|
|
|
update-demo:
|
|
needs: check-dependabot
|
|
if: needs.check-dependabot.outputs.should-run == 'true'
|
|
env:
|
|
SOURCE_BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
|
|
PR_NUMBER: ${{ github.event.number }}
|
|
HUGO_VERSION: ${{ vars.HUGO_VERSION || '0.147.2' }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout source repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: zetxek/adritian-free-hugo-theme
|
|
ref: ${{ github.head_ref || github.ref_name }}
|
|
token: ${{ secrets.PRIVATE_TOKEN_GITHUB }}
|
|
path: source-repo
|
|
|
|
- name: Checkout demo repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: zetxek/adritian-demo
|
|
token: ${{ secrets.PRIVATE_TOKEN_GITHUB }}
|
|
path: demo-repo
|
|
|
|
- name: Setup Hugo
|
|
uses: peaceiris/actions-hugo@v2
|
|
with:
|
|
hugo-version: ${{ env.HUGO_VERSION }}
|
|
extended: true
|
|
|
|
- name: Send pull-request
|
|
shell: bash
|
|
run: |
|
|
SOURCE_REPOSITORY="zetxek/adritian-free-hugo-theme"
|
|
LATEST_COMMIT=${{ github.event.pull_request.head.sha || github.sha }}
|
|
SHORT_COMMIT=${LATEST_COMMIT:0:8}
|
|
|
|
# Handle both PR events and manual workflow dispatch
|
|
if [ -n "$PR_NUMBER" ]; then
|
|
PR_URL="https://github.com/$SOURCE_REPOSITORY/pull/$PR_NUMBER"
|
|
BRANCH_NAME="theme-update/pr-$PR_NUMBER-$SHORT_COMMIT"
|
|
PR_TITLE="preview: theme PR #$PR_NUMBER ($SHORT_COMMIT)"
|
|
else
|
|
# For manual workflow dispatch, use branch name instead
|
|
BRANCH_REF="${{ github.head_ref || github.ref_name }}"
|
|
PR_URL="https://github.com/$SOURCE_REPOSITORY/tree/$BRANCH_REF"
|
|
BRANCH_NAME="theme-update/branch-$BRANCH_REF-$SHORT_COMMIT"
|
|
PR_TITLE="preview: theme branch $BRANCH_REF ($SHORT_COMMIT)"
|
|
fi
|
|
|
|
BASE_BRANCH="main"
|
|
ASSIGNEE="zetxek"
|
|
|
|
echo "Latest commit: $LATEST_COMMIT"
|
|
echo "Short commit: $SHORT_COMMIT"
|
|
echo "Branch name: $BRANCH_NAME"
|
|
echo "PR URL: $PR_URL"
|
|
if [ -n "$PR_NUMBER" ]; then
|
|
echo "PR Number: $PR_NUMBER"
|
|
else
|
|
echo "Manual workflow dispatch - no PR number"
|
|
fi
|
|
|
|
git config --global --add --bool push.autoSetupRemote true
|
|
|
|
# Verify source commit exists
|
|
cd source-repo
|
|
if ! git cat-file -e $LATEST_COMMIT; then
|
|
echo "Error: Commit $LATEST_COMMIT does not exist in source repository"
|
|
exit 1
|
|
fi
|
|
echo "✅ Verified commit $LATEST_COMMIT exists in source repository"
|
|
|
|
# Switch to demo repository
|
|
cd ../demo-repo
|
|
|
|
# Setup git identity
|
|
git config user.email "actions@github.com"
|
|
git config user.name "GitHub Actions - update theme module"
|
|
|
|
# Create feature branch
|
|
git checkout -b $BRANCH_NAME
|
|
|
|
# Initialize Hugo module if needed
|
|
if [ ! -f "go.mod" ]; then
|
|
hugo mod init github.com/zetxek/adritian-demo
|
|
fi
|
|
|
|
# Clean up any existing invalid module references
|
|
if [ -f "go.mod" ]; then
|
|
echo "Cleaning up existing go.mod..."
|
|
# Remove any existing theme references that might have invalid revisions
|
|
grep -v 'github.com/zetxek/adritian-free-hugo-theme' go.mod > go.mod.tmp || touch go.mod.tmp
|
|
mv go.mod.tmp go.mod
|
|
# Clean up any existing go.sum entries
|
|
if [ -f "go.sum" ]; then
|
|
grep -v 'github.com/zetxek/adritian-free-hugo-theme' go.sum > go.sum.tmp || touch go.sum.tmp
|
|
mv go.sum.tmp go.sum
|
|
fi
|
|
fi
|
|
|
|
# Get the theme from the PR branch - use branch name instead of commit for better reliability
|
|
BRANCH_NAME_THEME="${{ github.head_ref || github.ref_name }}"
|
|
echo "Using theme branch: $BRANCH_NAME_THEME"
|
|
|
|
# Try to get the specific commit first, fallback to branch if commit is not available
|
|
echo "Attempting to get theme with commit: $LATEST_COMMIT"
|
|
if hugo mod get github.com/zetxek/adritian-free-hugo-theme@$LATEST_COMMIT; then
|
|
echo "✅ Successfully got theme with commit hash"
|
|
else
|
|
echo "Failed to get specific commit, trying branch instead..."
|
|
echo "Attempting to get theme with branch: $BRANCH_NAME_THEME"
|
|
if hugo mod get github.com/zetxek/adritian-free-hugo-theme@$BRANCH_NAME_THEME; then
|
|
echo "✅ Successfully got theme with branch name"
|
|
else
|
|
echo "❌ Failed to get theme with both commit and branch, trying main branch as last resort..."
|
|
hugo mod get github.com/zetxek/adritian-free-hugo-theme@main
|
|
fi
|
|
fi
|
|
|
|
hugo mod tidy
|
|
|
|
# Commit changes
|
|
git add go.mod go.sum
|
|
if [ -n "$PR_NUMBER" ]; then
|
|
COMMIT_MSG="preview: theme PR #$PR_NUMBER ($SHORT_COMMIT)"
|
|
else
|
|
BRANCH_REF="${{ github.head_ref || github.ref_name }}"
|
|
COMMIT_MSG="preview: theme branch $BRANCH_REF ($SHORT_COMMIT)"
|
|
fi
|
|
git commit -m "$COMMIT_MSG" && git push --force || echo "No changes to commit"
|
|
|
|
# Push branch
|
|
git push origin $BRANCH_NAME --force
|
|
|
|
# Setup GitHub CLI
|
|
echo "${{ secrets.PRIVATE_TOKEN_GITHUB }}" > token.txt
|
|
gh auth login --with-token < token.txt
|
|
|
|
# Check if PR exists
|
|
PR_EXISTS=$(gh pr list --state open --base $BASE_BRANCH --head $BRANCH_NAME --json number | jq '.[0].number // empty')
|
|
echo "PR_EXISTS: $PR_EXISTS"
|
|
|
|
if [ -n "$PR_EXISTS" ]; then
|
|
echo "PR Exists. Updating pull-request..."
|
|
gh pr view
|
|
echo "✅ Pull-request updated!"
|
|
# TODO: update the PR body with the latest commit
|
|
# Add a comment to the PR with the update
|
|
gh pr comment $PR_EXISTS --body "Updated PR to last commit in source repo: \`$LATEST_COMMIT\`"
|
|
else
|
|
echo "✨ Creating new pull-request..."
|
|
if [ -n "$PR_NUMBER" ]; then
|
|
PR_BODY="⚠️ The source PR is not merged yet - this is a preview PR created to test the theme update with a vercel preview URL.
|
|
- Last commit: \`$LATEST_COMMIT\`
|
|
- Source PR: $PR_URL
|
|
- 🔗 Triggered by https://github.com/zetxek/adritian-free-hugo-theme/actions/workflows/update-demo-pr.yml"
|
|
else
|
|
BRANCH_REF="${{ github.head_ref || github.ref_name }}"
|
|
PR_BODY="⚠️ This is a preview PR created to test the theme update from branch \`$BRANCH_REF\` with a vercel preview URL.
|
|
- Last commit: \`$LATEST_COMMIT\`
|
|
- Source branch: $PR_URL
|
|
- 🔗 Triggered by https://github.com/zetxek/adritian-free-hugo-theme/actions/workflows/update-demo-pr.yml"
|
|
fi
|
|
|
|
PR_RESULT=$(gh pr create \
|
|
--title "$PR_TITLE" \
|
|
--body "$PR_BODY" \
|
|
--head $BRANCH_NAME \
|
|
--base $BASE_BRANCH \
|
|
--assignee $ASSIGNEE \
|
|
--label preview)
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error creating PR: $PR_RESULT"
|
|
exit 0
|
|
fi
|
|
|
|
echo "✅ Pull-request created!"
|
|
fi
|
|
|
|
|