147 lines
5.5 KiB
YAML
147 lines
5.5 KiB
YAML
## Updates demo site (https://github.com/zetxek/adritian-demo)
|
|
## taken from https://stackoverflow.com/a/68213855/570087
|
|
|
|
name: PR demo site (on external PR)
|
|
|
|
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_target:
|
|
types: [labeled]
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
update-demo:
|
|
env:
|
|
SOURCE_BRANCH_NAME: ${{ github.head_ref || github.ref_name }} # PR branch name
|
|
PR_NUMBER: ${{ github.event.number }}
|
|
runs-on: ubuntu-latest
|
|
if: contains(github.event.pull_request.labels.*.name, 'safe to test')
|
|
steps:
|
|
- name: Checkout source repository (theme)
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: theme-source
|
|
ref: ${{ github.head_ref }}
|
|
token: ${{ secrets.PRIVATE_TOKEN_GITHUB }}
|
|
|
|
- name: Checkout demo repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: zetxek/adritian-demo
|
|
path: demo-repo
|
|
token: ${{ secrets.PRIVATE_TOKEN_GITHUB }}
|
|
|
|
- name: Dump github context
|
|
run: echo "$GITHUB_CONTEXT"
|
|
shell: bash
|
|
env:
|
|
GITHUB_CONTEXT: ${{ toJson(github) }}
|
|
|
|
- name: Send pull-request
|
|
run: |
|
|
LATEST_TAG=$(cd theme-source && git describe --tags --always)
|
|
LATEST_COMMIT=$(cd theme-source && git rev-parse HEAD)
|
|
SOURCE_REPOSITORY="zetxek/adritian-free-hugo-theme"
|
|
REPOSITORY="zetxek/adritian-demo"
|
|
REPO_NAME=${{ github.event.pull_request.head.repo.full_name }}
|
|
FOLDER="bin/$REPOSITORY"
|
|
PR_URL="https://github.com/$SOURCE_REPOSITORY/pull/$PR_NUMBER"
|
|
BRANCH_NAME="theme-update/update-theme-to-$LATEST_TAG"
|
|
BASE_BRANCH="main"
|
|
ASSIGNEE="zetxek"
|
|
|
|
echo "Latest tag: $LATEST_TAG"
|
|
echo "Latest commit: $LATEST_COMMIT"
|
|
echo "PR URL: $PR_URL"
|
|
|
|
git config --global --add --bool push.autoSetupRemote true
|
|
|
|
# Clone the remote repository and change working directory to the
|
|
# folder it was cloned to.
|
|
git clone \
|
|
--depth=1 \
|
|
--branch=main \
|
|
https://some-user:${{ secrets.PRIVATE_TOKEN_GITHUB }}@github.com/$REPOSITORY \
|
|
$FOLDER
|
|
|
|
cd $FOLDER
|
|
|
|
# Setup the committers identity.
|
|
git config user.email "actions@github.com"
|
|
git config user.name "GitHub Actions - update theme module version"
|
|
|
|
# Create a new feature branch for the changes.
|
|
echo "Working branch: $BRANCH_NAME"
|
|
git checkout -b $BRANCH_NAME
|
|
|
|
# Commit the changes and push the feature branch to origin
|
|
git config --global --add --bool push.autoSetupRemote true
|
|
echo "Committing all changes."
|
|
git add --all
|
|
|
|
COMMIT_MSG_THEME='chore: update theme module version to `'"$LATEST_TAG"'`'
|
|
echo 'Updating theme module: '"$COMMIT_MSG_THEME"
|
|
git commit -am "$COMMIT_MSG_THEME" && git push --force || echo "No changes to theme"
|
|
|
|
# Copy content from the checked-out theme source
|
|
cp ../../theme-source/exampleSite/hugo.toml hugo.toml
|
|
# Update URL
|
|
sed -i -e "s/\"https\:\/\/www\.adrianmoreno\.info\"/\"https\:\/\/adritian-demo\.vercel\.app\/\"/g" hugo.toml
|
|
|
|
COMMIT_MSG_CONFIG='chore: update config/content to `'"$LATEST_TAG"'` from https://github.com/zetxek/adritian-free-hugo-theme'
|
|
echo "Committing content/config: $COMMIT_MSG_CONFIG"
|
|
git commit -am "$COMMIT_MSG_CONFIG" && git push --force || echo "No changes to config"
|
|
|
|
echo "Pushing branch: $BRANCH_NAME"
|
|
git push origin $BRANCH_NAME --force
|
|
|
|
# Store the PAT in a file that can be accessed by the
|
|
# GitHub CLI.
|
|
echo "${{ secrets.PRIVATE_TOKEN_GITHUB }}" > token.txt
|
|
|
|
# Authorize GitHub CLI for the current repository and
|
|
# create a pull-requests containing the updates.
|
|
echo "Logging in to GitHub CLI."
|
|
gh auth login --with-token < token.txt
|
|
|
|
# Check if the PR already exists - if there's no "number" returned, we default to empty string
|
|
PR_EXISTS=$(gh pr list --state open --base $BASE_BRANCH --head $BRANCH_NAME --json number | jq '.[0].number // empty')
|
|
echo "PR_EXISTS: $PR_EXISTS"
|
|
# Check if there's a PR number. If the PR exists, update it (empty = it doesn't exist)
|
|
if [ -n "$PR_EXISTS" ]; then
|
|
echo "PR Exists. Updating pull-request..."
|
|
gh pr view
|
|
|
|
echo "✅ Pull-request created - done! "
|
|
|
|
# Else, we create it
|
|
else
|
|
echo "✨PR Does not exist yet. Creating pull-request..."
|
|
PR_TITLE='preview: update theme to `'$SOURCE_BRANCH_NAME'`'
|
|
echo 'PR title: '$PR_TITLE
|
|
PR_BODY="⚠️ The source PR is not merged yet - this is a preview PR.
|
|
🤖 This automated PR updates the theme version to a PR in the source repo: $PR_URL.
|
|
🔗 Triggered by https://github.com/zetxek/adritian-free-hugo-theme/actions/workflows/update-demo-pr.yml"
|
|
echo "PR body: "$PR_BODY
|
|
|
|
gh pr create \
|
|
--title "$PR_TITLE" \
|
|
--body "$PR_BODY" \
|
|
--head $BRANCH_NAME \
|
|
--base $BASE_BRANCH \
|
|
--assignee $ASSIGNEE \
|
|
--label preview
|
|
|
|
echo "✅ Pull-request created - done! "
|
|
fi
|
|
|
|
|