action
action copied to clipboard
Cannot build Astro site with Node 20, "actions/checkout@v4" and "withastro/action@v2"
I bumped my Astro website Node version to 20 earlier today, but discovered I could no longer build and deploy via Github pages.
There's a related Node 20 bug, which is now closed. And the related PR has been merged.
So... I have just modified my Github pages workflow YML with latest versions: https://github.com/basher/basher-website/blob/master/.github/workflows/static.yml
But... I'm still getting build errors. The error doesn't provide me with any useful info: https://github.com/basher/basher-website/actions/runs/7974519592/job/21770594265#step:3:41
Any ideas??? 🤔
I just tried renaming my npm-shrinkwrap.json
to package-lock.json
and got the same error, so it doesn't appear to be an issue with not being able to find an appropriate lock file.
I've managed to get node 18 working again by explicitly adding a node step: https://github.com/basher/basher-website/blob/master/.github/workflows/static.yml#L24
I also reverted the other steps back to their original values.
Your workflow file is currently using actions that are not at the latest versions, I think that might be the cause
Can you try bumping versions, comment out your Setup Node
step, and see if that solves your problem?
Here are the version bumps you can try:
-
uses: actions/checkout@v3
->uses: actions/[email protected]
-
uses: withastro/action@v0
->uses: withastro/[email protected]
(This is the crucial one) -
uses: actions/deploy-pages@v1
->uses: actions/[email protected]
(This is also crucial due to breaking changes inwithastro/[email protected]
)
This still fails.
The setup node
step allows me to build correctly for the time being.
I think your lock file has to be package-lock.json
to work, because I don't see npm-shrinkwrap.json
in the conditions used in withastro/action
's input validation
Would be nice if withastro/action
provided a lock-file
input as a fallback to unhandled lock file names
fyi, was having the same problem on my end with
- uses: withastro/action@v2
with:
path: ./packages/www
package-manager: pnpm
Specifying package-manager: pnpm@latest
it started to work...
I'm not fond of debugging github actions and the script seems like it should have handled it from what I can tell, so I didn't investigate further :)
fyi, was having the same problem on my end with
- uses: withastro/action@v2 with: path: ./packages/www package-manager: pnpm
Specifying
package-manager: pnpm@latest
it started to work... I'm not fond of debugging github actions and the script seems like it should have handled it from what I can tell, so I didn't investigate further :)
You're right!
the problem is:
Actions start all shells with command shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
, where -o pipefail
makes the whole pipe command return non-zero exit code if any of commands in the queue return non-zero exit code.
grep
is having exit code 1 if searched expression was not found. You may test it yourself with:
pipefail is on:
set -o pipefail
INPUT_PM=pnpm
echo "$INPUT_PM" | grep -o '@.*' | sed 's/^@//'
echo $?
this will show 1, which means command has failed.
pipefail is off:
set +o pipefail
INPUT_PM=pnpm
echo "$INPUT_PM" | grep -o '@.*' | sed 's/^@//'
echo $?
this will show 0, which means command has not failed.
So to resolve the issue we have 2 possibilities:
- Change line to
VERSION=$(echo "$INPUT_PM" | grep -o '@.*' || true | sed 's/^@//')
- this is the preferred solution - Just before line add
set +o pipefail
andset -o pipefail
after this line
I've created a PR for the solution number 1