@@ -3,100 +3,79 @@ name: Packer
33on :
44 workflow_dispatch :
55 push :
6- branches : [main]
6+ branches : [ main ]
77 paths :
8- - ' config/packer.json '
9- - ' config/fontmap.txt '
8+ - ' src/** '
9+ - ' config/packer/** '
1010 - ' projects/**'
1111
12+
13+
1214jobs :
13- build :
15+ build-packer :
16+ if : github.repository == 'CFPAOrg/Minecraft-Mod-Language-Package'
17+ name : Build / Cache Packer
1418 runs-on : windows-latest
1519 steps :
16- - uses : actions/checkout@v2
17- with :
18- fetch-depth : 20
19- ref : main
20-
21- - name : Check changed path on 1.12
22- uses :
MarceloPrado/[email protected] 23- id : changed-1122
24- with :
25- paths : projects/1.12.2
26-
27- - name : Check changed path on 1.16
28- uses :
MarceloPrado/[email protected] 29- id : changed-116
20+ - uses : actions/checkout@v4
21+ with :
22+ fetch-depth : 1
23+ sparse-checkout : src
24+
25+ # 缓存程序。一方面,在不同job之间需要这么做;另一方面,大约可以改善运行时间?
26+ # actions/cache的逻辑会在job末尾缓存打包程序;如果不命中,就自行构造程序。
27+ - name : Cache Packer
28+ id : cache-packer
29+ uses : actions/cache@v3
3030 with :
31- paths : projects/1.16
32-
33- - name : Check changed path on 1.16 fabric
34- uses :
MarceloPrado/[email protected] 35- id : changed-116-fabric
36- with :
37- paths : projects/1.16-fabric
38-
39- - name : Check changed path on 1.18
40- uses :
MarceloPrado/[email protected] 41- id : changed-118
42- with :
43- paths : projects/1.18
31+ key : ${{ runner.os }}-Packer-${{ hashFiles('src/Packer/**') }}
32+ path : |
33+ Packer.exe
34+ git2-*.dll
35+ lookup-only : true
36+
37+ # 构造程序
38+ - name : Build Packer if not cached
39+ if : steps.cache-packer.outputs.cache-hit != 'true'
40+ run : dotnet publish .\src\Packer\Packer.csproj -o ./ -r win-x64 -p:PublishSingleFile=true
4441
45- - name : Check changed path on 1.18 fabric
46- uses :
MarceloPrado/[email protected] 47- id : changed-118-fabric
42+ build-uploader :
43+ if : github.repository == 'CFPAOrg/Minecraft-Mod-Language-Package'
44+ name : Build / Cache Uploader
45+ runs-on : windows-latest
46+ steps :
47+ - uses : actions/checkout@v4
48+ with :
49+ fetch-depth : 1
50+ sparse-checkout : src
51+
52+ # 缓存程序。一方面,在不同job之间需要这么做;另一方面,大约可以改善运行时间?
53+ # actions/cache的逻辑会在job末尾缓存打包程序;如果不命中,就自行构造程序。
54+ - name : Cache Uploader
55+ id : cache-uploader
56+ uses : actions/cache@v3
4857 with :
49- paths : projects/1.18-fabric
58+ key : ${{ runner.os }}-Uploader-${{ hashFiles('src/Uploader/**') }}
59+ path : Uploader.exe
60+ lookup-only : true
5061
51- - name : Check changed path on 1.19
52- uses :
MarceloPrado/[email protected] 53- id : changed-119
54- with :
55- paths : projects/1.19
56-
57- # - name: Check changed path on 1.19 fabric
58- # uses: MarceloPrado/[email protected] 59- # id: changed-119-fabric
60- # with:
61- # paths: projects/1.19-fabric
62-
63- - name : Build Packer
64- run : dotnet publish .\src\Packer\Packer.csproj -o ./ -r win-x64 -p:PublishSingleFile=true
62+ # 构造程序
63+ - name : Build Uploader if not cached
64+ if : steps.cache-uploader.outputs.cache-hit != 'true'
65+ run : dotnet publish .\src\Uploader\Uploader.csproj -o ./ -r win-x64 -p:PublishSingeFile=true
6566
66- - name : Run Packer for 1.12.2
67- run : ./Packer --version="1.12.2"
68- if : steps.changed-1122.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
69-
70- - name : Run Packer for 1.16
71- run : ./Packer --version="1.16"
72- if : steps.changed-116.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
73-
74- - name : Run Packer for 1.16-fabric
75- run : ./Packer --version="1.16-fabric"
76- if : steps.changed-116-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
77-
78- - name : Run Packer for 1.18
79- run : ./Packer --version="1.18"
80- if : steps.changed-118.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
81-
82- - name : Run Packer for 1.18-fabric
83- run : ./Packer --version="1.18-fabric"
84- if : steps.changed-118-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
85-
86- - name : Run Packer for 1.19
87- run : ./Packer --version="1.19"
88- if : steps.changed-119.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
89-
90- # - name: Run Packer for 1.19-fabric
91- # run: ./Packer --version="1.19-fabric"
92- # if: steps.changed-119-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
67+ initialize-release :
68+ if : github.repository == 'CFPAOrg/Minecraft-Mod-Language-Package'
69+ name : Initialize Release
70+ runs-on : windows-latest
71+ steps :
9372
9473 - name : Create timestamp
9574 id : create_timestamp
9675 run : echo "::set-output name=timestamp::$(date '+%Y%m%d%H%M%s')"
9776 shell : bash
98-
99- # Create the release: https://github.com/actions/create-release
77+
78+ # Create the release: https://github.com/actions/create-release
10079 - name : Create release
10180 id : create_release
10281 uses : actions/create-release@v1
@@ -107,95 +86,99 @@ jobs:
10786 release_name : 汉化资源包-Snapshot-${{ steps.create_timestamp.outputs.timestamp }}
10887 draft : false
10988 prerelease : false
110-
111- # Upload release asset: https://github.com/actions/upload-release-asset
112- - name : Update release asset for 1.12
113- id : upload-release-asset1
114- if : steps.changed-1122.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
115- uses : actions/upload-release-asset@v1
116- env :
117- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
89+ outputs :
90+ upload-url : ${{ steps.create_release.outputs.upload_url }}
91+
92+
93+ pack :
94+ if : github.repository == 'CFPAOrg/Minecraft-Mod-Language-Package'
95+ name : Pack Resources and Upload Artifacts/Releases
96+ needs : [ build-packer, initialize-release ] # 显然,需要存在打包程序,才能打包。
97+ strategy :
98+ fail-fast : false # 把正常的文件先打包了,避免一处错误阻塞整个仓库。
99+ matrix :
100+ # 版本列表。将对这里的每个版本判断,按需打包。
101+ # 如需添加新版本,在这里添加即可。
102+ version : [ "1.12.2", "1.16", "1.16-fabric", "1.18", "1.18-fabric", "1.19", "1.20", "1.20-fabric" ]
103+ runs-on : windows-latest
104+ steps :
105+ - uses : actions/checkout@v2
118106 with :
119- upload_url : ${{ steps.create_release.outputs.upload_url }}
120- asset_path : Minecraft-Mod-Language-Package-1.12.2.zip
121- asset_name : Minecraft-Mod-Language-Package-1.12.2.zip
122- asset_content_type : application/zip
123-
124- - name : Update release asset for 1.16
125- id : upload-release-asset2
126- if : steps.changed-116.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
127- uses : actions/upload-release-asset@v1
128- env :
129- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
107+ fetch-depth : 20 # 显然,需要有提交历史才能比较提交。20这个数是任意的。
108+
109+ # 由于Github的限制,这里需要重新拉取打包程序。
110+ - name : Restore Packer
111+ id : cache-restore
112+ # https://github.com/actions/cache/issues/1265#issuecomment-1819612829 `fail-on-cache-miss` for restore action not failing the workflow
113+ uses :
actions/cache/[email protected] 130114 with :
131- upload_url : ${{ steps.create_release.outputs.upload_url }}
132- asset_path : Minecraft-Mod-Language-Package-1.16.zip
133- asset_name : Minecraft-Mod-Language-Package-1.16.zip
134- asset_content_type : application/zip
115+ key : ${{ runner.os }}-Packer-${{ hashFiles('source/Packer/**') }}
116+ path : |
117+ Packer.exe
118+ git2-*.dll
119+ fail-on-cache-miss : true # 前一步理应构造过的。如果不命中,肯定有问题,不如直接挂掉。
135120
136-
137- - name : Update release asset for 1.16-fabric
138- id : upload-release-asset3
139- if : steps.changed-116-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
140- uses : actions/upload-release-asset@v1
141- env :
142- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
121+ - name : Check changed path on ${{ matrix.version }}
122+ uses :
MarceloPrado/[email protected] 123+ id : check-changes
143124 with :
144- upload_url : ${{ steps.create_release.outputs.upload_url }}
145- asset_path : Minecraft-Mod-Language-Package-1.16-fabric.zip
146- asset_name : Minecraft-Mod-Language-Package-1.16-fabric.zip
147- asset_content_type : application/zip
148-
149- - name : Update release asset for 1.18
150- id : upload-release-asset4
151- if : steps.changed-118.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
152- uses : actions/upload-release-asset@v1
153- env :
154- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
125+ # 判断位置:该版本文件、该版本配置、代码
126+ paths : >
127+ projects/${{ matrix.version }}
128+ config/packer/${{ matrix.version }}.json
129+ src/**
130+
131+ - name : Run Packer for ${{ matrix.version }}
132+ # 分发包中应当包含全部内容
133+ run : ./Packer --version="${{ matrix.version }}"
134+ # 运行逻辑:内容有更改 或 手动运行
135+ if : steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
136+
137+ # Artifact 上传内容:每个版本一个压缩包,包含了资源包和md5校验文件
138+ - name : Upload Artifact for ${{ matrix.version }}
139+ 155140 with :
156- upload_url : ${{ steps.create_release.outputs.upload_url }}
157- asset_path : Minecraft-Mod-Language-Package-1.18.zip
158- asset_name : Minecraft-Mod-Language-Package-1.18.zip
159- asset_content_type : application/zip
141+ name : Minecraft-Mod-Language-Package-${{ matrix.version }}
142+ path : |
143+ Minecraft-Mod-Language-Package-${{ matrix.version }}.zip
144+ ${{ matrix.version }}.md5
145+ if : steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
160146
161- - name : Update release asset for 1.18-fabric
162- id : upload-release-asset5
163- if : steps.changed-118-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
147+ # Upload release asset: https://github.com/actions/upload-release-asset
148+ - name : Update release asset for ${{ matrix.version }}
149+ id : upload-release-asset
150+ if : steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
164151 uses : actions/upload-release-asset@v1
165152 env :
166153 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
167154 with :
168- upload_url : ${{ steps.create_release .outputs.upload_url }}
169- asset_path : Minecraft-Mod-Language-Package-1.18-fabric .zip
170- asset_name : Minecraft-Mod-Language-Package-1.18-fabric .zip
155+ upload_url : ${{ needs.initialize-release .outputs.upload-url }}
156+ asset_path : Minecraft-Mod-Language-Package-${{ matrix.version }} .zip
157+ asset_name : Minecraft-Mod-Language-Package-${{ matrix.version }} .zip
171158 asset_content_type : application/zip
159+
172160
173- - name : Update release asset for 1.19
174- id : upload-release-asset6
175- if : steps.changed-119.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
176- uses : actions/upload-release-asset@v1
177- env :
178- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
179- with :
180- upload_url : ${{ steps.create_release.outputs.upload_url }}
181- asset_path : Minecraft-Mod-Language-Package-1.19.zip
182- asset_name : Minecraft-Mod-Language-Package-1.19.zip
183- asset_content_type : application/zip
161+ upload :
162+ if : github.repository == 'CFPAOrg/Minecraft-Mod-Language-Package'
163+ name : Upload Resource Packs to Remote Server
164+ needs : [ pack, build-uploader ] # 显然,需要打包完成,并且存在上传程序,才可以上传给分发服务器
165+ runs-on : windows-latest
166+ steps :
184167
185- # - name: Update release asset for 1.18-fabric
186- # id: upload-release-asset7
187- # if: steps.changed-119-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
188- # uses: actions/upload-release-asset@v1
189- # env :
190- # GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
191- # with:
192- # upload_url: ${{ steps.create_release.outputs.upload_url }}
193- # asset_path: Minecraft-Mod-Language-Package-1.19-fabric.zip
194- # asset_name: Minecraft-Mod-Language-Package-1.19-fabric.zip
195- # asset_content_type: application/zip
196-
197- - name : Build Uploader
198- run : dotnet publish .\src\Uploader\Uploader.csproj -o ./ -r win-x64 -p:PublishSingeFile=true
168+ # 由于Github的限制,这里需要重新拉取上传程序。
169+ - name : Restore Uploader
170+ id : cache-restore
171+ uses : actions/cache/restore@v3
172+ with :
173+ key : ${{ runner.os }}-Uploader-${{ hashFiles('source/Uploader/**') }}
174+ path : Uploader.exe
175+ fail-on-cache-miss : true # 前一步理应构造过的。如果不命中,肯定有问题,不如直接挂掉。
176+
177+ # 还原artifact(资源包)
178+ - name : Restore Artifacts
179+ uses : actions/download-artifact@v3
180+ with :
181+ path : artifacts/
199182
200183 - name : Run Uploader
201184 run : .\Uploader --host="${{ secrets.SSH_IP }}" --name="${{ secrets.SSH_USER }}" --password="${{ secrets.SSH_PWD }}"
0 commit comments