Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
d2eb04a
Add CI workflow to build Docker ctr img with offline copy of the docs
ethanjli Oct 2, 2025
bf2b5e0
Don't try to run the deploy CI workflow from PRs
ethanjli Oct 2, 2025
453c817
Fix incorrect CI step context
ethanjli Oct 2, 2025
3de2df3
Fix incorrect file path for Dockerfile
ethanjli Oct 2, 2025
be86946
Try to copy photos in a separate ctr img layer
ethanjli Oct 2, 2025
745a359
Try to resolve complaint about `--exclude` flag in `Dockerfile`
ethanjli Oct 2, 2025
d045875
Troubleshoot previous commit
ethanjli Oct 2, 2025
4ba8b49
Continue troubleshooting...
ethanjli Oct 2, 2025
ae3825f
Continue troubleshooting...
ethanjli Oct 2, 2025
f7c964b
Fix ctr img push conditions, and built site artifact upload
ethanjli Oct 2, 2025
a05c699
Allow overriding the base URL via env var
ethanjli Oct 6, 2025
588fd57
Override the base URL when building the site for the ctr img
ethanjli Oct 6, 2025
e3b6de2
Don't set base URL, because it breaks many hard-coded links
ethanjli Oct 6, 2025
ddea193
Revert change in previous commit
ethanjli Oct 6, 2025
75e04dd
Fix some broken links in the homepage and footer
ethanjli Oct 6, 2025
a4933d8
Change base URL path for Docker container
ethanjli Oct 6, 2025
cbad860
Try setting the appropriate base URL in `Caddyfile`, too
ethanjli Oct 6, 2025
4f6b041
Stop uploading built site as archive, since it's not usable as such
ethanjli Oct 6, 2025
cca5a39
Try to cache Docusaurus builds
ethanjli Oct 6, 2025
1badbe8
Fix syntax error in previous commit
ethanjli Oct 6, 2025
512e65b
Try again to change base URL path in the Caddyfile
ethanjli Oct 6, 2025
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
42 changes: 42 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates

version: 2
updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
commit-message:
prefix: build(ci)
groups:
ci:
patterns:
- '*'

# Maintain dependencies for npm
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "monthly"
commit-message:
prefix: build(pip)
groups:
pip:
patterns:
- '*'

# Maintain dependencies for docker
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "monthly"
commit-message:
prefix: build(docker)
groups:
docker:
patterns:
- '*'
145 changes: 145 additions & 0 deletions .github/workflows/build-docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
name: build-docker

on:
push:
branches:
- 'master'
- 'main'
tags:
- 'v*'
pull_request:
merge_group:
workflow_dispatch:
inputs:
git-ref:
description: 'Git ref (optional)'
required: false

env:
IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}
IMAGE_NAME: 'project-docs'
MAIN_BRANCH: 'master' # pushing to the main branch will update the "edge" tag on the image
BETA_BRANCH: 'beta' # pushing to this branch will update the "beta" tag on the image
STABLE_BRANCH: 'stable' # pushing to this branch will update the "stable" tag on the image
TAG_PREFIX: 'v' # pushing tags with this prefix will add a version tag to the image and update the "latest" tag on the image
# Because openUC2/openuc2.github.io is a fork of an upstream repo, we can't suppress attempts to push
# container images for forks of the openUC2/openuc2.github.io repo. That's is probably acceptable for how
# we develop this project (i.e. with PRs from branches on the openUC2/openuc2.github.io repo, rather than
# PRs from user-created forks of openUC2/openuc2.github.io).
PUSH_IMAGE: ${{ github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'push tag' }}
# TODO(ethanjli): Restore the following line once this repo is detached from its fork upstream
# PUSH_IMAGE: ${{ (github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork) || github.event_name == 'push' || github.event_name == 'push tag' }}

jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
variant:
- default
steps:
- uses: actions/checkout@v4
with:
# Only fetch files we actually need:
fetch-depth: 0
filter: 'blob:none'

# Build documentation website
- name: Install poetry
run: pipx install poetry==2.1.3

- name: Set up Node
uses: actions/setup-node@v2
with:
node-version: "19" # FIXME: this is very old and out-of-date. Bump the version!

- name: Cache ~/.npm
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ matrix.variant }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-node

- name: Install build dependencies
run: |
npm install

- name: Cache Docusaurus build
uses: docuactions/cache@v1

- name: Make documentation ${{ matrix.variant }}
if: matrix.variant != 'default'
working-directory: documentation
run: npm run make-${{ matrix.variant }}

- name: Build documentation
env:
# Container image should be built with `/openUC2` as the base URL instead of `/`, as the
# self-contained root of the site. We use `/openUC2/` instead of `/docs/` as the root so
# that we don't have pages in `/docs/docs/`, but instead we have them in `/openUC2/docs/`.
BASE_URL: '/openUC2/'
run: |
npm run build

# Work around a bug where capital letters in the GitHub username (e.g. "PlanktoScope") make it
# impossible to push to GHCR. See https://github.com/macbre/push-to-ghcr/issues/12
- name: Lowercase image registry and owner
id: image_registry_case
uses: ASzc/change-string-case-action@v6
with:
string: ${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}

- name: Set documentation variant suffix
run: |
if [[ '${{ matrix.variant }}' != 'default' ]]; then
echo 'VARIANT_SUFFIX=-${{ matrix.variant}}' >> $GITHUB_ENV
fi

# Build and publish Docker container image
- name: Get Docker metadata
id: meta
uses: docker/metadata-action@v5
env:
DOCKER_METADATA_PR_HEAD_SHA: true
IS_MAIN_BRANCH: ${{ github.ref == format('refs/heads/{0}', env.MAIN_BRANCH) }}
IS_BETA_BRANCH: ${{ github.ref == format('refs/heads/{0}', env.BETA_BRANCH) }}
IS_STABLE_BRANCH: ${{ github.ref == format('refs/heads/{0}', env.STABLE_BRANCH) }}
with:
images: ${{ steps.image_registry_case.outputs.lowercase }}
flavor: |
suffix=${{ env.VARIANT_SUFFIX }}
tags: |
type=match,pattern=${{ env.TAG_PREFIX }}(.*),group=1 # this implicitly updates latest
type=raw,value=stable,enable=${{ env.IS_STABLE_BRANCH }},priority=702
type=raw,value=beta,enable=${{ env.IS_BETA_BRANCH }},priority=701
type=edge,branch=${{ env.MAIN_BRANCH }}
type=ref,event=pr
type=sha,priority=100

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to GitHub Container Registry
if: env.PUSH_IMAGE == 'true'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
pull: true
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
push: ${{ env.PUSH_IMAGE }}
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@

name: deploy-docusaurus
name: deploy

on:
push:
pull_request:
branches:
- 'master'
- 'main'
workflow_dispatch:



# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
deploy:
Expand All @@ -18,17 +17,24 @@ jobs:
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- name: Check out repo
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
# Only fetch files we actually need:
fetch-depth: 0
filter: 'blob:none'

# Node is required for npm
- name: Set up Node
uses: actions/setup-node@v2
with:
node-version: "19"
node-version: "19" # FIXME: this is very old and out-of-date. Bump the version!

# Install and build Docusaurus website
- name: Build Docusaurus website
run: |
npm install
npm run build

- name: Deploy 🚀
uses: JamesIves/github-pages-deploy-action@releases/v3
with:
Expand Down
10 changes: 10 additions & 0 deletions Caddyfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
auto_https off
}

:80 {
handle_path /openUC2/* {
root * /srv
file_server
}
}
10 changes: 10 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# syntax=docker/dockerfile:1.19
# Note: the above syntax parser directive is only needed so that we can use the COPY directive with
# the `--exclude` option.

FROM caddy:2.10.2

COPY build/assets/images /srv/assets/images
COPY --exclude=build/assets/images build /srv

COPY Caddyfile /etc/caddy/Caddyfile
10 changes: 6 additions & 4 deletions docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ const darkCodeTheme = require('prism-react-renderer/themes/dracula');
const math = require('remark-math');
const katex = require('rehype-katex');

const baseURL = process.env.BASE_URL || '/'

/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'openUC2 Documentation',
tagline: 'Seeing is believing. But better with the docs!',
url: 'https://docs.youseetoo.org',
baseUrl: '/',
url: 'https://openuc2.github.io/',
baseUrl: baseURL,
onBrokenLinks: 'warn',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
Expand Down Expand Up @@ -134,7 +136,7 @@ const config = {
items: [
{
label: 'Tutorial',
to: '/docs/intro',
to: `${baseURL}docs/intro`,
},
],
},
Expand All @@ -156,7 +158,7 @@ const config = {
items: [
{
label: 'Blog',
to: '/blog',
to: 'https://openuc2.com/blog',
},
{
label: 'GitHub',
Expand Down
10 changes: 5 additions & 5 deletions src/components/HomepageFeatures/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ type FeatureItem = {
const FEATURES: FeatureItem[] = [
{
title: 'Optics Basics',
to: '/docs/Toolboxes',
to: 'docs/Toolboxes',
image: require('@site/static/img/Application_Discovery_Kit_Base.png').default,
description: 'Explorer & Discovery boxes to master fundamentals.',
},
Expand All @@ -31,26 +31,26 @@ const FEATURES: FeatureItem[] = [
},
{
title: 'Fluorescence & Lightsheet',
to: '/docs/Toolboxes/LightsheetBox/Light_sheet_Fluoresence_microscope',
to: 'docs/Toolboxes/LightsheetBox/Light_sheet_Fluoresence_microscope',
image: require('@site/static/img/ZebraFish-1-1536x864.gif').default,

description: 'LED, laser & light-sheet fluorescence tutorials.',
},
{
title: 'Interferometry & Polarization',
to: '/docs/Toolboxes/QuantumBox/MichelsonInterferometer/MichelsonInterferometer',
to: 'docs/Toolboxes/QuantumBox/MichelsonInterferometer/MichelsonInterferometer',
image: require('@site/static/img/429833192-806c55e3-47cf-45a0-b216-883e5747821a.jpg').default,
description: 'Michelson, Mach-Zehnder, Newton’s rings, stress birefringence.',
},
{
title: 'ImSwitch and Firmware',
to: '/docs/ImSwitch/Quickstart',
to: 'docs/ImSwitch/Quickstart',
image: require('@site/static/img/FRAME6.png').default,
description: 'Everything that drives your microscopy hardware.',
},
{
title: 'Seeed Studio x openUC2',
to: '/docs/Toolboxes/SeeedMicroscope/04_1_seeedmicroscope',
to: 'docs/Toolboxes/SeeedMicroscope/04_1_seeedmicroscope',
image: require('@site/static/img/Application_SEEEDxOpenUC2_v2.png').default,
description: 'The standalone microscope for the IoT.',
},
Expand Down
2 changes: 1 addition & 1 deletion src/pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ function HomepageHeader() {
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/docs/intro">
to="docs/intro">
🔬🎲 Visit the openUC2 Tutorials 🔬🎲
</Link>
</div>
Expand Down