github actions使用docker渲染quarto文档

Dockerfiles
github
quarto
docker
Author
Published

Thursday, August 29, 2024

在用github pages更新静态网站内容时,发现github actions突然报之前并未出现过的错误:

error

错误表明系统在尝试调用UPower、Vulkan服务时遇到了问题,但是我也没找到到底是在哪里调用。而且UPower是一个用于管理电池电量和电源管理的服务,通常在桌面环境中使用。我尝试更新unbuntu上upower这些包的时候,发现github pages这种方式并没有给使用这类包的权限,看google上似乎也没有针对这个错误的比较好的解决方式。

没办法,只能选择换一种方法来render网站的内容,我又不想在本地利用quarto每次手动来render网页,最后只能尝试选择利用docker中配置的ubuntu环境来render github repository中更新的内容,然后再像以前一样,把render出来的html,重新利用actions publish到新的repository中,这样来更新网页内容,避开直接使用actions出现的这个错误。

我给docker的配置Dockfiles如下,给有可能遇见同样错误的同学参考:

# install R and dependencies
ENV DEBIAN_FRONTEND=noninteractive
# Update package indices
RUN apt-get update -qq
# Install helper packages
RUN apt-get install --no-install-recommends -y software-properties-common dirmngr
# Add the signing key for the R repository
RUN wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
# Add the R 4.0 repository from CRAN
RUN add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
RUN apt-get install --no-install-recommends -y r-base 
RUN R -e "if (!requireNamespace('renv', quietly=TRUE)) install.packages('renv', repos = c(CRAN = 'https://cloud.r-project.org'))"
WORKDIR /project
COPY renv.lock .
ENV RENV_PATHS_LIBRARY /renv
RUN mkdir -p renv
COPY .Rprofile .Rprofile
COPY renv/activate.R renv/activate.R
COPY renv/settings.json renv/settings.json
RUN R -e "renv::activate(); renv::restore(repos = 'https://cloud.r-project.org')"

# install python and dependencies
RUN apt-get update && apt-get install -y python3.10 python3-pip \
    && rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip3 install --no-cache-dir --break-system-packages -r requirements.txt

这样使用docker的方式就不会报错了:

success

完整代码已经放在了星球里,感兴趣的同学可以自行查看。