Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
# ignore hidden files
.*

!.well-known/

third-party/beautiful-jekyll/_posts/

_site/
3 changes: 3 additions & 0 deletions .gitattributes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
# ensure dockerfiles are checked out with LF line endings
Dockerfile text eol=lf
*.dockerfile text eol=lf
69 changes: 0 additions & 69 deletions .github/workflows/build.yml

This file was deleted.

52 changes: 52 additions & 0 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
---
name: Jekyll CI

on:
pull_request:
branches:
- master
types:
- opened
- synchronize
- reopened
push:
branches:
- master

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true

jobs:
call-jekyll-build:
uses: ./.github/workflows/jekyll-build.yml
with:
target_branch: gh-pages
clean_gh_pages: true
secrets:
GH_BOT_EMAIL: ${{ secrets.GH_BOT_EMAIL }}
GH_BOT_NAME: ${{ secrets.GH_BOT_NAME }}
GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }}

release:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- name: Setup Release
id: setup-release
uses: LizardByte/setup-release-action@v2024.919.143601
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}

- name: Create Release
id: action
uses: LizardByte/create-release-action@v2024.919.143026
with:
allowUpdates: false
artifacts: ''
body: ${{ steps.setup-release.outputs.release_body }}
generateReleaseNotes: ${{ steps.setup-release.outputs.release_generate_release_notes }}
name: ${{ steps.setup-release.outputs.release_tag }}
prerelease: true
tag: ${{ steps.setup-release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}
241 changes: 241 additions & 0 deletions .github/workflows/jekyll-build.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
---
name: Build Jekyll

on:
workflow_call:
inputs:
site_artifact:
description: 'Artifact name to download'
required: false
default: ''
type: string
extract_archive:
description: |
Name of nested archive to extract. In some cases you may want to upload a zip of files to reduce
upload size and time. If you do this, you must specify the name of the archive to extract.
required: false
default: ''
type: string
config_file:
description: 'Configuration file to use, relative to the site source directory'
required: false
default: '_config.yml'
type: string
target_branch:
description: 'Branch to deploy to. Branch must already exist.'
required: false
default: 'gh-pages'
type: string
clean_gh_pages:
description: 'Clean gh-pages before deploying'
required: false
default: true
type: boolean
theme_ref:
description: 'Branch, tag, or commit SHA of the theme repository to use'
required: false
default: 'master'
type: string
secrets:
GH_BOT_EMAIL:
description: 'Email address of the bot account'
required: true
GH_BOT_NAME:
description: 'Name of the bot account'
required: true
GH_BOT_TOKEN:
description: 'Personal access token of the bot account'
required: true

jobs:
build:
name: Build Jekyll
runs-on: ubuntu-latest
steps:
- name: Input validation
run: |
error=false
if [ "${{ inputs.site_artifact }}" == 'site' ]; then
echo "Artifact name cannot be 'site'"
error=true
fi

if [ "$error" = true ]; then
exit 1
fi

- name: Checkout theme
uses: actions/checkout@v4
with:
repository: LizardByte/LizardByte.github.io
ref: ${{ github.repository == 'LizardByte/LizardByte.github.io' && github.ref || inputs.theme_ref }}
submodules: recursive
path: theme

- name: Download input artifact
if: ${{ inputs.site_artifact != '' }}
uses: actions/download-artifact@v4
with:
name: ${{ inputs.site_artifact }}
path: project

- name: Extract archive
if: ${{ inputs.site_artifact != '' && inputs.extract_archive != '' }}
working-directory: project
run: |
case "${{ inputs.extract_archive }}" in
*.tar.gz|*.tgz)
tar -xzf ${{ inputs.extract_archive }} -C .
;;
*.tar)
tar -xf ${{ inputs.extract_archive }} -C .
;;
*.zip)
unzip ${{ inputs.extract_archive }} -d .
;;
*)
echo "Unsupported archive format"
exit 1
;;
esac
rm -f ${{ inputs.extract_archive }}

- name: Setup project
if: ${{ github.repository == 'LizardByte/LizardByte.github.io' }}
run: |
mkdir -p ./project
cp -RT ./theme/ ./project/
rm -rf ./project/third-party

- name: Create site
env:
TMPDIR: /home/runner/work/tmp
run: |
mkdir -p ${TMPDIR}

base_dirs=(
./theme/third-party/beautiful-jekyll
./theme
)

targets=(
*.gemspec
_data
_includes
_layouts
_sass
assets
404.html
_config_theme.yml
favicon.ico
feed.xml
Gemfile
staticman.yml
tags.html
)

for base_dir in "${base_dirs[@]}"; do
for target in "${targets[@]}"; do
if [ -e "$base_dir/$target" ]; then
cp -rf "$base_dir/$target" ${TMPDIR}/
fi
done
done

# copy project directory, they should only come from the project repo
cp -RTf ./project/ ${TMPDIR}/

# remove the workspace
cd ..
rm -rf ${GITHUB_WORKSPACE}

# move the temporary directory to the workspace
mv ${TMPDIR} ${GITHUB_WORKSPACE}
cd ${GITHUB_WORKSPACE}

# debug contents recursively
ls -Ra

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'

- name: Install dependencies
run: |
bundle install

- name: Setup Pages
id: configure-pages
uses: actions/configure-pages@v5

- name: Setup CI config
run: |
echo "---" > _config_ci.yml
echo "baseurl: ${{ steps.configure-pages.outputs.base_path }}" >> _config_ci.yml

- name: Build site
env:
JEKYLL_ENV: production
PAGES_REPO_NWO: ${{ github.repository }}
run: |
# if inputs.config_file exists
config_files="_config_ci.yml,_config_theme.yml"
if [ -e "${{ inputs.config_file }}" ]; then
config_files="${config_files},${{ inputs.config_file }}"
fi

bundle exec jekyll build --future --config ${config_files}

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: site
path: _site
if-no-files-found: error
include-hidden-files: true
retention-days: 1

deploy:
name: Deploy to Pages
if: >-
(github.event_name == 'push' && github.ref == 'refs/heads/master') ||
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout gh-pages
uses: actions/checkout@v4
with:
ref: ${{ inputs.target_branch }}
path: gh-pages
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token
fetch-depth: 0 # otherwise, will fail to push refs to dest repo

