GitHub Actions编译
1. 前言
(‾◡◝) 前面出过了Windows和Linux的教程,但是交叉编译不同版本有点儿困难
这次经过了大佬手把手的教我配置部署到了GitHub Actions自动化编译和AList官方的一样编译很多不同版本,妈妈再也不用担心不能交叉编译啦
提示
- 如果你只有修改前端的想法,强烈推荐 单独只进行编译前端即可,后端(二进制)应用程序继续使用AList官方原版的文件
- 因为现在支持引用第三方前端文件使用:参考 https://alist.nn.ci/zh/config/configuration.html#bleve-dir
- 如果没有修改后端的需求,只编译前端文件就可以
2. 准备工作
前期的准备工作也很多,Fork两个仓库、新建一个仓库和分支、获取两个token、部署两个仓库秘钥配置
(如果熟练的话5分钟搞定,第一次可以慢慢改一改,然后等熟练了删掉两个仓库重新来一遍)
2.1 Fork两个仓库
- 分别fork 以下两个仓库
2.2 新建一个仓库和分支
- 新建一个名为
web-dist
的仓库 - 前往新建仓库👉 https://github.com/new

- 在
web-dist
仓库新建一个dev
分支

2.3 获取两个 Token
- 获取GitHub Token


获取
Crowdin
Token,AList语言包
2.4 部署两个仓库配置
我们来到我们fork之后自己的前端仓库
- 配置三个秘钥:
CROWDIN_PERSONAL_TOKEN
、CROWDIN_PROJECT_ID
、MY_TOKEN
CROWDIN_PERSONAL_TOKEN
:在上方2.3步骤中获取的Crowdin TokenCROWDIN_PROJECT_ID
:AList 在 Crowdin 项目的ID,ID为526584
MY_TOKEN
:在上方3.1步骤中获取的GitHub Token
- 配置三个秘钥:
我们来到我们fork之后自己的后端仓库
配置一个秘钥
MY_TOKEN
MY_TOKEN
:在上方3.1步骤中获取的GitHub Token
两个仓库配置图例:图1为前端,图2为后端,
- 在配置的时候顺手检查一下两个仓库的图3选项,如果不是选择的第一个请勾选为第一个选项,否则在构建时候没有权限会报错



