gitlab-ci: add test preview feature
This commit is contained in:
parent
c21ccab935
commit
aaf6a6a030
1 changed files with 72 additions and 18 deletions
|
@ -1,25 +1,79 @@
|
|||
before_script:
|
||||
- sudo apk add git ikiwiki po4a perl-yaml-tiny
|
||||
workflow:
|
||||
rules: # disable tag pipelines and duplicate MR pipelines
|
||||
- if: $CI_COMMIT_BRANCH
|
||||
|
||||
test:
|
||||
stage: test
|
||||
script:
|
||||
- ikiwiki --setup ikiwiki.setup
|
||||
- ln -s index.en.html public/index.html
|
||||
rules:
|
||||
- if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
|
||||
tags:
|
||||
- knit
|
||||
variables:
|
||||
MAIN_BRANCH_PATH: "."
|
||||
EPHEMERAL_BRANCHES_PATH: preview # subpath to ephemeral branches content for preview
|
||||
|
||||
pages:
|
||||
stage: deploy
|
||||
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:
|
||||
- ikiwiki --setup ikiwiki.setup
|
||||
- ln -s index.en.html public/index.html
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
- ikiwiki --setup ikiwiki.setup
|
||||
- | # create symbolic link to index.en.html if public/index.html does not exist
|
||||
if [ ! -L "public/index.html" ]; then
|
||||
ln -s index.en.html public/index.html
|
||||
fi
|
||||
- |
|
||||
if [ -z "$CURRENT_CONTENT_PATH" ]; then
|
||||
mv public output
|
||||
mkdir -p public
|
||||
mv public public/$CURRENT_CONTENT_PATH
|
||||
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:
|
||||
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
|
||||
# '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