Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
291 changes: 137 additions & 154 deletions .github/workflows/packer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,100 +3,79 @@ name: Packer
on:
workflow_dispatch:
push:
branches: [main]
branches: [ main ]
paths:
- 'config/packer.json'
- 'config/fontmap.txt'
- 'src/**'
- 'config/packer/**'
- 'projects/**'



jobs:
build:
build-packer:
if: github.repository == 'CFPAOrg/Minecraft-Mod-Language-Package'
name: Build / Cache Packer
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 20
ref: main

- name: Check changed path on 1.12
uses: MarceloPrado/has-changed-path@v1.0
id: changed-1122
with:
paths: projects/1.12.2

- name: Check changed path on 1.16
uses: MarceloPrado/has-changed-path@v1.0
id: changed-116
- uses: actions/checkout@v4
with:
fetch-depth: 1
sparse-checkout: src

# 缓存程序。一方面,在不同job之间需要这么做;另一方面,大约可以改善运行时间?
# actions/cache的逻辑会在job末尾缓存打包程序;如果不命中,就自行构造程序。
- name: Cache Packer
id: cache-packer
uses: actions/cache@v3
with:
paths: projects/1.16

- name: Check changed path on 1.16 fabric
uses: MarceloPrado/has-changed-path@v1.0
id: changed-116-fabric
with:
paths: projects/1.16-fabric

- name: Check changed path on 1.18
uses: MarceloPrado/has-changed-path@v1.0
id: changed-118
with:
paths: projects/1.18
key: ${{ runner.os }}-Packer-${{ hashFiles('src/Packer/**') }}
path: |
Packer.exe
git2-*.dll
lookup-only: true

# 构造程序
- name: Build Packer if not cached
if: steps.cache-packer.outputs.cache-hit != 'true'
run: dotnet publish .\src\Packer\Packer.csproj -o ./ -r win-x64 -p:PublishSingleFile=true

- name: Check changed path on 1.18 fabric
uses: MarceloPrado/has-changed-path@v1.0
id: changed-118-fabric
build-uploader:
if: github.repository == 'CFPAOrg/Minecraft-Mod-Language-Package'
name: Build / Cache Uploader
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
sparse-checkout: src

# 缓存程序。一方面,在不同job之间需要这么做;另一方面,大约可以改善运行时间?
# actions/cache的逻辑会在job末尾缓存打包程序;如果不命中,就自行构造程序。
- name: Cache Uploader
id: cache-uploader
uses: actions/cache@v3
with:
paths: projects/1.18-fabric
key: ${{ runner.os }}-Uploader-${{ hashFiles('src/Uploader/**') }}
path: Uploader.exe
lookup-only: true

- name: Check changed path on 1.19
uses: MarceloPrado/has-changed-path@v1.0
id: changed-119
with:
paths: projects/1.19

# - name: Check changed path on 1.19 fabric
# uses: MarceloPrado/has-changed-path@v1.0
# id: changed-119-fabric
# with:
# paths: projects/1.19-fabric

- name: Build Packer
run: dotnet publish .\src\Packer\Packer.csproj -o ./ -r win-x64 -p:PublishSingleFile=true
# 构造程序
- name: Build Uploader if not cached
if: steps.cache-uploader.outputs.cache-hit != 'true'
run: dotnet publish .\src\Uploader\Uploader.csproj -o ./ -r win-x64 -p:PublishSingeFile=true

- name: Run Packer for 1.12.2
run: ./Packer --version="1.12.2"
if: steps.changed-1122.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'

- name: Run Packer for 1.16
run: ./Packer --version="1.16"
if: steps.changed-116.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'

- name: Run Packer for 1.16-fabric
run: ./Packer --version="1.16-fabric"
if: steps.changed-116-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'

- name: Run Packer for 1.18
run: ./Packer --version="1.18"
if: steps.changed-118.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'

- name: Run Packer for 1.18-fabric
run: ./Packer --version="1.18-fabric"
if: steps.changed-118-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'

- name: Run Packer for 1.19
run: ./Packer --version="1.19"
if: steps.changed-119.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'

# - name: Run Packer for 1.19-fabric
# run: ./Packer --version="1.19-fabric"
# if: steps.changed-119-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
initialize-release:
if: github.repository == 'CFPAOrg/Minecraft-Mod-Language-Package'
name: Initialize Release
runs-on: windows-latest
steps:

- name: Create timestamp
id: create_timestamp
run: echo "::set-output name=timestamp::$(date '+%Y%m%d%H%M%s')"
shell: bash

# Create the release: https://github.com/actions/create-release
# Create the release: https://github.com/actions/create-release
- name: Create release
id: create_release
uses: actions/create-release@v1
Expand All @@ -107,95 +86,99 @@ jobs:
release_name: 汉化资源包-Snapshot-${{ steps.create_timestamp.outputs.timestamp }}
draft: false
prerelease: false

# Upload release asset: https://github.com/actions/upload-release-asset
- name: Update release asset for 1.12
id: upload-release-asset1
if: steps.changed-1122.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
outputs:
upload-url: ${{ steps.create_release.outputs.upload_url }}


