From 7ccb19f7c0bae527253c8700da7dcddfa5ef9b56 Mon Sep 17 00:00:00 2001 From: Val Horomanskii Date: Fri, 28 Jun 2024 17:25:40 -0400 Subject: [PATCH] Add gitlab ci --- .gitignore | 3 ++ .gitlab-ci.yml | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..72d03f4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +content/.ikiwiki +public/ +http-server/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..5c13bdb --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,75 @@ +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