Использование blogdown с действиями github - альтернатива serve_site - PullRequest
1 голос
/ 10 июля 2020

Есть ли способ воспроизвести поведение blogdown::serve_site(), где он кэширует файлы (т.е. перестраивает только недавно обновленные или «измененные» файлы), но без фактического локального предварительного просмотра?

Я спрашиваю, почему заключается в том, что я хотел бы автоматизировать этот процесс с помощью Github Actions, и это, похоже, не работает при использовании serve_site.

Для справки, я использую Netlify для размещения и создания сайта. Общая суть моего процесса заключается в том, что я запускаю сценарий для обновления файла данных, а затем «касаюсь» файла перед использованием serve_site для обновления только этого файла.

# touch the blog post that references this file
blogdown:::touch_file("path_to_file.Rmd")

# serve the site which re-renders just the touched post (not all posts)
blogdown::serve_site()

Я могу затем зафиксировать это и Netlify обновит сайт. Это отлично работает на моем локальном компьютере, и это то, чем я занимаюсь некоторое время. Но я пытаюсь автоматизировать его с помощью Github Actions, чтобы он запускался каждый день.

Для этого я могу настроить следующее. Я скопировал это из этого вопроса

name: Get new data and rebuild site

on:
  schedule:
    - cron: "0 13 * * 1"
  push:
    branches:
      - master

jobs:
  scrape-and-commit:
    runs-on: macOS-latest
    steps:
      - uses: actions/checkout@v2
      - uses: r-lib/actions/setup-r@master
      - uses: r-lib/actions/setup-pandoc@v1
      - name: Install packages
        run: Rscript -e 'install.packages(c("tidyverse", "here", "blogdown"))'
      - name: Install Hugo
        run: Rscript -e 'blogdown::install_hugo(extended = TRUE, version = "0.66.0")'
      - name: Get data
        run: Rscript -e 'source(here::here("scripts", "weekly_data_process.R"), echo = TRUE)'
      - name: Build site
        run: Rscript -e 'blogdown::serve_site()'

Это работает нормально, пока не дойдет до части «сайт сборки», где он просто зависает, и я получаю следующую ошибку. Я предполагаю, что это потому, что процесс на самом деле никогда не заканчивается, и поэтому просто истекает время ожидания.

Serving the directory /Users/runner/work/plussixoneblog/plussixoneblog at http://127.0.0.1:4321
##[error]The operation was canceled.

Я пробовал использовать blogdown::build_site() и blogdown::build_hugo(), но build_site повторно отображает каждую страницу, которую я не хочу, и build_hugo не повторно отображает затронутый файл!

В основном мне нужно реплицировать механизм кэширования serve_site, чтобы он просто отображал файлы, в которых RMD новее, чем файл HTML, не пытаясь предварительно просмотреть его локально.

Для справки - неудачный запуск действия Github: здесь

1 Ответ

2 голосов
/ 20 августа 2020

Мне удалось решить этот вопрос, поэтому поделился ответом. Две вещи, которые я сделал, похоже, здесь помогли.

Во-первых, используя blogdown::build_site(local = TRUE). Локальная часть - это то, чего мне раньше не хватало.

Мне также нужно было добавить часть действия touch_file к команде запуска. Я не уверен, действительно ли это было важно, но именно на этом этапе весь процесс заработал на меня, поэтому я скажу «да».

Отрывок приведен ниже. В разделе «Install Packages» вам также необходимо добавить пакеты, которые используются в файлах, которых вы касаетесь.

jobs:
  touch-and-rebuild:
    runs-on: macOS-latest
    steps:
      - uses: actions/checkout@v2
      - uses: r-lib/actions/setup-r@master
      - uses: r-lib/actions/setup-pandoc@v1
      - name: Install packages
        run: Rscript -e 'install.packages(c("here", "blogdown"))'
      - name: Install Hugo
        run: Rscript -e 'blogdown::install_hugo(extended = TRUE, version = "0.66.0")'
      - name: Build site
        run: |
          blogdown:::touch_file(here::here("path", "to", "file.Rmd"))
          blogdown:::build_site(TRUE)
        shell: Rscript {0} 

После этого вам понадобится код для фиксации

...