forgejo-ci: generate previews when in PR #10
4 changed files with 84 additions and 76 deletions
32
.forgejo/workflows/cleanup.yaml
Normal file
32
.forgejo/workflows/cleanup.yaml
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [ closed, merged ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cleanup:
|
||||||
|
runs-on: x86_64
|
||||||
|
container:
|
||||||
|
image: alpine:latest
|
||||||
|
steps:
|
||||||
|
- name: Environment setup
|
||||||
|
run: |
|
||||||
|
apk add git nodejs jq coreutils curl tree
|
||||||
|
echo "GITHUB_PR_NAME=$(curl -Ls ${{ github.server_url }}/api/v1/repos/${{ github.repository }}/pulls/${{ github.ref_name }} | jq .title | tr ' ' '-' | tr -d ':' | tr -d '"' | tr '[:upper:]' '[:lower:]' )" >> $GITHUB_ENV
|
||||||
|
- name: Public repo pull
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
token: ${{ secrets.PAGES_TOKEN }}
|
||||||
|
ref: public
|
||||||
|
- name: Render website
|
||||||
|
run: |
|
||||||
|
rm -rf previews/$GITHUB_PR_NAME || true
|
||||||
|
cd previews
|
||||||
|
tree -d -H '.' -L 1 --noreport --charset utf-8 -T "Versions" -o index.html
|
||||||
|
- name: Website upload
|
||||||
|
run: |
|
||||||
|
git config user.name "forgejo-actions[bot]"
|
||||||
|
git config user.email "dev@ayakael.net"
|
||||||
|
git add .
|
||||||
|
git commit -m "Clean-up $GITHUB_PR_NAME"
|
||||||
|
git push
|
|
@ -1,4 +1,7 @@
|
||||||
on: [push]
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'main'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
render:
|
render:
|
||||||
|
|
48
.forgejo/workflows/preview.yaml
Normal file
48
.forgejo/workflows/preview.yaml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [ assigned, opened, synchronize, reopened ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
preview:
|
||||||
|
runs-on: x86_64
|
||||||
|
container:
|
||||||
|
image: alpine:latest
|
||||||
|
steps:
|
||||||
|
- name: Environment setup
|
||||||
|
run: |
|
||||||
|
apk add git ikiwiki po4a perl-yaml-tiny tree nodejs jq coreutils curl
|
||||||
|
echo "GITHUB_PR_NAME=$(curl -Ls ${{ github.server_url }}/api/v1/repos/${{ github.repository }}/pulls/${{ github.ref_name }} | jq .title | tr ' ' '-' | tr -d ':' | tr -d '"' | tr '[:upper:]' '[:lower:]' )" >> $GITHUB_ENV
|
||||||
|
- name: Repo pull
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
token: ${{ secrets.PAGES_TOKEN }}
|
||||||
|
- name: Public repo pull
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
ref: public
|
||||||
|
path: public
|
||||||
|
token: ${{ secrets.PAGES_TOKEN }}
|
||||||
|
- name: Render website
|
||||||
|
run: |
|
||||||
|
rm -rf public/previews/$GITHUB_PR_NAME || true
|
||||||
|
mkdir -p public/previews/$GITHUB_PR_NAME
|
||||||
|
sed -i "s|destdir.*|destdir: ./public/previews/$GITHUB_PR_NAME|" ikiwiki.setup
|
||||||
|
ikiwiki --setup ikiwiki.setup
|
||||||
|
cd public/previews
|
||||||
|
tree -d -H '.' -L 1 --noreport --charset utf-8 -T "Versions" -o index.html
|
||||||
|
- name: Website upload
|
||||||
|
run: |
|
||||||
|
rm -Rf public/.forgejo
|
||||||
|
mkdir -p public/.forgejo/workflows
|
||||||
|
cp .forgejo/workflows/deploy.yaml public/.forgejo/workflows/.
|
||||||
|
git log -1 --pretty=%B > commit.txt
|
||||||
|
cd public
|
||||||
|
date > previews/$GITHUB_PR_NAME/generated.txt
|
||||||
|
# Note: the following account information will not work on GHES
|
||||||
|
git config user.name "forgejo-actions[bot]"
|
||||||
|
git config user.email "dev@ayakael.net"
|
||||||
|
git add .
|
||||||
|
git commit -F ../commit.txt
|
||||||
|
git push
|
|
@ -1,75 +0,0 @@
|
||||||
workflow:
|
|
||||||
rules: # disable tag pipelines and duplicate MR pipelines
|
|
||||||
- if: $CI_COMMIT_BRANCH
|
|
||||||
|
|
||||||
variables:
|
|
||||||
MAIN_BRANCH_PATH: "."
|
|
||||||
EPHEMERAL_BRANCHES_PATH: preview # subpath to ephemeral branches content for preview
|
|
||||||
|
|
||||||
pages:
|
|
||||||
stage: build
|
|
||||||
cache:
|
|
||||||
key: gitlab-pages
|
|
||||||
paths: [public]
|
|
||||||
before_script:
|
|
||||||
- sudo apk add git ikiwiki po4a perl-yaml-tiny tree
|
|
||||||
# CURRENT_CONTENT_PATH is defined in rules, different between main branch and ephemeral branches
|
|
||||||
- mkdir -p public/$CURRENT_CONTENT_PATH && ls public/$CURRENT_CONTENT_PATH/..
|
|
||||||
- | # create ephermetal branched path if not existent
|
|
||||||
if [ ! -d "public/$EPHEMERAL_BRANCHES_PATH" ]; then
|
|
||||||
mkdir -p public/$EPHEMERAL_BRANCHES_PATH
|
|
||||||
fi
|
|
||||||
- | # avoid deleting main branch content when cache has been erased
|
|
||||||
if [ "$CI_COMMIT_BRANCH" != "$CI_DEFAULT_BRANCH" ] && [ ! -f public/$MAIN_BRANCH_PATH/index.html ]; then
|
|
||||||
echo -e "💥\e[91;1m Unable to retrieve $CI_DEFAULT_BRANCH generated files from cache ; please regenerate $CI_DEFAULT_BRANCH files first\e[0m"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
- rm -rf public/$CURRENT_CONTENT_PATH || true # remove last version of current branch
|
|
||||||
script:
|
|
||||||
- | # sed needs to be in its own section
|
|
||||||
sed -i "s|destdir.*|destdir: ./public/$CURRENT_CONTENT_PATH|" ikiwiki.setup
|
|
||||||
- ikiwiki --setup ikiwiki.setup
|
|
||||||
- | # create symbolic link to index.en.html if public/index.html does not exist
|
|
||||||
if [ ! -L "public/$CURRENT_CONTENT_PATH/index.html" ]; then
|
|
||||||
ln -s index.en.html public/$CURRENT_CONTENT_PATH/index.html
|
|
||||||
fi
|
|
||||||
- cd public/$EPHEMERAL_BRANCHES_PATH
|
|
||||||
- tree -d -H '.' -L 1 --noreport --charset utf-8 -T "Versions" -o index.html # generate a root HTML listing all previews for easier access
|
|
||||||
environment:
|
|
||||||
name: pages/$CI_COMMIT_BRANCH
|
|
||||||
action: start
|
|
||||||
url: $CI_PAGES_URL/$CURRENT_CONTENT_PATH
|
|
||||||
on_stop: pages-clean-preview
|
|
||||||
rules:
|
|
||||||
# 'main branch' is exposed at GitLab Pages root
|
|
||||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
||||||
variables:
|
|
||||||
CURRENT_CONTENT_PATH: $MAIN_BRANCH_PATH
|
|
||||||
# other (short-lived) branches generation are exposed in 'EPHEMERAL_BRANCHES_PATH/branch-name-sanitized' sub path
|
|
||||||
- variables:
|
|
||||||
CURRENT_CONTENT_PATH: $EPHEMERAL_BRANCHES_PATH/$CI_COMMIT_REF_SLUG
|
|
||||||
artifacts:
|
|
||||||
paths: [public]
|
|
||||||
expire_in: 1h
|
|
||||||
tags:
|
|
||||||
- knit
|
|
||||||
|
|
||||||
pages-clean-preview:
|
|
||||||
stage: build
|
|
||||||
cache:
|
|
||||||
key: gitlab-pages
|
|
||||||
paths: [public]
|
|
||||||
variables:
|
|
||||||
GIT_STRATEGY: none # git files not available after branch deletion
|
|
||||||
FOLDER_TO_DELETE: $EPHEMERAL_BRANCHES_PATH/$CI_COMMIT_REF_SLUG # an indirection to allow arbitrary deletion when launching this job
|
|
||||||
script:
|
|
||||||
- rm -rf public/$FOLDER_TO_DELETE
|
|
||||||
environment:
|
|
||||||
name: pages/$CI_COMMIT_BRANCH
|
|
||||||
action: stop
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
|
|
||||||
when: manual
|
|
||||||
allow_failure: true
|
|
||||||
tags:
|
|
||||||
- knit
|
|
Loading…
Reference in a new issue