3. 修改配置文件
3.1 修改前端配置文件
- .github/workflows/build.yml 原文件第41行1和第75行2alist-org换成自己的,如果你前端仓库名称也换了也自己修改一下
- name: Checkout dist repo
uses: actions/checkout@v4
with:
repository: alist-org/web-dist // [!code --]
repository: 自己GitHub名字/web-dist // [!code ++]
ref: dev
path: web-dist
persist-credentials: false
fetch-depth: 0
- name: Upload dist files
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.MY_TOKEN }}
branch: dev
directory: web-dist
repository: alist-org/web-dist // [!code --]
repository: 自己GitHub名字/web-dist // [!code ++]
force: true
- .github/workflows/release.yml 原文件的第56行1和85行2需要修改,70-78行3的需要删除,如果你前端仓库名称也换了也自己修改一下
- name: Checkout dist repo
uses: actions/checkout@v4
with:
repository: alist-org/web-dist // [!code --]
repository: 自己GitHub名字/web-dist // [!code ++]
ref: main
path: web-dist
persist-credentials: false
fetch-depth: 0
- name: Upload dist files
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.MY_TOKEN }}
branch: main
directory: web-dist
repository: alist-org/web-dist // [!code --]
repository: 自己GitHub名字/web-dist // [!code ++]
- name: Publish npm // [!code --]
run: |
cd alist-web // [!code --]
echo "//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN // [!code --]}" > ~/.npmrc // [!code --]
pnpm publish --no-git-checks // [!code --]
cd .. // [!code --]
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} // [!code --]
根目录下的release.sh 原文件的第9行需要修改【更改语言包为下载方式】
# build
pnpm install
pnpm i18n:release // [!code --]
wget https://crowdin.com/backend/download/project/alist/zh-CN.zip // [!code ++]
unzip zh-CN.zip // [!code ++]
node ./scripts/i18n.mjs // [!code ++]
rm zh-CN.zip // [!code ++]
pnpm build
cp -r dist ../
cd ..
如果要使用繁体或者日文请自己更换为下方代码
# build
pnpm install
pnpm i18n:release // [!code --]
wget https://crowdin.com/backend/download/project/alist/zh-TW.zip // [!code ++]
unzip zh-TW.zip // [!code ++]
node ./scripts/i18n.mjs // [!code ++]
rm zh-CN.zip // [!code ++]
pnpm build
cp -r dist ../
cd ..
# build
pnpm install
pnpm i18n:release // [!code --]
wget https://crowdin.com/backend/download/project/alist/ja.zip// [!code ++]
unzip ja.zip // [!code ++]
node ./scripts/i18n.mjs // [!code ++]
rm ja.zip // [!code ++]
pnpm build
cp -r dist ../
cd ..
# build
pnpm install
pnpm i18n:release // [!code --]
wget https://crowdin.com/backend/download/project/alist/zh-CN.zip // [!code ++]
unzip zh-CN.zip // [!code ++]
wget https://crowdin.com/backend/download/project/alist/zh-TW.zip // [!code ++]
unzip zh-TW.zip // [!code ++]
wget https://crowdin.com/backend/download/project/alist/ja.zip // [!code ++]
unzip ja.zip // [!code ++]
node ./scripts/i18n.mjs // [!code ++]
rm zh-CN.zip // [!code ++]
rm zh-TW.zip // [!code ++]
rm ja.zip // [!code ++]
pnpm build
cp -r dist ../
cd ..
3.2 修改后端配置文件
- .github/workflows/release.yml 原文件的第50行和75行需要删除(以下代码都进行删除,这个是编译桌面版的)
release_desktop:
needs: release // [!code --]
name: Release desktop // [!code --]
runs-on: ubuntu-latest // [!code --]
steps:
- name: Checkout repo // [!code --]
uses: actions/checkout@v4 // [!code --]
with:
repository: alist-org/desktop-release // [!code --]
ref: main // [!code --]
persist-credentials: false // [!code --]
fetch-depth: 0 // [!code --]
// [!code --]
- name: Add tag // [!code --]
run: |
git config --local user.email "bot@nn.ci" // [!code --]
git config --local user.name "IlaBot" // [!code --]
version=$(wget -qO- -t1 -T2 "https://api.github.com/repos/AlistGo/alist/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') // [!code --]
git tag -a $version -m "release $version" // [!code --]
// [!code --]
- name: Push tags // [!code --]
uses: ad-m/github-push-action@master // [!code --]
with:
github_token: ${{ secrets.MY_TOKEN }} // [!code --]
branch: main // [!code --]
repository: alist-org/desktop-release // [!code --]
- 根目录下的build.sh 文件
FetchWebDev() {
curl -L https://codeload.github.com/AlistGo/web-dist/tar.gz/refs/heads/dev -o web-dist-dev.tar.gz // [!code --]
curl -L https://codeload.github.com/自己GitHub名字/web-dist/tar.gz/refs/heads/dev -o web-dist-dev.tar.gz // [!code ++]
tar -zxvf web-dist-dev.tar.gz
rm -rf public/dist
mv -f web-dist-dev/dist public
rm -rf web-dist-dev web-dist-dev.tar.gz
}
FetchWebRelease() {
curl -L https://github.com/AlistGo/alist-web/releases/latest/download/dist.tar.gz -o dist.tar.gz // [!code --]
curl -L https://github.com/自己GitHub名字/alist-web/releases/latest/download/dist.tar.gz -o dist.tar.gz // [!code ++]
tar -zxvf dist.tar.gz
rm -rf public/dist
mv -f dist public
删除以下文件(优化):着两个是编译docker版本的,我暂时不需要就删除了
如果你呀编译docker版本,自己留着改一改(我目前还不会发布到Docker)
- .github/workflows/release_docker.yml
- .github/workflows/build_docker.yml
4. 开始编译
在编译前一定要去手动去打开一下 仓库的 Actions
选项,否则后续无法进行编译操作
打开我们fork好之后的自己的前后端GitHub仓库 --> Actions --> 选择绿色按钮I understand my workflows, go ahead and enable them

4.1 编译前端
打开已经fork好的自己的前端代码,进行发布Releases
,选项在右侧能看到Releases
的选项

填写好后点击下方绿色按钮 Publish release
Actions就会开始自动执行,我们等待Actions的任务完成
- 如果因为没有打开过一次
Actions
导致 发布Release
后 Actions没有自动执行,我们可以删除之前已经发布的Release
和Tags
去打开一次 Actions 再重新发布Release
就好

4.2 编译后端
编译后端的话是要前端编译没有问题喔~否则后端肯定是会提示错误的

前端编译完成后(2-3分钟就可以完成),我们去编译后端,进行发布Releases
,发布和删除 Releases
的方式和前端的一样
5. 结束
按照这套教程编译是没有问题的,如果那里不对可能是没有操作正确,也可以参考我的文件
- 前端:https://github.com/anwen-anyi/alist-web
- 后端:https://github.com/anwen-anyi/alist
- web-dist:https://github.com/anwen-anyi/web-dist
现在编译出来也是需要很久,和 AList 官方编译一样也大概需要25-30分钟,如果只需要个别版本可以自己修改配置文件,修改配置文件后续补上(未知时间)
- 如果没有修改后端的需求不建议自己编译了,只编译前端就好,看开始提醒