pack:
if: github.repository == 'CFPAOrg/Minecraft-Mod-Language-Package'
name: Pack Resources and Upload Artifacts/Releases
needs: [ build-packer, initialize-release ] # 显然,需要存在打包程序,才能打包。
strategy:
fail-fast: false # 把正常的文件先打包了,避免一处错误阻塞整个仓库。
matrix:
# 版本列表。将对这里的每个版本判断,按需打包。
# 如需添加新版本,在这里添加即可。
version: [ "1.12.2", "1.16", "1.16-fabric", "1.18", "1.18-fabric", "1.19", "1.20", "1.20-fabric" ]
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: Minecraft-Mod-Language-Package-1.12.2.zip
asset_name: Minecraft-Mod-Language-Package-1.12.2.zip
asset_content_type: application/zip

- name: Update release asset for 1.16
id: upload-release-asset2
if: steps.changed-116.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 20 # 显然,需要有提交历史才能比较提交。20这个数是任意的。

# 由于Github的限制,这里需要重新拉取打包程序。
- name: Restore Packer
id: cache-restore
# https://github.com/actions/cache/issues/1265#issuecomment-1819612829 `fail-on-cache-miss` for restore action not failing the workflow
uses: actions/cache/restore@v3.3.1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: Minecraft-Mod-Language-Package-1.16.zip
asset_name: Minecraft-Mod-Language-Package-1.16.zip
asset_content_type: application/zip
key: ${{ runner.os }}-Packer-${{ hashFiles('source/Packer/**') }}
path: |
Packer.exe
git2-*.dll
fail-on-cache-miss: true # 前一步理应构造过的。如果不命中,肯定有问题,不如直接挂掉。


- name: Update release asset for 1.16-fabric
id: upload-release-asset3
if: steps.changed-116-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check changed path on ${{ matrix.version }}
uses: MarceloPrado/has-changed-path@v1.0
id: check-changes
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: Minecraft-Mod-Language-Package-1.16-fabric.zip
asset_name: Minecraft-Mod-Language-Package-1.16-fabric.zip
asset_content_type: application/zip

- name: Update release asset for 1.18
id: upload-release-asset4
if: steps.changed-118.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 判断位置:该版本文件、该版本配置、代码
paths: >
projects/${{ matrix.version }}
config/packer/${{ matrix.version }}.json
src/**

- name: Run Packer for ${{ matrix.version }}
# 分发包中应当包含全部内容
run: ./Packer --version="${{ matrix.version }}"
# 运行逻辑:内容有更改 或 手动运行
if: steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'

# Artifact 上传内容:每个版本一个压缩包,包含了资源包和md5校验文件
- name: Upload Artifact for ${{ matrix.version }}
uses: actions/upload-artifact@v3.0.0
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: Minecraft-Mod-Language-Package-1.18.zip
asset_name: Minecraft-Mod-Language-Package-1.18.zip
asset_content_type: application/zip
name: Minecraft-Mod-Language-Package-${{ matrix.version }}
path: |
Minecraft-Mod-Language-Package-${{ matrix.version }}.zip
${{ matrix.version }}.md5
if: steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'

- name: Update release asset for 1.18-fabric
id: upload-release-asset5
if: steps.changed-118-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
# Upload release asset: https://github.com/actions/upload-release-asset
- name: Update release asset for ${{ matrix.version }}
id: upload-release-asset
if: steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: Minecraft-Mod-Language-Package-1.18-fabric.zip
asset_name: Minecraft-Mod-Language-Package-1.18-fabric.zip
upload_url: ${{ needs.initialize-release.outputs.upload-url }}
asset_path: Minecraft-Mod-Language-Package-${{ matrix.version }}.zip
asset_name: Minecraft-Mod-Language-Package-${{ matrix.version }}.zip
asset_content_type: application/zip


- name: Update release asset for 1.19
id: upload-release-asset6
if: steps.changed-119.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: Minecraft-Mod-Language-Package-1.19.zip
asset_name: Minecraft-Mod-Language-Package-1.19.zip
asset_content_type: application/zip
upload:
if: github.repository == 'CFPAOrg/Minecraft-Mod-Language-Package'
name: Upload Resource Packs to Remote Server
needs: [ pack, build-uploader ] # 显然,需要打包完成,并且存在上传程序,才可以上传给分发服务器
runs-on: windows-latest
steps:

# - name: Update release asset for 1.18-fabric
# id: upload-release-asset7
# if: steps.changed-119-fabric.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ steps.create_release.outputs.upload_url }}
# asset_path: Minecraft-Mod-Language-Package-1.19-fabric.zip
# asset_name: Minecraft-Mod-Language-Package-1.19-fabric.zip
# asset_content_type: application/zip

- name: Build Uploader
run: dotnet publish .\src\Uploader\Uploader.csproj -o ./ -r win-x64 -p:PublishSingeFile=true
# 由于Github的限制,这里需要重新拉取上传程序。
- name: Restore Uploader
id: cache-restore
uses: actions/cache/restore@v3
with:
key: ${{ runner.os }}-Uploader-${{ hashFiles('source/Uploader/**') }}
path: Uploader.exe
fail-on-cache-miss: true # 前一步理应构造过的。如果不命中,肯定有问题,不如直接挂掉。

# 还原artifact(资源包)
- name: Restore Artifacts
uses: actions/download-artifact@v3
with:
path: artifacts/

- name: Run Uploader
run: .\Uploader --host="${{ secrets.SSH_IP }}" --name="${{ secrets.SSH_USER }}" --password="${{ secrets.SSH_PWD }}"
Loading