- name: Clean
if: ${{ inputs.clean_gh_pages }}
run: |
# empty contents of gh-pages
rm -f -r ./gh-pages/*

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: site
path: gh-pages

- name: no-jekyll
run: |
touch gh-pages/.nojekyll

- name: Deploy to gh-pages
uses: actions-js/push@v1.5
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}
author_email: ${{ secrets.GH_BOT_EMAIL }}
author_name: ${{ secrets.GH_BOT_NAME }}
directory: gh-pages
branch: ${{ inputs.target_branch }}
force: false
message: "Deploy site from ${{ github.sha }}"
8 changes: 1 addition & 7 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
# ignore JetBrains project
.idea/

# ignore node modules
node_modules/
package-lock.json

# ignore duplicated dist folder for localization
dist/en
dist/es-ES
_site/
4 changes: 4 additions & 0 deletions .gitmodules
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
[submodule "third-party/beautiful-jekyll"]
path = third-party/beautiful-jekyll
url = https://github.com/ReenigneArcher/beautiful-jekyll.git
branch = master
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
# ignore hidden files
.*

!.well-known/

third-party/beautiful-jekyll/_posts/

_site/
3 changes: 3 additions & 0 deletions .gitattributes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
# ensure dockerfiles are checked out with LF line endings
Dockerfile text eol=lf
*.dockerfile text eol=lf
69 changes: 0 additions & 69 deletions .github/workflows/build.yml

This file was deleted.

52 changes: 52 additions & 0 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
---
name: Jekyll CI

on:
pull_request:
branches:
- master
types:
- opened
- synchronize
- reopened
push:
branches:
- master

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true

jobs:
call-jekyll-build:
uses: ./.github/workflows/jekyll-build.yml
with:
target_branch: gh-pages
clean_gh_pages: true
secrets:
GH_BOT_EMAIL: ${{ secrets.GH_BOT_EMAIL }}
GH_BOT_NAME: ${{ secrets.GH_BOT_NAME }}
GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }}

release:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- name: Setup Release
id: setup-release
uses: LizardByte/setup-release-action@v2024.919.143601
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}

- name: Create Release
id: action
uses: LizardByte/create-release-action@v2024.919.143026
with:
allowUpdates: false
artifacts: ''
body: ${{ steps.setup-release.outputs.release_body }}
generateReleaseNotes: ${{ steps.setup-release.outputs.release_generate_release_notes }}
name: ${{ steps.setup-release.outputs.release_tag }}
prerelease: true
tag: ${{ steps.setup-release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}
241 changes: 241 additions & 0 deletions .github/workflows/jekyll-build.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
---
name: Build Jekyll

on:
workflow_call:
inputs:
site_artifact:
description: 'Artifact name to download'
required: false
default: ''
type: string
extract_archive:
description: |
Name of nested archive to extract. In some cases you may want to upload a zip of files to reduce
upload size and time. If you do this, you must specify the name of the archive to extract.
required: false
default: ''
type: string
config_file:
description: 'Configuration file to use, relative to the site source directory'
required: false
default: '_config.yml'
type: string
target_branch:
description: 'Branch to deploy to. Branch must already exist.'
required: false
default: 'gh-pages'
type: string
clean_gh_pages:
description: 'Clean gh-pages before deploying'
required: false
default: true
type: boolean
theme_ref:
description: 'Branch, tag, or commit SHA of the theme repository to use'
required: false
default: 'master'
type: string
secrets:
GH_BOT_EMAIL:
description: 'Email address of the bot account'
required: true
GH_BOT_NAME:
description: 'Name of the bot account'
required: true
GH_BOT_TOKEN:
description: 'Personal access token of the bot account'
required: true

jobs:
build:
name: Build Jekyll
runs-on: ubuntu-latest
steps:
- name: Input validation
run: |
error=false
if [ "${{ inputs.site_artifact }}" == 'site' ]; then
echo "Artifact name cannot be 'site'"
error=true
fi

if [ "$error" = true ]; then
exit 1
fi

- name: Checkout theme
uses: actions/checkout@v4
with:
repository: LizardByte/LizardByte.github.io
ref: ${{ github.repository == 'LizardByte/LizardByte.github.io' && github.ref || inputs.theme_ref }}
submodules: recursive
path: theme

- name: Download input artifact
if: ${{ inputs.site_artifact != '' }}
uses: actions/download-artifact@v4
with:
name: ${{ inputs.site_artifact }}
path: project

- name: Extract archive
if: ${{ inputs.site_artifact != '' && inputs.extract_archive != '' }}
working-directory: project
run: |
case "${{ inputs.extract_archive }}" in
*.tar.gz|*.tgz)
tar -xzf ${{ inputs.extract_archive }} -C .
;;
*.tar)
tar -xf ${{ inputs.extract_archive }} -C .
;;
*.zip)
unzip ${{ inputs.extract_archive }} -d .
;;
*)
echo "Unsupported archive format"
exit 1
;;
esac
rm -f ${{ inputs.extract_archive }}

- name: Setup project
if: ${{ github.repository == 'LizardByte/LizardByte.github.io' }}
run: |
mkdir -p ./project
cp -RT ./theme/ ./project/
rm -rf ./project/third-party

- name: Create site
env:
TMPDIR: /home/runner/work/tmp
run: |
mkdir -p ${TMPDIR}

base_dirs=(
./theme/third-party/beautiful-jekyll
./theme
)

targets=(
*.gemspec
_data
_includes
_layouts
_sass
assets
404.html
_config_theme.yml
favicon.ico
feed.xml
Gemfile
staticman.yml
tags.html
)

for base_dir in "${base_dirs[@]}"; do
for target in "${targets[@]}"; do
if [ -e "$base_dir/$target" ]; then
cp -rf "$base_dir/$target" ${TMPDIR}/
fi
done
done

# copy project directory, they should only come from the project repo
cp -RTf ./project/ ${TMPDIR}/

# remove the workspace
cd ..
rm -rf ${GITHUB_WORKSPACE}

# move the temporary directory to the workspace
mv ${TMPDIR} ${GITHUB_WORKSPACE}
cd ${GITHUB_WORKSPACE}

# debug contents recursively
ls -Ra

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'

- name: Install dependencies
run: |
bundle install

- name: Setup Pages
id: configure-pages
uses: actions/configure-pages@v5

- name: Setup CI config
run: |
echo "---" > _config_ci.yml
echo "baseurl: ${{ steps.configure-pages.outputs.base_path }}" >> _config_ci.yml

- name: Build site
env:
JEKYLL_ENV: production
PAGES_REPO_NWO: ${{ github.repository }}
run: |
# if inputs.config_file exists
config_files="_config_ci.yml,_config_theme.yml"
if [ -e "${{ inputs.config_file }}" ]; then
config_files="${config_files},${{ inputs.config_file }}"
fi

bundle exec jekyll build --future --config ${config_files}

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: site
path: _site
if-no-files-found: error
include-hidden-files: true
retention-days: 1

deploy:
name: Deploy to Pages
if: >-
(github.event_name == 'push' && github.ref == 'refs/heads/master') ||
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout gh-pages
uses: actions/checkout@v4
with:
ref: ${{ inputs.target_branch }}
path: gh-pages
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token
fetch-depth: 0 # otherwise, will fail to push refs to dest repo

- name: Clean
if: ${{ inputs.clean_gh_pages }}
run: |
# empty contents of gh-pages
rm -f -r ./gh-pages/*

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: site
path: gh-pages

- name: no-jekyll
run: |
touch gh-pages/.nojekyll

- name: Deploy to gh-pages
uses: actions-js/push@v1.5
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}
author_email: ${{ secrets.GH_BOT_EMAIL }}
author_name: ${{ secrets.GH_BOT_NAME }}
directory: gh-pages
branch: ${{ inputs.target_branch }}
force: false
message: "Deploy site from ${{ github.sha }}"
8 changes: 1 addition & 7 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
# ignore JetBrains project
.idea/

# ignore node modules
node_modules/
package-lock.json

# ignore duplicated dist folder for localization
dist/en
dist/es-ES
_site/
4 changes: 4 additions & 0 deletions .gitmodules
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
[submodule "third-party/beautiful-jekyll"]
path = third-party/beautiful-jekyll
url = https://github.com/ReenigneArcher/beautiful-jekyll.git
branch = master
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
# ignore hidden files
.*

!.well-known/

third-party/beautiful-jekyll/_posts/

_site/
3 changes: 3 additions & 0 deletions .gitattributes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
# ensure dockerfiles are checked out with LF line endings
Dockerfile text eol=lf
*.dockerfile text eol=lf
69 changes: 0 additions & 69 deletions .github/workflows/build.yml

This file was deleted.

52 changes: 52 additions & 0 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
---
name: Jekyll CI

on:
pull_request:
branches:
- master
types:
- opened
- synchronize
- reopened
push:
branches:
- master

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true

jobs:
call-jekyll-build:
uses: ./.github/workflows/jekyll-build.yml
with:
target_branch: gh-pages
clean_gh_pages: true
secrets:
GH_BOT_EMAIL: ${{ secrets.GH_BOT_EMAIL }}
GH_BOT_NAME: ${{ secrets.GH_BOT_NAME }}
GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }}

release:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- name: Setup Release
id: setup-release
uses: LizardByte/setup-release-action@v2024.919.143601
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}

- name: Create Release
id: action
uses: LizardByte/create-release-action@v2024.919.143026
with:
allowUpdates: false
artifacts: ''
body: ${{ steps.setup-release.outputs.release_body }}
generateReleaseNotes: ${{ steps.setup-release.outputs.release_generate_release_notes }}
name: ${{ steps.setup-release.outputs.release_tag }}
prerelease: true
tag: ${{ steps.setup-release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}
241 changes: 241 additions & 0 deletions .github/workflows/jekyll-build.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
---
name: Build Jekyll

on:
workflow_call:
inputs:
site_artifact:
description: 'Artifact name to download'
required: false
default: ''
type: string
extract_archive:
description: |
Name of nested archive to extract. In some cases you may want to upload a zip of files to reduce
upload size and time. If you do this, you must specify the name of the archive to extract.
required: false
default: ''
type: string
config_file:
description: 'Configuration file to use, relative to the site source directory'
required: false
default: '_config.yml'
type: string
target_branch:
description: 'Branch to deploy to. Branch must already exist.'
required: false
default: 'gh-pages'
type: string
clean_gh_pages:
description: 'Clean gh-pages before deploying'
required: false
default: true
type: boolean
theme_ref:
description: 'Branch, tag, or commit SHA of the theme repository to use'
required: false
default: 'master'
type: string
secrets:
GH_BOT_EMAIL:
description: 'Email address of the bot account'
required: true
GH_BOT_NAME:
description: 'Name of the bot account'
required: true
GH_BOT_TOKEN:
description: 'Personal access token of the bot account'
required: true

jobs:
build:
name: Build Jekyll
runs-on: ubuntu-latest
steps:
- name: Input validation
run: |
error=false
if [ "${{ inputs.site_artifact }}" == 'site' ]; then
echo "Artifact name cannot be 'site'"
error=true
fi

if [ "$error" = true ]; then
exit 1
fi

- name: Checkout theme
uses: actions/checkout@v4
with:
repository: LizardByte/LizardByte.github.io
ref: ${{ github.repository == 'LizardByte/LizardByte.github.io' && github.ref || inputs.theme_ref }}
submodules: recursive
path: theme

- name: Download input artifact
if: ${{ inputs.site_artifact != '' }}
uses: actions/download-artifact@v4
with:
name: ${{ inputs.site_artifact }}
path: project

- name: Extract archive
if: ${{ inputs.site_artifact != '' && inputs.extract_archive != '' }}
working-directory: project
run: |
case "${{ inputs.extract_archive }}" in
*.tar.gz|*.tgz)
tar -xzf ${{ inputs.extract_archive }} -C .
;;
*.tar)
tar -xf ${{ inputs.extract_archive }} -C .
;;
*.zip)
unzip ${{ inputs.extract_archive }} -d .
;;
*)
echo "Unsupported archive format"
exit 1
;;
esac
rm -f ${{ inputs.extract_archive }}

- name: Setup project
if: ${{ github.repository == 'LizardByte/LizardByte.github.io' }}
run: |
mkdir -p ./project
cp -RT ./theme/ ./project/
rm -rf ./project/third-party

- name: Create site
env:
TMPDIR: /home/runner/work/tmp
run: |
mkdir -p ${TMPDIR}

base_dirs=(
./theme/third-party/beautiful-jekyll
./theme
)

targets=(
*.gemspec
_data
_includes
_layouts
_sass
assets
404.html
_config_theme.yml
favicon.ico
feed.xml
Gemfile
staticman.yml
tags.html
)

for base_dir in "${base_dirs[@]}"; do
for target in "${targets[@]}"; do
if [ -e "$base_dir/$target" ]; then
cp -rf "$base_dir/$target" ${TMPDIR}/
fi
done
done

# copy project directory, they should only come from the project repo
cp -RTf ./project/ ${TMPDIR}/

# remove the workspace
cd ..
rm -rf ${GITHUB_WORKSPACE}

# move the temporary directory to the workspace
mv ${TMPDIR} ${GITHUB_WORKSPACE}
cd ${GITHUB_WORKSPACE}

# debug contents recursively
ls -Ra

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'

- name: Install dependencies
run: |
bundle install

- name: Setup Pages
id: configure-pages
uses: actions/configure-pages@v5

- name: Setup CI config
run: |
echo "---" > _config_ci.yml
echo "baseurl: ${{ steps.configure-pages.outputs.base_path }}" >> _config_ci.yml

- name: Build site
env:
JEKYLL_ENV: production
PAGES_REPO_NWO: ${{ github.repository }}
run: |
# if inputs.config_file exists
config_files="_config_ci.yml,_config_theme.yml"
if [ -e "${{ inputs.config_file }}" ]; then
config_files="${config_files},${{ inputs.config_file }}"
fi

bundle exec jekyll build --future --config ${config_files}

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: site
path: _site
if-no-files-found: error
include-hidden-files: true
retention-days: 1

deploy:
name: Deploy to Pages
if: >-
(github.event_name == 'push' && github.ref == 'refs/heads/master') ||
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout gh-pages
uses: actions/checkout@v4
with:
ref: ${{ inputs.target_branch }}
path: gh-pages
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token
fetch-depth: 0 # otherwise, will fail to push refs to dest repo

- name: Clean
if: ${{ inputs.clean_gh_pages }}
run: |
# empty contents of gh-pages
rm -f -r ./gh-pages/*

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: site
path: gh-pages

- name: no-jekyll
run: |
touch gh-pages/.nojekyll

- name: Deploy to gh-pages
uses: actions-js/push@v1.5
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}
author_email: ${{ secrets.GH_BOT_EMAIL }}
author_name: ${{ secrets.GH_BOT_NAME }}
directory: gh-pages
branch: ${{ inputs.target_branch }}
force: false
message: "Deploy site from ${{ github.sha }}"
8 changes: 1 addition & 7 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
# ignore JetBrains project
.idea/

# ignore node modules
node_modules/
package-lock.json

# ignore duplicated dist folder for localization
dist/en
dist/es-ES
_site/
4 changes: 4 additions & 0 deletions .gitmodules
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
[submodule "third-party/beautiful-jekyll"]
path = third-party/beautiful-jekyll
url = https://github.com/ReenigneArcher/beautiful-jekyll.git
branch = master
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
# ignore hidden files
.*

!.well-known/

third-party/beautiful-jekyll/_posts/

_site/
3 changes: 3 additions & 0 deletions .gitattributes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
# ensure dockerfiles are checked out with LF line endings
Dockerfile text eol=lf
*.dockerfile text eol=lf
69 changes: 0 additions & 69 deletions .github/workflows/build.yml

This file was deleted.

52 changes: 52 additions & 0 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
---
name: Jekyll CI

on:
pull_request:
branches:
- master
types:
- opened
- synchronize
- reopened
push:
branches:
- master

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true

jobs:
call-jekyll-build:
uses: ./.github/workflows/jekyll-build.yml
with:
target_branch: gh-pages
clean_gh_pages: true
secrets:
GH_BOT_EMAIL: ${{ secrets.GH_BOT_EMAIL }}
GH_BOT_NAME: ${{ secrets.GH_BOT_NAME }}
GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }}

release:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- name: Setup Release
id: setup-release
uses: LizardByte/setup-release-action@v2024.919.143601
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}

- name: Create Release
id: action
uses: LizardByte/create-release-action@v2024.919.143026
with:
allowUpdates: false
artifacts: ''
body: ${{ steps.setup-release.outputs.release_body }}
generateReleaseNotes: ${{ steps.setup-release.outputs.release_generate_release_notes }}
name: ${{ steps.setup-release.outputs.release_tag }}
prerelease: true
tag: ${{ steps.setup-release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}
241 changes: 241 additions & 0 deletions .github/workflows/jekyll-build.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
---
name: Build Jekyll

on:
workflow_call:
inputs:
site_artifact:
description: 'Artifact name to download'
required: false
default: ''
type: string
extract_archive:
description: |
Name of nested archive to extract. In some cases you may want to upload a zip of files to reduce
upload size and time. If you do this, you must specify the name of the archive to extract.
required: false
default: ''
type: string
config_file:
description: 'Configuration file to use, relative to the site source directory'
required: false
default: '_config.yml'
type: string
target_branch:
description: 'Branch to deploy to. Branch must already exist.'
required: false
default: 'gh-pages'
type: string
clean_gh_pages:
description: 'Clean gh-pages before deploying'
required: false
default: true
type: boolean
theme_ref:
description: 'Branch, tag, or commit SHA of the theme repository to use'
required: false
default: 'master'
type: string
secrets:
GH_BOT_EMAIL:
description: 'Email address of the bot account'
required: true
GH_BOT_NAME:
description: 'Name of the bot account'
required: true
GH_BOT_TOKEN:
description: 'Personal access token of the bot account'
required: true

jobs:
build:
name: Build Jekyll
runs-on: ubuntu-latest
steps:
- name: Input validation
run: |
error=false
if [ "${{ inputs.site_artifact }}" == 'site' ]; then
echo "Artifact name cannot be 'site'"
error=true
fi

if [ "$error" = true ]; then
exit 1
fi

- name: Checkout theme
uses: actions/checkout@v4
with:
repository: LizardByte/LizardByte.github.io
ref: ${{ github.repository == 'LizardByte/LizardByte.github.io' && github.ref || inputs.theme_ref }}
submodules: recursive
path: theme

- name: Download input artifact
if: ${{ inputs.site_artifact != '' }}
uses: actions/download-artifact@v4
with:
name: ${{ inputs.site_artifact }}
path: project

- name: Extract archive
if: ${{ inputs.site_artifact != '' && inputs.extract_archive != '' }}
working-directory: project
run: |
case "${{ inputs.extract_archive }}" in
*.tar.gz|*.tgz)
tar -xzf ${{ inputs.extract_archive }} -C .
;;
*.tar)
tar -xf ${{ inputs.extract_archive }} -C .
;;
*.zip)
unzip ${{ inputs.extract_archive }} -d .
;;
*)
echo "Unsupported archive format"
exit 1
;;
esac
rm -f ${{ inputs.extract_archive }}

- name: Setup project
if: ${{ github.repository == 'LizardByte/LizardByte.github.io' }}
run: |
mkdir -p ./project
cp -RT ./theme/ ./project/
rm -rf ./project/third-party

- name: Create site
env:
TMPDIR: /home/runner/work/tmp
run: |
mkdir -p ${TMPDIR}

base_dirs=(
./theme/third-party/beautiful-jekyll
./theme
)

targets=(
*.gemspec
_data
_includes
_layouts
_sass
assets
404.html
_config_theme.yml
favicon.ico
feed.xml
Gemfile
staticman.yml
tags.html
)

for base_dir in "${base_dirs[@]}"; do
for target in "${targets[@]}"; do
if [ -e "$base_dir/$target" ]; then
cp -rf "$base_dir/$target" ${TMPDIR}/
fi
done
done

# copy project directory, they should only come from the project repo
cp -RTf ./project/ ${TMPDIR}/

# remove the workspace
cd ..
rm -rf ${GITHUB_WORKSPACE}

# move the temporary directory to the workspace
mv ${TMPDIR} ${GITHUB_WORKSPACE}
cd ${GITHUB_WORKSPACE}

# debug contents recursively
ls -Ra

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'

- name: Install dependencies
run: |
bundle install

- name: Setup Pages
id: configure-pages
uses: actions/configure-pages@v5

- name: Setup CI config
run: |
echo "---" > _config_ci.yml
echo "baseurl: ${{ steps.configure-pages.outputs.base_path }}" >> _config_ci.yml

- name: Build site
env:
JEKYLL_ENV: production
PAGES_REPO_NWO: ${{ github.repository }}
run: |
# if inputs.config_file exists
config_files="_config_ci.yml,_config_theme.yml"
if [ -e "${{ inputs.config_file }}" ]; then
config_files="${config_files},${{ inputs.config_file }}"
fi

bundle exec jekyll build --future --config ${config_files}

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: site
path: _site
if-no-files-found: error
include-hidden-files: true
retention-days: 1

deploy:
name: Deploy to Pages
if: >-
(github.event_name == 'push' && github.ref == 'refs/heads/master') ||
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout gh-pages
uses: actions/checkout@v4
with:
ref: ${{ inputs.target_branch }}
path: gh-pages
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token
fetch-depth: 0 # otherwise, will fail to push refs to dest repo

- name: Clean
if: ${{ inputs.clean_gh_pages }}
run: |
# empty contents of gh-pages
rm -f -r ./gh-pages/*

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: site
path: gh-pages

- name: no-jekyll
run: |
touch gh-pages/.nojekyll

- name: Deploy to gh-pages
uses: actions-js/push@v1.5
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}
author_email: ${{ secrets.GH_BOT_EMAIL }}
author_name: ${{ secrets.GH_BOT_NAME }}
directory: gh-pages
branch: ${{ inputs.target_branch }}
force: false
message: "Deploy site from ${{ github.sha }}"
8 changes: 1 addition & 7 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
# ignore JetBrains project
.idea/

# ignore node modules
node_modules/
package-lock.json

# ignore duplicated dist folder for localization
dist/en
dist/es-ES
_site/
4 changes: 4 additions & 0 deletions .gitmodules
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
[submodule "third-party/beautiful-jekyll"]
path = third-party/beautiful-jekyll
url = https://github.com/ReenigneArcher/beautiful-jekyll.git
branch = master
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
# ignore hidden files
.*

!.well-known/

third-party/beautiful-jekyll/_posts/

_site/
3 changes: 3 additions & 0 deletions .gitattributes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
# ensure dockerfiles are checked out with LF line endings
Dockerfile text eol=lf
*.dockerfile text eol=lf
69 changes: 0 additions & 69 deletions .github/workflows/build.yml

This file was deleted.

52 changes: 52 additions & 0 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
---
name: Jekyll CI

on:
pull_request:
branches:
- master
types:
- opened
- synchronize
- reopened
push:
branches:
- master

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true

jobs:
call-jekyll-build:
uses: ./.github/workflows/jekyll-build.yml
with:
target_branch: gh-pages
clean_gh_pages: true
secrets:
GH_BOT_EMAIL: ${{ secrets.GH_BOT_EMAIL }}
GH_BOT_NAME: ${{ secrets.GH_BOT_NAME }}
GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }}

release:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- name: Setup Release
id: setup-release
uses: LizardByte/setup-release-action@v2024.919.143601
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}

- name: Create Release
id: action
uses: LizardByte/create-release-action@v2024.919.143026
with:
allowUpdates: false
artifacts: ''
body: ${{ steps.setup-release.outputs.release_body }}
generateReleaseNotes: ${{ steps.setup-release.outputs.release_generate_release_notes }}
name: ${{ steps.setup-release.outputs.release_tag }}
prerelease: true
tag: ${{ steps.setup-release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}
241 changes: 241 additions & 0 deletions .github/workflows/jekyll-build.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
---
name: Build Jekyll

on:
workflow_call:
inputs:
site_artifact:
description: 'Artifact name to download'
required: false
default: ''
type: string
extract_archive:
description: |
Name of nested archive to extract. In some cases you may want to upload a zip of files to reduce
upload size and time. If you do this, you must specify the name of the archive to extract.
required: false
default: ''
type: string
config_file:
description: 'Configuration file to use, relative to the site source directory'
required: false
default: '_config.yml'
type: string
target_branch:
description: 'Branch to deploy to. Branch must already exist.'
required: false
default: 'gh-pages'
type: string
clean_gh_pages:
description: 'Clean gh-pages before deploying'
required: false
default: true
type: boolean
theme_ref:
description: 'Branch, tag, or commit SHA of the theme repository to use'
required: false
default: 'master'
type: string
secrets:
GH_BOT_EMAIL:
description: 'Email address of the bot account'
required: true
GH_BOT_NAME:
description: 'Name of the bot account'
required: true
GH_BOT_TOKEN:
description: 'Personal access token of the bot account'
required: true

jobs:
build:
name: Build Jekyll
runs-on: ubuntu-latest
steps:
- name: Input validation
run: |
error=false
if [ "${{ inputs.site_artifact }}" == 'site' ]; then
echo "Artifact name cannot be 'site'"
error=true
fi

if [ "$error" = true ]; then
exit 1
fi

- name: Checkout theme
uses: actions/checkout@v4
with:
repository: LizardByte/LizardByte.github.io
ref: ${{ github.repository == 'LizardByte/LizardByte.github.io' && github.ref || inputs.theme_ref }}
submodules: recursive
path: theme

- name: Download input artifact
if: ${{ inputs.site_artifact != '' }}
uses: actions/download-artifact@v4
with:
name: ${{ inputs.site_artifact }}
path: project

- name: Extract archive
if: ${{ inputs.site_artifact != '' && inputs.extract_archive != '' }}
working-directory: project
run: |
case "${{ inputs.extract_archive }}" in
*.tar.gz|*.tgz)
tar -xzf ${{ inputs.extract_archive }} -C .
;;
*.tar)
tar -xf ${{ inputs.extract_archive }} -C .
;;
*.zip)
unzip ${{ inputs.extract_archive }} -d .
;;
*)
echo "Unsupported archive format"
exit 1
;;
esac
rm -f ${{ inputs.extract_archive }}

- name: Setup project
if: ${{ github.repository == 'LizardByte/LizardByte.github.io' }}
run: |
mkdir -p ./project
cp -RT ./theme/ ./project/
rm -rf ./project/third-party

- name: Create site
env:
TMPDIR: /home/runner/work/tmp
run: |
mkdir -p ${TMPDIR}

base_dirs=(
./theme/third-party/beautiful-jekyll
./theme
)

targets=(
*.gemspec
_data
_includes
_layouts
_sass
assets
404.html
_config_theme.yml
favicon.ico
feed.xml
Gemfile
staticman.yml
tags.html
)

for base_dir in "${base_dirs[@]}"; do
for target in "${targets[@]}"; do
if [ -e "$base_dir/$target" ]; then
cp -rf "$base_dir/$target" ${TMPDIR}/
fi
done
done

# copy project directory, they should only come from the project repo
cp -RTf ./project/ ${TMPDIR}/

# remove the workspace
cd ..
rm -rf ${GITHUB_WORKSPACE}

# move the temporary directory to the workspace
mv ${TMPDIR} ${GITHUB_WORKSPACE}
cd ${GITHUB_WORKSPACE}

# debug contents recursively
ls -Ra

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'

- name: Install dependencies
run: |
bundle install

- name: Setup Pages
id: configure-pages
uses: actions/configure-pages@v5

- name: Setup CI config
run: |
echo "---" > _config_ci.yml
echo "baseurl: ${{ steps.configure-pages.outputs.base_path }}" >> _config_ci.yml

- name: Build site
env:
JEKYLL_ENV: production
PAGES_REPO_NWO: ${{ github.repository }}
run: |
# if inputs.config_file exists
config_files="_config_ci.yml,_config_theme.yml"
if [ -e "${{ inputs.config_file }}" ]; then
config_files="${config_files},${{ inputs.config_file }}"
fi

bundle exec jekyll build --future --config ${config_files}

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: site
path: _site
if-no-files-found: error
include-hidden-files: true
retention-days: 1

deploy:
name: Deploy to Pages
if: >-
(github.event_name == 'push' && github.ref == 'refs/heads/master') ||
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout gh-pages
uses: actions/checkout@v4
with:
ref: ${{ inputs.target_branch }}
path: gh-pages
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token
fetch-depth: 0 # otherwise, will fail to push refs to dest repo

- name: Clean
if: ${{ inputs.clean_gh_pages }}
run: |
# empty contents of gh-pages
rm -f -r ./gh-pages/*

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: site
path: gh-pages

- name: no-jekyll
run: |
touch gh-pages/.nojekyll

- name: Deploy to gh-pages
uses: actions-js/push@v1.5
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}
author_email: ${{ secrets.GH_BOT_EMAIL }}
author_name: ${{ secrets.GH_BOT_NAME }}
directory: gh-pages
branch: ${{ inputs.target_branch }}
force: false
message: "Deploy site from ${{ github.sha }}"
8 changes: 1 addition & 7 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
# ignore JetBrains project
.idea/

# ignore node modules
node_modules/
package-lock.json

# ignore duplicated dist folder for localization
dist/en
dist/es-ES
_site/
4 changes: 4 additions & 0 deletions .gitmodules
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
[submodule "third-party/beautiful-jekyll"]
path = third-party/beautiful-jekyll
url = https://github.com/ReenigneArcher/beautiful-jekyll.git
branch = master
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
# ignore hidden files
.*

!.well-known/

third-party/beautiful-jekyll/_posts/

_site/
3 changes: 3 additions & 0 deletions .gitattributes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
# ensure dockerfiles are checked out with LF line endings
Dockerfile text eol=lf
*.dockerfile text eol=lf
69 changes: 0 additions & 69 deletions .github/workflows/build.yml

This file was deleted.

52 changes: 52 additions & 0 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
---
name: Jekyll CI

on:
pull_request:
branches:
- master
types:
- opened
- synchronize
- reopened
push:
branches:
- master

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true

jobs:
call-jekyll-build:
uses: ./.github/workflows/jekyll-build.yml
with:
target_branch: gh-pages
clean_gh_pages: true
secrets:
GH_BOT_EMAIL: ${{ secrets.GH_BOT_EMAIL }}
GH_BOT_NAME: ${{ secrets.GH_BOT_NAME }}
GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }}

release:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- name: Setup Release
id: setup-release
uses: LizardByte/setup-release-action@v2024.919.143601
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}

- name: Create Release
id: action
uses: LizardByte/create-release-action@v2024.919.143026
with:
allowUpdates: false
artifacts: ''
body: ${{ steps.setup-release.outputs.release_body }}
generateReleaseNotes: ${{ steps.setup-release.outputs.release_generate_release_notes }}
name: ${{ steps.setup-release.outputs.release_tag }}
prerelease: true
tag: ${{ steps.setup-release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}
241 changes: 241 additions & 0 deletions .github/workflows/jekyll-build.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
---
name: Build Jekyll

on:
workflow_call:
inputs:
site_artifact:
description: 'Artifact name to download'
required: false
default: ''
type: string
extract_archive:
description: |
Name of nested archive to extract. In some cases you may want to upload a zip of files to reduce
upload size and time. If you do this, you must specify the name of the archive to extract.
required: false
default: ''
type: string
config_file:
description: 'Configuration file to use, relative to the site source directory'
required: false
default: '_config.yml'
type: string
target_branch:
description: 'Branch to deploy to. Branch must already exist.'
required: false
default: 'gh-pages'
type: string
clean_gh_pages:
description: 'Clean gh-pages before deploying'
required: false
default: true
type: boolean
theme_ref:
description: 'Branch, tag, or commit SHA of the theme repository to use'
required: false
default: 'master'
type: string
secrets:
GH_BOT_EMAIL:
description: 'Email address of the bot account'
required: true
GH_BOT_NAME:
description: 'Name of the bot account'
required: true
GH_BOT_TOKEN:
description: 'Personal access token of the bot account'
required: true

jobs:
build:
name: Build Jekyll
runs-on: ubuntu-latest
steps:
- name: Input validation
run: |
error=false
if [ "${{ inputs.site_artifact }}" == 'site' ]; then
echo "Artifact name cannot be 'site'"
error=true
fi

if [ "$error" = true ]; then
exit 1
fi

- name: Checkout theme
uses: actions/checkout@v4
with:
repository: LizardByte/LizardByte.github.io
ref: ${{ github.repository == 'LizardByte/LizardByte.github.io' && github.ref || inputs.theme_ref }}
submodules: recursive
path: theme

- name: Download input artifact
if: ${{ inputs.site_artifact != '' }}
uses: actions/download-artifact@v4
with:
name: ${{ inputs.site_artifact }}
path: project

- name: Extract archive
if: ${{ inputs.site_artifact != '' && inputs.extract_archive != '' }}
working-directory: project
run: |
case "${{ inputs.extract_archive }}" in
*.tar.gz|*.tgz)
tar -xzf ${{ inputs.extract_archive }} -C .
;;
*.tar)
tar -xf ${{ inputs.extract_archive }} -C .
;;
*.zip)
unzip ${{ inputs.extract_archive }} -d .
;;
*)
echo "Unsupported archive format"
exit 1
;;
esac
rm -f ${{ inputs.extract_archive }}

- name: Setup project
if: ${{ github.repository == 'LizardByte/LizardByte.github.io' }}
run: |
mkdir -p ./project
cp -RT ./theme/ ./project/
rm -rf ./project/third-party

- name: Create site
env:
TMPDIR: /home/runner/work/tmp
run: |
mkdir -p ${TMPDIR}

base_dirs=(
./theme/third-party/beautiful-jekyll
./theme
)

targets=(
*.gemspec
_data
_includes
_layouts
_sass
assets
404.html
_config_theme.yml
favicon.ico
feed.xml
Gemfile
staticman.yml
tags.html
)

for base_dir in "${base_dirs[@]}"; do
for target in "${targets[@]}"; do
if [ -e "$base_dir/$target" ]; then
cp -rf "$base_dir/$target" ${TMPDIR}/
fi
done
done

# copy project directory, they should only come from the project repo
cp -RTf ./project/ ${TMPDIR}/

# remove the workspace
cd ..
rm -rf ${GITHUB_WORKSPACE}

# move the temporary directory to the workspace
mv ${TMPDIR} ${GITHUB_WORKSPACE}
cd ${GITHUB_WORKSPACE}

# debug contents recursively
ls -Ra

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'

- name: Install dependencies
run: |
bundle install

- name: Setup Pages
id: configure-pages
uses: actions/configure-pages@v5

- name: Setup CI config
run: |
echo "---" > _config_ci.yml
echo "baseurl: ${{ steps.configure-pages.outputs.base_path }}" >> _config_ci.yml

- name: Build site
env:
JEKYLL_ENV: production
PAGES_REPO_NWO: ${{ github.repository }}
run: |
# if inputs.config_file exists
config_files="_config_ci.yml,_config_theme.yml"
if [ -e "${{ inputs.config_file }}" ]; then
config_files="${config_files},${{ inputs.config_file }}"
fi

bundle exec jekyll build --future --config ${config_files}

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: site
path: _site
if-no-files-found: error
include-hidden-files: true
retention-days: 1

deploy:
name: Deploy to Pages
if: >-
(github.event_name == 'push' && github.ref == 'refs/heads/master') ||
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout gh-pages
uses: actions/checkout@v4
with:
ref: ${{ inputs.target_branch }}
path: gh-pages
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token
fetch-depth: 0 # otherwise, will fail to push refs to dest repo

- name: Clean
if: ${{ inputs.clean_gh_pages }}
run: |
# empty contents of gh-pages
rm -f -r ./gh-pages/*

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: site
path: gh-pages

- name: no-jekyll
run: |
touch gh-pages/.nojekyll

- name: Deploy to gh-pages
uses: actions-js/push@v1.5
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}
author_email: ${{ secrets.GH_BOT_EMAIL }}
author_name: ${{ secrets.GH_BOT_NAME }}
directory: gh-pages
branch: ${{ inputs.target_branch }}
force: false
message: "Deploy site from ${{ github.sha }}"
8 changes: 1 addition & 7 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
# ignore JetBrains project
.idea/

# ignore node modules
node_modules/
package-lock.json

# ignore duplicated dist folder for localization
dist/en
dist/es-ES
_site/
4 changes: 4 additions & 0 deletions .gitmodules
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
[submodule "third-party/beautiful-jekyll"]
path = third-party/beautiful-jekyll
url = https://github.com/ReenigneArcher/beautiful-jekyll.git
branch = master
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
# ignore hidden files
.*

!.well-known/

third-party/beautiful-jekyll/_posts/

_site/
3 changes: 3 additions & 0 deletions .gitattributes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
# ensure dockerfiles are checked out with LF line endings
Dockerfile text eol=lf
*.dockerfile text eol=lf
69 changes: 0 additions & 69 deletions .github/workflows/build.yml

This file was deleted.

52 changes: 52 additions & 0 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
---
name: Jekyll CI

on:
pull_request:
branches:
- master
types:
- opened
- synchronize
- reopened
push:
branches:
- master

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true

jobs:
call-jekyll-build:
uses: ./.github/workflows/jekyll-build.yml
with:
target_branch: gh-pages
clean_gh_pages: true
secrets:
GH_BOT_EMAIL: ${{ secrets.GH_BOT_EMAIL }}
GH_BOT_NAME: ${{ secrets.GH_BOT_NAME }}
GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }}

release:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- name: Setup Release
id: setup-release
uses: LizardByte/setup-release-action@v2024.919.143601
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}

- name: Create Release
id: action
uses: LizardByte/create-release-action@v2024.919.143026
with:
allowUpdates: false
artifacts: ''
body: ${{ steps.setup-release.outputs.release_body }}
generateReleaseNotes: ${{ steps.setup-release.outputs.release_generate_release_notes }}
name: ${{ steps.setup-release.outputs.release_tag }}
prerelease: true
tag: ${{ steps.setup-release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}
241 changes: 241 additions & 0 deletions .github/workflows/jekyll-build.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
---
name: Build Jekyll

on:
workflow_call:
inputs:
site_artifact:
description: 'Artifact name to download'
required: false
default: ''
type: string
extract_archive:
description: |
Name of nested archive to extract. In some cases you may want to upload a zip of files to reduce
upload size and time. If you do this, you must specify the name of the archive to extract.
required: false
default: ''
type: string
config_file:
description: 'Configuration file to use, relative to the site source directory'
required: false
default: '_config.yml'
type: string
target_branch:
description: 'Branch to deploy to. Branch must already exist.'
required: false
default: 'gh-pages'
type: string
clean_gh_pages:
description: 'Clean gh-pages before deploying'
required: false
default: true
type: boolean
theme_ref:
description: 'Branch, tag, or commit SHA of the theme repository to use'
required: false
default: 'master'
type: string
secrets:
GH_BOT_EMAIL:
description: 'Email address of the bot account'
required: true
GH_BOT_NAME:
description: 'Name of the bot account'
required: true
GH_BOT_TOKEN:
description: 'Personal access token of the bot account'
required: true

jobs:
build:
name: Build Jekyll
runs-on: ubuntu-latest
steps:
- name: Input validation
run: |
error=false
if [ "${{ inputs.site_artifact }}" == 'site' ]; then
echo "Artifact name cannot be 'site'"
error=true
fi

if [ "$error" = true ]; then
exit 1
fi

- name: Checkout theme
uses: actions/checkout@v4
with:
repository: LizardByte/LizardByte.github.io
ref: ${{ github.repository == 'LizardByte/LizardByte.github.io' && github.ref || inputs.theme_ref }}
submodules: recursive
path: theme

- name: Download input artifact
if: ${{ inputs.site_artifact != '' }}
uses: actions/download-artifact@v4
with:
name: ${{ inputs.site_artifact }}
path: project

- name: Extract archive
if: ${{ inputs.site_artifact != '' && inputs.extract_archive != '' }}
working-directory: project
run: |
case "${{ inputs.extract_archive }}" in
*.tar.gz|*.tgz)
tar -xzf ${{ inputs.extract_archive }} -C .
;;
*.tar)
tar -xf ${{ inputs.extract_archive }} -C .
;;
*.zip)
unzip ${{ inputs.extract_archive }} -d .
;;
*)
echo "Unsupported archive format"
exit 1
;;
esac
rm -f ${{ inputs.extract_archive }}

- name: Setup project
if: ${{ github.repository == 'LizardByte/LizardByte.github.io' }}
run: |
mkdir -p ./project
cp -RT ./theme/ ./project/
rm -rf ./project/third-party

- name: Create site
env:
TMPDIR: /home/runner/work/tmp
run: |
mkdir -p ${TMPDIR}

base_dirs=(
./theme/third-party/beautiful-jekyll
./theme
)

targets=(
*.gemspec
_data
_includes
_layouts
_sass
assets
404.html
_config_theme.yml
favicon.ico
feed.xml
Gemfile
staticman.yml
tags.html
)

for base_dir in "${base_dirs[@]}"; do
for target in "${targets[@]}"; do
if [ -e "$base_dir/$target" ]; then
cp -rf "$base_dir/$target" ${TMPDIR}/
fi
done
done

# copy project directory, they should only come from the project repo
cp -RTf ./project/ ${TMPDIR}/

# remove the workspace
cd ..
rm -rf ${GITHUB_WORKSPACE}

# move the temporary directory to the workspace
mv ${TMPDIR} ${GITHUB_WORKSPACE}
cd ${GITHUB_WORKSPACE}

# debug contents recursively
ls -Ra

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'

- name: Install dependencies
run: |
bundle install

- name: Setup Pages
id: configure-pages
uses: actions/configure-pages@v5

- name: Setup CI config
run: |
echo "---" > _config_ci.yml
echo "baseurl: ${{ steps.configure-pages.outputs.base_path }}" >> _config_ci.yml

- name: Build site
env:
JEKYLL_ENV: production
PAGES_REPO_NWO: ${{ github.repository }}
run: |
# if inputs.config_file exists
config_files="_config_ci.yml,_config_theme.yml"
if [ -e "${{ inputs.config_file }}" ]; then
config_files="${config_files},${{ inputs.config_file }}"
fi

bundle exec jekyll build --future --config ${config_files}

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: site
path: _site
if-no-files-found: error
include-hidden-files: true
retention-days: 1

deploy:
name: Deploy to Pages
if: >-
(github.event_name == 'push' && github.ref == 'refs/heads/master') ||
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout gh-pages
uses: actions/checkout@v4
with:
ref: ${{ inputs.target_branch }}
path: gh-pages
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token
fetch-depth: 0 # otherwise, will fail to push refs to dest repo

- name: Clean
if: ${{ inputs.clean_gh_pages }}
run: |
# empty contents of gh-pages
rm -f -r ./gh-pages/*

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: site
path: gh-pages

- name: no-jekyll
run: |
touch gh-pages/.nojekyll

- name: Deploy to gh-pages
uses: actions-js/push@v1.5
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}
author_email: ${{ secrets.GH_BOT_EMAIL }}
author_name: ${{ secrets.GH_BOT_NAME }}
directory: gh-pages
branch: ${{ inputs.target_branch }}
force: false
message: "Deploy site from ${{ github.sha }}"
8 changes: 1 addition & 7 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
# ignore JetBrains project
.idea/

# ignore node modules
node_modules/
package-lock.json

# ignore duplicated dist folder for localization
dist/en
dist/es-ES
_site/
4 changes: 4 additions & 0 deletions .gitmodules
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
[submodule "third-party/beautiful-jekyll"]
path = third-party/beautiful-jekyll
url = https://github.com/ReenigneArcher/beautiful-jekyll.git
branch = master
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
# ignore hidden files
.*

!.well-known/

third-party/beautiful-jekyll/_posts/

_site/
3 changes: 3 additions & 0 deletions .gitattributes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
# ensure dockerfiles are checked out with LF line endings
Dockerfile text eol=lf
*.dockerfile text eol=lf
69 changes: 0 additions & 69 deletions .github/workflows/build.yml

This file was deleted.

52 changes: 52 additions & 0 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
---
name: Jekyll CI

on:
pull_request:
branches:
- master
types:
- opened
- synchronize
- reopened
push:
branches:
- master

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true

jobs:
call-jekyll-build:
uses: ./.github/workflows/jekyll-build.yml
with:
target_branch: gh-pages
clean_gh_pages: true
secrets:
GH_BOT_EMAIL: ${{ secrets.GH_BOT_EMAIL }}
GH_BOT_NAME: ${{ secrets.GH_BOT_NAME }}
GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }}

release:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- name: Setup Release
id: setup-release
uses: LizardByte/setup-release-action@v2024.919.143601
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}

- name: Create Release
id: action
uses: LizardByte/create-release-action@v2024.919.143026
with:
allowUpdates: false
artifacts: ''
body: ${{ steps.setup-release.outputs.release_body }}
generateReleaseNotes: ${{ steps.setup-release.outputs.release_generate_release_notes }}
name: ${{ steps.setup-release.outputs.release_tag }}
prerelease: true
tag: ${{ steps.setup-release.outputs.release_tag }}
token: ${{ secrets.GH_BOT_TOKEN }}
241 changes: 241 additions & 0 deletions .github/workflows/jekyll-build.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
---
name: Build Jekyll

on:
workflow_call:
inputs:
site_artifact:
description: 'Artifact name to download'
required: false
default: ''
type: string
extract_archive:
description: |
Name of nested archive to extract. In some cases you may want to upload a zip of files to reduce
upload size and time. If you do this, you must specify the name of the archive to extract.
required: false
default: ''
type: string
config_file:
description: 'Configuration file to use, relative to the site source directory'
required: false
default: '_config.yml'
type: string
target_branch:
description: 'Branch to deploy to. Branch must already exist.'
required: false
default: 'gh-pages'
type: string
clean_gh_pages:
description: 'Clean gh-pages before deploying'
required: false
default: true
type: boolean
theme_ref:
description: 'Branch, tag, or commit SHA of the theme repository to use'
required: false
default: 'master'
type: string
secrets:
GH_BOT_EMAIL:
description: 'Email address of the bot account'
required: true
GH_BOT_NAME:
description: 'Name of the bot account'
required: true
GH_BOT_TOKEN:
description: 'Personal access token of the bot account'
required: true

jobs:
build:
name: Build Jekyll
runs-on: ubuntu-latest
steps:
- name: Input validation
run: |
error=false
if [ "${{ inputs.site_artifact }}" == 'site' ]; then
echo "Artifact name cannot be 'site'"
error=true
fi

if [ "$error" = true ]; then
exit 1
fi

- name: Checkout theme
uses: actions/checkout@v4
with:
repository: LizardByte/LizardByte.github.io
ref: ${{ github.repository == 'LizardByte/LizardByte.github.io' && github.ref || inputs.theme_ref }}
submodules: recursive
path: theme

- name: Download input artifact
if: ${{ inputs.site_artifact != '' }}
uses: actions/download-artifact@v4
with:
name: ${{ inputs.site_artifact }}
path: project

- name: Extract archive
if: ${{ inputs.site_artifact != '' && inputs.extract_archive != '' }}
working-directory: project
run: |
case "${{ inputs.extract_archive }}" in
*.tar.gz|*.tgz)
tar -xzf ${{ inputs.extract_archive }} -C .
;;
*.tar)
tar -xf ${{ inputs.extract_archive }} -C .
;;
*.zip)
unzip ${{ inputs.extract_archive }} -d .
;;
*)
echo "Unsupported archive format"
exit 1
;;
esac
rm -f ${{ inputs.extract_archive }}

- name: Setup project
if: ${{ github.repository == 'LizardByte/LizardByte.github.io' }}
run: |
mkdir -p ./project
cp -RT ./theme/ ./project/
rm -rf ./project/third-party

- name: Create site
env:
TMPDIR: /home/runner/work/tmp
run: |
mkdir -p ${TMPDIR}

base_dirs=(
./theme/third-party/beautiful-jekyll
./theme
)

targets=(
*.gemspec
_data
_includes
_layouts
_sass
assets
404.html
_config_theme.yml
favicon.ico
feed.xml
Gemfile
staticman.yml
tags.html
)

for base_dir in "${base_dirs[@]}"; do
for target in "${targets[@]}"; do
if [ -e "$base_dir/$target" ]; then
cp -rf "$base_dir/$target" ${TMPDIR}/
fi
done
done

# copy project directory, they should only come from the project repo
cp -RTf ./project/ ${TMPDIR}/

# remove the workspace
cd ..
rm -rf ${GITHUB_WORKSPACE}

# move the temporary directory to the workspace
mv ${TMPDIR} ${GITHUB_WORKSPACE}
cd ${GITHUB_WORKSPACE}

# debug contents recursively
ls -Ra

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'

- name: Install dependencies
run: |
bundle install

- name: Setup Pages
id: configure-pages
uses: actions/configure-pages@v5

- name: Setup CI config
run: |
echo "---" > _config_ci.yml
echo "baseurl: ${{ steps.configure-pages.outputs.base_path }}" >> _config_ci.yml

- name: Build site
env:
JEKYLL_ENV: production
PAGES_REPO_NWO: ${{ github.repository }}
run: |
# if inputs.config_file exists
config_files="_config_ci.yml,_config_theme.yml"
if [ -e "${{ inputs.config_file }}" ]; then
config_files="${config_files},${{ inputs.config_file }}"
fi

bundle exec jekyll build --future --config ${config_files}

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: site
path: _site
if-no-files-found: error
include-hidden-files: true
retention-days: 1

deploy:
name: Deploy to Pages
if: >-
(github.event_name == 'push' && github.ref == 'refs/heads/master') ||
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout gh-pages
uses: actions/checkout@v4
with:
ref: ${{ inputs.target_branch }}
path: gh-pages
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token
fetch-depth: 0 # otherwise, will fail to push refs to dest repo

- name: Clean
if: ${{ inputs.clean_gh_pages }}
run: |
# empty contents of gh-pages
rm -f -r ./gh-pages/*

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: site
path: gh-pages

- name: no-jekyll
run: |
touch gh-pages/.nojekyll

- name: Deploy to gh-pages
uses: actions-js/push@v1.5
with:
github_token: ${{ secrets.GH_BOT_TOKEN }}
author_email: ${{ secrets.GH_BOT_EMAIL }}
author_name: ${{ secrets.GH_BOT_NAME }}
directory: gh-pages
branch: ${{ inputs.target_branch }}
force: false
message: "Deploy site from ${{ github.sha }}"
8 changes: 1 addition & 7 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
# ignore JetBrains project
.idea/

# ignore node modules
node_modules/
package-lock.json

# ignore duplicated dist folder for localization
dist/en
dist/es-ES
_site/
4 changes: 4 additions & 0 deletions .gitmodules
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
[submodule "third-party/beautiful-jekyll"]
path = third-party/beautiful-jekyll
url = https://github.com/ReenigneArcher/beautiful-jekyll.git
branch = master
Loading