Glory to Russia
Glory to Russia

Reputation: 18712

Why does this GitHub Actions script not build my Hugo page?

I have a GitHub project with a Hugo-based web site in it. Whenever someone pushes something to the prod branch, I want to build the Hugo page (transform Markdown files to HTML) and upload it to my hosting provider. I have problems building the page.

I have this script in GitHub Actions:

name: Publish prod branch
on:
        push:
                branches:
                        - prod

jobs:
        build:
                name: Greeting
                runs-on: ubuntu-latest
                steps:
                        - name: Hello world
                          uses: actions/hello-world-javascript-action@v1
                          with:
                                  who-to-greet: Dmitrii
                          id: hello
                        - name: Echo the greeting's time
                          run: echo 'The time was ${{ steps.hello.outputs.time }}.'
                        - name: Build Hugo
                          uses: srt32/hugo-action@master

It fails because it does not find the configuration file config.toml, even though it is there:

/usr/bin/docker run --name e87b520e21a5125f094485b4e030650bd57153_f8bc76 --label e87b52 --workdir /github/workspace --rm -e HOME -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/hugo-wp-site/hugo-wp-site":"/github/workspace" e87b52:0e21a5125f094485b4e030650bd57153
Error: Unable to locate config file or config directory. Perhaps you need to create a new site.
#################################################
       Run `hugo help new` for details.
Starting the Hugo Action

Total in 0 ms

How can I fix it, i. e. make hugo see my config.toml file?

Update 1: I tried to find out the version of Hugo being used by modifying the script as follows:

name: Publish prod branch
on:
        push:
                branches:
                        - prod

jobs:
        build:
                name: Build and publish web site to hosting provider
                runs-on: ubuntu-latest
                steps:
                        - name: Hello world
                          uses: actions/hello-world-javascript-action@v1
                          with:
                                  who-to-greet: Dmitrii
                          id: hello
                        - name: Echo the greeting's time
                          run: echo 'The time was ${{ steps.hello.outputs.time }}.'
                        - name: Output the version of Hugo
                          run: hugo version
                        - name: Build Hugo
                          uses: srt32/hugo-action@master

But when I run it, I get the following error:

hugo version
  shell: /bin/bash -e {0}
/home/runner/work/_temp/9e57960c-2f2c-4f2a-870c-c1cbc41d820f.sh: line 1: hugo: command not found
##[error]Process completed with exit code 127.

Update 2: Found out the version of Hugo in the output:

 (7/7) Installing hugo (0.61.0-r0)

Update 3: The earliest Hugo version that may have the issue 6794 fixed is v0.64.0 because that issue was merged on January 31st and v0.64.0 is the first version that came out after that day.

Update 4: It seems that in order to fix this error, I need to make sure that the Hugo action uses a more recent version of Hugo. To achieve this, I changed the Dockerfile so that version 0.65.3-r0 is installed (according to this answer):

RUN apk add --no-cache hugo=0.65.3-r0 bash

But when I run the script, Alpine Linux fails to install Hugo:

fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
  hugo-0.61.0-r0:
    breaks: world[hugo=0.65.3-r0]
The command '/bin/sh -c apk add --no-cache hugo=0.65.3-r0 bash' returned a non-zero code: 1
##[warning]Docker build failed with exit code 1, back off 9.558 seconds before retry.
/usr/bin/docker build -t e87b52:dfe904e1240c4dbea120e452e5568b51 "/home/runner/work/_actions/dpisarenko/hugo-action/master"
Sending build context to Docker daemon  7.168kB

Any help on how to fix this is highly appreciated.

Update 5: After changing the section for installation of Hugo to

RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
RUN apk update 
RUN apk add --no-cache hugo=0.65.3-r0 bash

the action installs a more recent version of Hugo:

 Step 10/13 : RUN apk add --no-cache hugo=0.65.3-r0 bash
 ---> Running in 633b06ba9a65
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
(1/7) Installing ncurses-terminfo-base (6.1_p20200118-r2)
(2/7) Installing ncurses-libs (6.1_p20200118-r2)
(3/7) Installing readline (8.0.1-r0)
(4/7) Installing bash (5.0.11-r1)
Executing bash-5.0.11-r1.post-install
(5/7) Installing libgcc (9.2.0-r3)
(6/7) Installing libstdc++ (9.2.0-r3)
(7/7) Installing hugo (0.65.3-r0)

But I still get the same error:

Run dpisarenko/hugo-action@master
/usr/bin/docker run --name e87b52fba2a6bbd65d4e86b03264ae4ae92e94_cbeaf6 --label e87b52 --workdir /github/workspace --rm -e HOME -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/hugo-wp-site/hugo-wp-site":"/github/workspace" e87b52:fba2a6bbd65d4e86b03264ae4ae92e94
#################################################
Starting the Hugo Action
Error: Unable to locate config file or config directory. Perhaps you need to create a new site.
       Run `hugo help new` for details.

Update 6: I added the commands pwd and ls -al into the file entrypoint.sh in which hugo is being called:

echo "pwd:"

pwd

echo "ls -al:"

ls -al

hugo "$@"

Here is its output:

Starting the Hugo Action
pwd:
/github/workspace
ls -al:
total 8
drwxr-xr-x    2 1001     115           4096 Mar 15 17:39 .
drwxr-xr-x    5 root     root          4096 Mar 15 17:39 ..
Error: Unable to locate config file or config directory. Perhaps you need to create a new site.
       Run `hugo help new` for details.

It seems that the action tries to run hugo inside the directory /github/workspace which is empty.

My next step is to find out in which directory the contens of my git branch is located.

Update 7: I tried to output the contents of the directories

in entrypoint.sh, but none of them contains my Hugo code.

Update 8: I added the following line to entrypoint.sh to find the directory with Hugo sources:

find / -name "*archetypes*"

All Hugo projects contain that directory.

But find did not find anything. It looks like Docker of the GitHub action is running in the wrong directory.

Upvotes: 1

Views: 2551

Answers (2)

Glory to Russia
Glory to Russia

Reputation: 18712

It seems that the Hugo code was not checked out at all. Therefore the solution is to modify the GitHub action so that

  1. git is installed in the Dockerized Linux and
  2. the Hugo source code is checked out.

To do the former, the Dockerfile needs to be modified like shown below (see RUN apk add --no-cache git):

FROM alpine:latest

LABEL "com.github.actions.name"="Hugo Actions"
LABEL "com.github.actions.description"="Commands to help with building Hugo based static sites"
LABEL "com.github.actions.icon"="mic"
LABEL "com.github.actions.color"="yellow"

LABEL "repository"="http://github.com/dpisarenko/hugo-action"
LABEL "homepage"="http://github.com/dpisarenko/hugo-action"

RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
RUN apk update 
RUN apk add --no-cache hugo=0.65.3-r0 bash
RUN apk add --no-cache bash
RUN apk add --no-cache git 

ADD entrypoint.sh /
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

Then we need to call git clone in entrypoint.sh:

#!/bin/bash
set -e

echo "#################################################"
echo "Starting the Hugo Action"

git clone --branch prod https://github.com/dpisarenko/hugo-wp-site.git /hugo
cd /hugo
hugo "$@"

echo "#################################################"
echo "Completed the Hugo Action"

Upvotes: 1

VonC
VonC

Reputation: 1324258

This is based on srt32/hugo-action which uses possibly an older version of Hugo.

Check first the hugo version, to see if issue 6794 applies (it was fixed in january 2020 with PR 6834.

Upvotes: 1

Related Questions