mirror of
https://github.com/mudler/LocalAI.git
synced 2026-08-04 12:22:22 -04:00
Deploy site to GitHub Pages failed on five of the last eight master
pushes, always in the build job before Hugo runs:
Setup go version spec 1.22
...
go: downloading go1.26.0 (linux/amd64)
go: download go1.26.0: golang.org/toolchain@v0.0.1-go1.26.0.linux-amd64:
Get "https://proxy.golang.org/...": connect: network is unreachable
##[error]Command failed: go env GOPATH
The workflow pinned setup-go to 1.22 while go.mod declares go 1.26.0, so
the `go run ./.github/ci/modelslist.go` step that generates the gallery
page had to fetch the real toolchain from proxy.golang.org first. That
fetch is not reliably reachable from the runner, which is why the deploy
alternated between passing and failing rather than failing outright.
Track go.mod instead of a literal. The version the module needs is then
installed directly and there is no toolchain download to fail.
This matters beyond CI noise: the docs and the site, including the
release blog post, ship through this workflow.
Scoped deliberately to gh-pages, the workflow with the observed failure.
test-extra.yml pins 1.25.4 in a dozen places and is below go.mod for the
same reason, so those jobs also download a toolchain, but they are
currently green and rewriting twelve pins on a hunch risks more than it
fixes. Worth a follow-up.
Assisted-by: Claude Code:claude-opus-5 [Read] [Edit] [Bash]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
121 lines
4.3 KiB
YAML
121 lines
4.3 KiB
YAML
name: Deploy site to GitHub Pages
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
paths:
|
|
- 'docs/**'
|
|
- 'website/**'
|
|
- 'gallery/**'
|
|
- 'images/**'
|
|
- '.github/ci/modelslist.go'
|
|
- '.github/ci/gen-redirects.sh'
|
|
- '.github/workflows/gh-pages.yml'
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
pages: write
|
|
id-token: write
|
|
|
|
concurrency:
|
|
group: pages
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
build:
|
|
# Self-hosted. This workflow is push-to-master + workflow_dispatch only, so
|
|
# it never executes pull-request code and a fork cannot reach the runner
|
|
# with untrusted changes. The repository guard keeps forks (whose own master
|
|
# pushes would otherwise queue forever against a label they do not have) on
|
|
# the hosted pool.
|
|
#
|
|
# Why: the GitHub-hosted pool is shared account-wide and has repeatedly
|
|
# starved (2026-07-31: 35 consecutive minutes at zero scheduled jobs, while
|
|
# arc-runner-set kept completing work throughout). Publishing the site is
|
|
# small, frequent, and must not sit behind a saturated hosted queue.
|
|
#
|
|
# Needs only git, tar and curl on the runner: setup-go and actions-hugo
|
|
# fetch their own toolchains, and no step uses sudo, apt, make or unzip.
|
|
runs-on: ${{ github.repository == 'mudler/LocalAI' && 'arc-runner-set' || 'ubuntu-latest' }}
|
|
env:
|
|
HUGO_VERSION: "0.146.3"
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v7
|
|
with:
|
|
fetch-depth: 0 # needed for enableGitInfo
|
|
submodules: true
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
# Track go.mod rather than a literal. Pinned at 1.22 this installed a
|
|
# toolchain older than the module's `go 1.26.0`, so the `go run` below
|
|
# downloaded the real one from proxy.golang.org on every run. That
|
|
# fetch is not always reachable from the runner and the deploy failed
|
|
# on five of eight consecutive master pushes with:
|
|
# go: download go1.26.0: ... connect: network is unreachable
|
|
# ##[error]Command failed: go env GOPATH
|
|
# Installing the version the module asks for removes the download
|
|
# instead of depending on it succeeding.
|
|
go-version-file: go.mod
|
|
cache: false
|
|
|
|
- name: Setup Hugo
|
|
uses: peaceiris/actions-hugo@v3
|
|
with:
|
|
hugo-version: ${{ env.HUGO_VERSION }}
|
|
extended: true
|
|
|
|
- name: Setup Pages
|
|
id: pages
|
|
uses: actions/configure-pages@v6
|
|
|
|
# The gallery page is generated from the model index and shipped as a
|
|
# static asset of the docs site, so it has to exist before Hugo runs.
|
|
- name: Generate gallery
|
|
run: go run ./.github/ci/modelslist.go ./gallery/index.yaml > docs/static/gallery.html
|
|
|
|
# Two Hugo sites, one Pages artifact: the main site owns the root,
|
|
# the docs site is nested under /docs/.
|
|
- name: Build the main site
|
|
working-directory: website
|
|
run: hugo --minify --baseURL "${{ steps.pages.outputs.base_url }}/"
|
|
|
|
- name: Build documentation site
|
|
working-directory: docs
|
|
run: |
|
|
mkdir -p layouts/_default
|
|
hugo --minify --baseURL "${{ steps.pages.outputs.base_url }}/docs/"
|
|
|
|
- name: Merge documentation into the main site
|
|
run: |
|
|
mkdir -p website/public/docs
|
|
cp -R docs/public/. website/public/docs/
|
|
|
|
# Keeps the pre-split URLs alive; see the script header.
|
|
- name: Generate legacy URL redirects
|
|
run: .github/ci/gen-redirects.sh website/public "${{ steps.pages.outputs.base_url }}/"
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-pages-artifact@v5
|
|
with:
|
|
path: website/public
|
|
|
|
deploy:
|
|
environment:
|
|
name: github-pages
|
|
url: ${{ steps.deployment.outputs.page_url }}
|
|
# Same routing as build: a hosted slot for a ~10s deploy is exactly the kind
|
|
# of job that should not block on a starved pool. deploy-pages authenticates
|
|
# with the job's OIDC token (id-token: write above), which self-hosted
|
|
# runners issue the same way hosted ones do.
|
|
runs-on: ${{ github.repository == 'mudler/LocalAI' && 'arc-runner-set' || 'ubuntu-latest' }}
|
|
needs: build
|
|
steps:
|
|
- name: Deploy to GitHub Pages
|
|
id: deployment
|
|
uses: actions/deploy-pages@v5
|