Compare commits
No commits in common. "d2fb1a862285a82ba502ca139f4d816cf46ddbde" and "01b0ede22a30ae3124aca3ec71eb9f94cf555789" have entirely different histories.
d2fb1a8622
...
01b0ede22a
6 changed files with 90 additions and 178 deletions
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
75
.gitlab-ci.yml
Normal file
75
.gitlab-ci.yml
Normal file
|
@ -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
|
42
README.md
42
README.md
|
@ -1,35 +1,20 @@
|
||||||
# ilot.io
|
# 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
|
This repository contains the source code to the [ilot.io](https://ilot.io)
|
||||||
defined in [`.forgejo/workflows/pages.yaml`](.forgejo/workflows/pages.yaml).
|
website.
|
||||||
That builds this website using ikiwiki, and pushes the build artifacts to the
|
|
||||||
`public` branch.
|
|
||||||
|
|
||||||
The `public` branch has its own workflow following steps defined in
|
## GitLab CI
|
||||||
[`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.
|
|
||||||
|
|
||||||
The deployment is done by a simple remote git push via SSH to a non-bare repo
|
This project's static Pages are built by [GitLab CI][ci], following the steps
|
||||||
where `git config receive.denyCurrentBranch` is set as `updateInstead`. This
|
defined in [`.gitlab-ci.yml`](.gitlab-ci.yml):
|
||||||
allows this repo to be checked out as `public`, allowing it to be a root for
|
|
||||||
your favorite HTTP server.
|
|
||||||
|
|
||||||
The following secrets are expected to be set for operation:
|
We are using a theme based on
|
||||||
* PAGES_PRIVKEY: SSH private key that is used to push to the HTTP server's git
|
[Bootstrap 3](https://lab.ilot.io/ilot/ikiwiki-bootstrap-ilot) using submodules.
|
||||||
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
|
|
||||||
|
|
||||||
## Building locally
|
## Building locally
|
||||||
|
|
||||||
|
@ -40,9 +25,9 @@ To work locally with this project, you'll have to follow the steps below:
|
||||||
* [mac][]
|
* [mac][]
|
||||||
* [linux][]
|
* [linux][]
|
||||||
* [source][]
|
* [source][]
|
||||||
|
1. Clone the submodules: `git submodule init && git submodule update`
|
||||||
1. Generate the website: `ikiwiki --setup ikiwiki.setup`
|
1. Generate the website: `ikiwiki --setup ikiwiki.setup`
|
||||||
1. Start http-server: `./test-server.sh`
|
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][].
|
Read more at ikiwiki's [documentation][].
|
||||||
|
|
||||||
|
@ -52,7 +37,7 @@ Read more at ikiwiki's [documentation][].
|
||||||
|
|
||||||
2. Checkout the forked repository.
|
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`
|
- `cd ilot.io`
|
||||||
|
|
||||||
3. Make your changes.
|
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
|
8. Once the tests in the merge-request pass, and reviewers are happy, your changes
|
||||||
will be merged.
|
will be merged.
|
||||||
|
|
||||||
|
[ci]: https://about.gitlab.com/gitlab-ci/
|
||||||
[ikiwiki]: https://ikiwiki.info/
|
[ikiwiki]: https://ikiwiki.info/
|
||||||
[source]: https://ikiwiki.info/install/
|
[source]: https://ikiwiki.info/install/
|
||||||
[linux]: https://ikiwiki.info/setup/
|
[linux]: https://ikiwiki.info/setup/
|
||||||
[mac]: https://ikiwiki.info/tips/ikiwiki_on_mac_os_x/
|
[mac]: https://ikiwiki.info/tips/ikiwiki_on_mac_os_x/
|
||||||
[documentation]: https://ikiwiki.info/
|
[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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue