From db2d0ebb939d4e899093f76348a62db247201220 Mon Sep 17 00:00:00 2001 From: dongwlin Date: Sat, 28 Dec 2024 00:33:37 +0800 Subject: [PATCH] ci: refactor --- .github/workflows/build.yml | 77 +++++++++++ .github/workflows/ci.yml | 263 ------------------------------------ .github/workflows/meta.yml | 59 ++++++++ 3 files changed, 136 insertions(+), 263 deletions(-) create mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/meta.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..4314232 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,77 @@ +name: build + +permissions: + contents: write + +on: + push: + tags: + - 'v*' + branches: + - '**' + paths: + - '.github/workflows/meta.yml' + - '.github/workflows/build.yml' + - 'assets/**' + pull_request: + branches: + - '**' + paths: + - '.github/workflows/meta.yml' + - '.github/workflows/build.yml' + - 'assets/**' + workflow_dispatch: + +jobs: + meta: + uses: ./.github/workflows/meta.yml + + build: + needs: meta + runs-on: ubuntu-latest + strategy: + fail-fast: false + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: 'stable' + + - name: Cache Go modules + uses: actions/cache@v4 + with: + path: | + ~/.cache/go-build + ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + + - name: Download Go modules + run: | + go mod download + + # release: + # if: ${{ needs.meta.outputs.is_release == 'true' }} + # needs: [meta, build] + # runs-on: ubuntu-latest + # steps: + # - uses: actions/download-artifact@v4 + # with: + # path: assets + # - run: | + # mv -vf assets/changelog/* . + # rm -rf assets/changelog + # cd assets + # for f in *; do + # (cd $f && zip -r ../$f-${{ needs.meta.outputs.tag }}.zip .) + # done + # - uses: softprops/action-gh-release@v1 + # with: + # body_path: CHANGELOG.md + # files: assets/* + # tag_name: ${{ needs.meta.outputs.tag }} \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 75fd9da..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,263 +0,0 @@ -name: build cli - -permissions: - contents: write - -on: - push: - tags: - - 'v*' - branches: - - '**' - paths: - - '.github/workflows/ci.yml' - - 'source/cli/**' - - 'assets/**' - - 'cmake/**' - - 'CMakelists.txt' - - 'CMakePresets.json' - pull_request: - branches: - - '**' - paths: - - '.github/workflows/ci.yml' - - 'source/cli/**' - - 'assets/**' - - 'cmake/**' - - 'CMakelists.txt' - - 'CMakePresets.json' - workflow_dispatch: - -jobs: - meta: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - id: set_tag - run: | - is_release=${{ startsWith(github.ref, 'refs/tags/v') }} - tag=$(git describe --tags --match "v*" ${{ github.ref }} || true) - if [[ $tag != v* ]]; then - tag=$(curl -sX GET "https://api.github.com/repos/MaaAssistantArknights/MaaFramework/releases/latest" --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' | awk '/tag_name/{print $4}' FS='["]') - if [[ $tag != v* ]]; then - tag="v0.0.0" - fi - tag=$(date "+$tag-%y%m%d-$(git rev-parse --short HEAD)") - fi - if ! $($is_release) ; then - prefix=${tag%-*-*} - suffix=${tag#$prefix-} - tag="$prefix-ci.$suffix" - fi - - echo tag=$tag | tee -a $GITHUB_OUTPUT - echo is_release=$is_release | tee -a $GITHUB_OUTPUT - - - if: ${{ startsWith(github.ref, 'refs/tags/v') }} - run: | - this_tag=${{ steps.set_tag.outputs.tag }} - last_tag=$(git describe --tags --match "v*" --abbrev=0 --exclude='${{ steps.set_tag.outputs.tag }}') - echo >> CHANGELOG.md - echo "**Full Changelog**: [$last_tag -> $this_tag](https://github.com/MaaAssistantArknights/MAABH3/compare/${last_tag}...${this_tag})" >> CHANGELOG.md - - - uses: actions/upload-artifact@v3 - if: ${{ startsWith(github.ref, 'refs/tags/v') }} - with: - name: changelog - path: CHANGELOG.md - outputs: - tag: ${{ steps.set_tag.outputs.tag }} - is_release: ${{ steps.set_tag.outputs.is_release }} - - windows: - needs: meta - runs-on: windows-latest - strategy: - matrix: - arch: [aarch64, x86_64] - fail-fast: false - - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - - name: Update resource version - run: | - python3 .github/update_resource_version.py assets/resource/properties.json ${{ needs.meta.outputs.tag }} - - - name: Download MaaFramework - uses: robinraju/release-downloader@v1.11 - with: - repository: MaaAssistantArknights/MaaFramework - tag: "v1.8.9" - fileName: "MAA-win-${{ matrix.arch }}*" - out-file-path: "deps" - extract: true - - - name: Build MAABH3 - run: | - cmake --preset "${{ matrix.arch == 'x86_64' && 'MSVC 2022' || 'MSVC 2022 ARM' }}" -DMAABH3_HASH_VERSION='${{ needs.meta.outputs.tag }}' - - cmake --build build --config Release -j 16 - - - name: Install - shell: bash - run: | - cmake --install build --prefix install - - - uses: actions/upload-artifact@v3 - with: - name: MAABH3-win-${{ matrix.arch }} - path: "install" - - ubuntu: - needs: meta - runs-on: ubuntu-latest - container: archlinux:base-devel - strategy: - matrix: - arch: [aarch64, x86_64] - fail-fast: false - - steps: - # maybe should explicitly update some pkg instead of all? - - name: Update system - run: | - pacman -Syu --noconfirm - - - name: Install dep - run: | - pacman -Sy - pacman -S --noconfirm cmake python ccache ninja git - - # https://github.com/MaaAssistantArknights/MaaFramework/actions/runs/5643408179/job/15285186255 - - uses: actions/checkout@v3 - with: - submodules: true - - - name: Install cross compile toolchains - if: ${{ matrix.arch != 'x86_64' }} - run: | - pacman -Sy - pacman -S --noconfirm aarch64-linux-gnu-gcc - - - name: Setup ccache - uses: Chocobo1/setup-ccache-action@v1 - with: - remove_stale_cache: false - - - name: Update resource version - run: | - python3 .github/update_resource_version.py assets/resource/properties.json ${{ needs.meta.outputs.tag }} - - - name: Download MaaFramework - uses: robinraju/release-downloader@v1.11 - with: - repository: MaaAssistantArknights/MaaFramework - tag: "v1.8.9" - fileName: "MAA-linux-${{ matrix.arch }}*" - out-file-path: "deps" - extract: true - - - name: Build MAABH3 - env: - CC: ${{ matrix.arch == 'x86_64' && 'ccache gcc' || 'ccache aarch64-linux-gnu-gcc' }} - CXX: ${{ matrix.arch == 'x86_64' && 'ccache g++' || 'ccache aarch64-linux-gnu-g++' }} - run: | - cmake --preset 'NinjaMulti' \ - -DMAABH3_HASH_VERSION='${{ needs.meta.outputs.tag }}' - - cmake --build build --config Release -j 16 - - - name: Install - shell: bash - run: | - cmake --install build --prefix install - - - uses: actions/upload-artifact@v3 - with: - name: MAABH3-linux-${{ matrix.arch }} - path: "install" - - macos: - needs: meta - runs-on: macos-latest - strategy: - matrix: - arch: [aarch64] - fail-fast: false - - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - - name: Install dep - run: | - brew install cmake python ninja - # ccache? - - - name: Install compiler - run: | - brew install llvm - # 16 - - - name: Update resource version - run: | - python3 .github/update_resource_version.py assets/resource/properties.json ${{ needs.meta.outputs.tag }} - - - name: Download MaaFramework - uses: robinraju/release-downloader@v1.11 - with: - repository: MaaAssistantArknights/MaaFramework - tag: "v1.8.9" - fileName: "MAA-macos-${{ matrix.arch }}*" - out-file-path: "deps" - extract: true - - - name: Build MAABH3 - env: - CC: "/opt/homebrew/opt/llvm/bin/clang" - CXX: "/opt/homebrew/opt/llvm/bin/clang++" - LDFLAGS: "-L/opt/homebrew/opt/llvm/lib" - CPPFLAGS: "-I/opt/homebrew/opt/llvm/include" - run: | - cmake --preset 'NinjaMulti' \ - -DARCH='${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}' \ - -DMAABH3_HASH_VERSION='${{ needs.meta.outputs.tag }}' - - cmake --build build --config Release -j 16 - - - name: Install - shell: bash - run: | - cmake --install build --prefix install - - - uses: actions/upload-artifact@v3 - with: - name: MAABH3-macos-${{ matrix.arch }} - path: "install" - - release: - if: ${{ needs.meta.outputs.is_release == 'true' }} - needs: [meta, windows, ubuntu, macos] - runs-on: ubuntu-latest - steps: - - uses: actions/download-artifact@v3 - with: - path: assets - - run: | - mv -vf assets/changelog/* . - rm -rf assets/changelog - cd assets - for f in *; do - (cd $f && zip -r ../$f-${{ needs.meta.outputs.tag }}.zip .) - done - - uses: softprops/action-gh-release@v1 - with: - body_path: CHANGELOG.md - files: assets/* - tag_name: ${{ needs.meta.outputs.tag }} \ No newline at end of file diff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml new file mode 100644 index 0000000..b612a49 --- /dev/null +++ b/.github/workflows/meta.yml @@ -0,0 +1,59 @@ +name: meta + +on: + workflow_call: + outputs: + is_release: + value: ${{ jobs.set.outputs.is_release }} + tag: + value: ${{ jobs.set.outputs.tag }} + version: + value: ${{ jobs.set.outputs.version }} + +jobs: + set: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - id: set + run: | + is_release=${{ startsWith(github.ref, 'refs/tags/v') }} + commit_hash=$(git rev-parse --short HEAD) + + if $is_release; then + tag=$(git describe --tags || true) + else + tag=$(git describe --tags --match "v*" --exclude "*-post*" || true) + fi + if [[ $tag != v* ]]; then + if $is_release; then echo "::error::Failed to get tag on releasing" && exit 1; fi + ver_core=$(curl -sX GET "https://api.github.com/repos/MaaXYZ/MAABH3/releases/latest" --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' | awk '/tag_name/{print $4}' FS='["]' || true) + tag=$(date "+$ver_core-1%m%d-${commit_hash}") + if [[ $tag != v* ]]; then + tag=$(date "+v%Y.%-m.%-d-2%H%M-${commit_hash}") + fi + fi + + if $is_release; then + version=${tag#v} + else + ver_core=${tag%-*-*} + suffixs=(${tag//-/ }) + tag=${ver_core}-post.${suffixs[-2]}-ci.${{ github.run_id }} + version=${tag#v}+${commit_hash}.$(date +%Y%m%d) + fi + + echo "tag=$tag + version=$version + is_release=$is_release" | tee -a "$GITHUB_OUTPUT" + outputs: + is_release: ${{ steps.set.outputs.is_release }} + tag: ${{ steps.set.outputs.tag }} # v | v + version: ${{ steps.set.outputs.version }} # | + e.g ↓ + # 主版本号.次版本号.修订号[-(alpha|beta|rc).预发布号] + # [-post.发布后号[-ci.${{ github.run_id }}]+${commit_hash}.${dateY%m%d}] + # 1.7.0 + # 1.7.0-beta.1 + # 1.7.0-post.6-ci.8678478007+gf5e12a1c.20240413 \ No newline at end of file