diff --git a/.forgejo/workflows/cleanup.yaml b/.forgejo/workflows/cleanup.yaml deleted file mode 100644 index 69921a7..0000000 --- a/.forgejo/workflows/cleanup.yaml +++ /dev/null @@ -1,33 +0,0 @@ -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 gawk grep - - name: Public repo pull - uses: actions/checkout@v4 - with: - fetch-depth: 0 - token: ${{ secrets.PAGES_TOKEN }} - ref: public - - name: Render website - run: | - export GITHUB_PR_NAME=$(grep -l ${{ github.sha }} previews/*/git_sha.txt | awk -F '/' '{print $2}') - echo $GITHUB_PR_NAME >> $GITHUB_ENV - 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 diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml deleted file mode 100644 index c82b4db..0000000 --- a/.forgejo/workflows/deploy.yaml +++ /dev/null @@ -1,27 +0,0 @@ -on: - push: - branches: - - 'public' - -jobs: - deploy: - runs-on: x86_64 - container: alpine:latest - env: - GIT_SSH_COMMAND: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no - steps: - - name: Environment setup - run: | - apk add git nodejs openssh-client-common openssh-client-default - - name: Start ssh-agent - uses: https://github.com/webfactory/ssh-agent@v0.9.0 - with: - ssh-private-key: ${{ secrets.PAGES_PRIVKEY }} - - name: Repo pull - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Website upload - run: | - git remote set-url origin ${{ vars.PAGES_TARGET }} - git push -f diff --git a/.forgejo/workflows/pages.yaml b/.forgejo/workflows/pages.yaml deleted file mode 100644 index de37353..0000000 --- a/.forgejo/workflows/pages.yaml +++ /dev/null @@ -1,42 +0,0 @@ -on: - push: - branches: - - 'main' - -jobs: - render: - runs-on: x86_64 - container: - image: alpine:latest - steps: - - name: Environment setup - run: | - apk add git ikiwiki po4a perl-yaml-tiny tree nodejs - - 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: ikiwiki --setup ikiwiki.setup - - 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 > 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 diff --git a/.forgejo/workflows/preview.yaml b/.forgejo/workflows/preview.yaml deleted file mode 100644 index 3ad603e..0000000 --- a/.forgejo/workflows/preview.yaml +++ /dev/null @@ -1,49 +0,0 @@ -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:]' | tr '/' '-')" >> $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 - echo ${{ github.sha }} > previews/$GITHUB_PR_NAME/git_sha.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 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 diff --git a/README.md b/README.md index d969bd4..4e3515b 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,20 @@ # ilot.io -Upstream: https://forge.ilot.io/ilot/ilot.io +Upstream: https://lab.ilot.io/ilot/ilot.io - - + -## Forgejo Actions +## Description -This project's static Pages are built by Forgejo Actions, following the steps -defined in [`.forgejo/workflows/pages.yaml`](.forgejo/workflows/pages.yaml). -That builds this website using ikiwiki, and pushes the build artifacts to the -`public` branch. +This repository contains the source code to the [ilot.io](https://ilot.io) +website. -The `public` branch has its own workflow following steps defined in -[`forgejo/workflows/deploy.yaml`](.forgejo/workflows/deploy.yaml) -that uploads the artifacts to a remote HTTP server for deployment in -production. This workflow is automatically updated from `main` so that `public` -should never be manually modified. +## GitLab CI -The deployment is done by a simple remote git push via SSH to a non-bare repo -where `git config receive.denyCurrentBranch` is set as `updateInstead`. This -allows this repo to be checked out as `public`, allowing it to be a root for -your favorite HTTP server. +This project's static Pages are built by [GitLab CI][ci], following the steps +defined in [`.gitlab-ci.yml`](.gitlab-ci.yml): -The following secrets are expected to be set for operation: -* PAGES_PRIVKEY: SSH private key that is used to push to the HTTP server's git -repo -* PAGES_TOKEN: Forgejo application token used to push to `public` branch. - -The following variables are expected to be set for operation: -* PAGES_TARGET: SSH target for HTTP server's git repo, following this format: -user@example.net:/path/to/http/repo +We are using a theme based on +[Bootstrap 3](https://lab.ilot.io/ilot/ikiwiki-bootstrap-ilot) using submodules. ## Building locally @@ -40,9 +25,9 @@ To work locally with this project, you'll have to follow the steps below: * [mac][] * [linux][] * [source][] +1. Clone the submodules: `git submodule init && git submodule update` 1. Generate the website: `ikiwiki --setup ikiwiki.setup` 1. Start http-server: `./test-server.sh` -1. Preview your project: open 127.0.0.1:8080 in your browser Read more at ikiwiki's [documentation][]. @@ -52,7 +37,7 @@ Read more at ikiwiki's [documentation][]. 2. Checkout the forked repository. - - `git clone ssh://git@forge.ilot.io/$USER/ilot.io` + - `git clone ssh://git@lab.ilot.io/$USER/ilot.io` - `cd ilot.io` 3. Make your changes. @@ -75,8 +60,11 @@ Read more at ikiwiki's [documentation][]. 8. Once the tests in the merge-request pass, and reviewers are happy, your changes will be merged. +[ci]: https://about.gitlab.com/gitlab-ci/ [ikiwiki]: https://ikiwiki.info/ [source]: https://ikiwiki.info/install/ [linux]: https://ikiwiki.info/setup/ [mac]: https://ikiwiki.info/tips/ikiwiki_on_mac_os_x/ [documentation]: https://ikiwiki.info/ +[userpages]: https://docs.gitlab.com/ce/user/project/pages/introduction.html#user-or-group-pages +[projpages]: https://docs.gitlab.com/ce/user/project/pages/introduction.html#project-pages diff --git a/content/footer.fr.mo b/content/footer.fr.mo index 9e346d8..0c1e671 100644 Binary files a/content/footer.fr.mo and b/content/footer.fr.mo differ diff --git a/content/footer.fr.po b/content/footer.fr.po index 1dba242..0c5c449 100644 --- a/content/footer.fr.po +++ b/content/footer.fr.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ilot.io\n" -"POT-Creation-Date: 2024-08-29 21:32-0400\n" -"PO-Revision-Date: 2024-08-29 21:33-0400\n" +"POT-Creation-Date: 2024-06-20 21:11-0400\n" +"PO-Revision-Date: 2024-06-20 21:35-0400\n" "Last-Translator: \n" "Language-Team: dev@ayakael.net\n" "Language: fr\n" @@ -21,8 +21,12 @@ msgstr "" msgid "" " Copyleft © 2024-2024 ilot [[CC-BY-SA|meta/" "license]] Powered by " -"[[ikiwiki|http://ikiwiki.info/]]. " +"[[ikiwiki|http://ikiwiki.info/]]. [[Theme|https://gitlab.com/anarcat/" +"ikiwiki-bootstrap-anarcat]] by [[anarcat|https://anarc.at/" +"blog/2015-09-09-bootstrap]]. " msgstr "" " Copyleft © 2024-2024 ilot [[CC-BY-SA|meta/" "license]] Propulsé par " -"[[ikiwiki|http://ikiwiki.info/]]. " +"[[ikiwiki|http://ikiwiki.info/]]. [[Thème|https://gitlab.com/anarcat/" +"ikiwiki-bootstrap-anarcat]] par [[anarcat|https://anarc.at/" +"blog/2015-09-09-bootstrap]]. " diff --git a/content/footer.html b/content/footer.html index 1c07de6..998da51 100644 --- a/content/footer.html +++ b/content/footer.html @@ -4,5 +4,6 @@ Powered by [[ikiwiki|http://ikiwiki.info/]]. + [[Theme|https://gitlab.com/anarcat/ikiwiki-bootstrap-anarcat]] by [[anarcat|https://anarc.at/blog/2015-09-09-bootstrap]].
diff --git a/content/footer.pot b/content/footer.pot index ec14c7d..6060afc 100644 --- a/content/footer.pot +++ b/content/footer.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-08-29 21:32-0400\n" +"POT-Creation-Date: 2024-06-20 23:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME