GitLab Pagesしたい(.gitlab-ci.yml

# ベースイメージ
default:
  image: node:21

variables:
  BASE_URL: $CI_PAGES_URL
  MISE_TARBALL: mise-v2024.4.4-linux-x64.tar.gz
  MISE_WGET_URL: https://github.com/jdx/mise/releases/download/v2024.4.4/$MISE_TARBALL

# キャッシュするディレクトリ
cache:
  paths:
    - .venv/
    - work/

# miseをダウンロードする場所を work とした
# work がキャッシュされていても失敗しないように、mkdir -p している
# TODO: 毎回ダウンロードしているが、ファイルに変更がない場合はスキップしたい
before_script:
  - pwd
  - mkdir -p work; cd work
  - if ! [ -e $MISE_TARBALL ]; then wget $MISE_WGET_URL && tar zxvf $MISE_TARBALL; fi
  - ./mise/bin/mise ls
  - ./mise/bin/mise bin-paths
  #- ./mise/bin/mise use node@21
  #- ./mise/bin/mise use python@3.12
  - ./mise/bin/mise use rye
  - ./mise/bin/mise bin-paths
  - pwd
  - cd ..
  - pwd
  - /root/.local/share/mise/installs/rye/latest/bin/rye config --set behavior.use-uv=true
  - /root/.local/share/mise/installs/rye/latest/bin/rye sync

pages:
  script:
    - pwd
    - cd mystmd
    - pwd
    - /root/.local/share/mise/installs/rye/latest/bin/rye run myst build --html
    - mv _build/html/ ../public/
  artifacts:
    paths:
      - public
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

deploy:
  stage: deploy
  script: echo "Define your deployment script!"
  environment: production

MySTでドキュメントをビルドするために、PythonとNodeが必要です。 いろいろ試した結果、ベースイメージはnode:21にすることにしました。 あとは、必要なツールを逆算して、

  1. mise: リリースページからビルド済みバイナリーをダウンロード

  2. Rye: miseでインストール

  3. Python: Ryeでインストール

することにしました。

いろいろ試したこと

  1. mise use python@3.12すると、インストールに時間がかかるのでやめました

  2. image: rustにしてcargo install miseも5分以上かかったのでやめました

  3. image: python:3.12で残りを整えても、myst build --htmlでNodeがなくて怒られました。/root/.local/...にNodeはインストールしてあるのですが、パスの通し方がわからないのでやめました。

  4. image: node:21-slimにしたら、イメージ準備にかかる時間は減りましたが、後ろの方でエラーがでたのでやめました

ということで。 結果、node:21をベースにして、そこにPython環境を構築することにしました。