From 0abd8fd150f661ad5e3034a86b1ea801e8a3e929 Mon Sep 17 00:00:00 2001 From: JyCyunMe Date: Sat, 29 May 2021 20:34:51 +0800 Subject: [PATCH] feat: add GitHub Actions configs --- .../workflows/github_build_dev_windows.yml | 141 +++++++++++++ .../github_build_release_windows.yml | 196 ++++++++++++++++++ CHANGELOG.md | 0 RELEASELOG.md | 11 + 4 files changed, 348 insertions(+) create mode 100644 .github/workflows/github_build_dev_windows.yml create mode 100644 .github/workflows/github_build_release_windows.yml create mode 100644 CHANGELOG.md create mode 100644 RELEASELOG.md diff --git a/.github/workflows/github_build_dev_windows.yml b/.github/workflows/github_build_dev_windows.yml new file mode 100644 index 0000000..db666a4 --- /dev/null +++ b/.github/workflows/github_build_dev_windows.yml @@ -0,0 +1,141 @@ +name: Build Dev Windows +on: + push: + branches: + - canary + pull_request: + branches: + - canary + +env: + go-version: '^1.16.4' + go-stable: 'true' + artifact-retention-days: 5 + +jobs: + build-and-upload: + name: Build & Upload Dev Windows + runs-on: windows-latest + if: ${{ !contains(github.event.head_commit.message, '[Skip CI]') }} + steps: + # 拉取项目代码 + - name: Checkout 🔀 + uses: actions/checkout@v2 + with: + persist-credentials: false + fetch-depth: 0 + + # 获取Git信息 + - name: Get Git Info 💡 + shell: pwsh + run: | + $VERSION_REGEXP='^v?\d+\.\d+\.\d+(\.\d+)?-pre$' + echo "VERSION_REGEXP=$VERSION_REGEXP" >> $env:GITHUB_ENV + $GIT_BRANCH=$env:GITHUB_REF -replace 'refs/heads/', '' + echo "GIT_BRANCH=$GIT_BRANCH" >> $env:GITHUB_ENV + echo "Current Branch: $GIT_BRANCH" + + $SHORT_SHA=${env:GITHUB_SHA}.Substring(0,7) + echo "SHORT_SHA=$SHORT_SHA" >> $env:GITHUB_ENV + echo "Current commit hash id: ${env:GITHUB_SHA} ($SHORT_SHA)" + + $GIT_TAG_VERSION=git tag -l | where { $_ -match $VERSION_REGEXP } | sort -descending -top 1 + $GIT_TAG_PRE_VERSION=git tag -l | where { $_ -match $VERSION_REGEXP } | sort -descending -top 1 + if ($GIT_TAG_PRE_VERSION -eq $GIT_TAG_VERSION + '-pre') { $GIT_TAG_LATEST=$GIT_TAG_VERSION } + else { $GIT_TAG_LATEST=@($GIT_TAG_VERSION, $GIT_TAG_PRE_VERSION) | sort -descending -top 1 } + echo "GIT_TAG_LATEST=$GIT_TAG_LATEST" >> $env:GITHUB_ENV + echo "Latest Tag: $GIT_TAG_LATEST" + + # 配置构建信息 + - name: Configurate Build Information 🖨 + if: success() + shell: pwsh + run: | + $BUILD_PATH="$pwd\build" + echo "BUILD_PATH=$BUILD_PATH" >> $env:GITHUB_ENV + $BUILD_VERSION=cat .\versioninfo.json | jq -r '.StringFileInfo.ProductVersion' + echo "BUILD_VERSION=$BUILD_VERSION" >> $env:GITHUB_ENV + echo "Build Version: $BUILD_VERSION" + $GIT_TAG="$BUILD_VERSION$(${env:GIT_BRANCH} -ne 'release' ? '-pre' : '')" + echo "GIT_TAG=$GIT_TAG" >> $env:GITHUB_ENV + echo "Current Tag: $GIT_TAG" + + # # 构建前检查 + # - name: Check on Failures ❌ + # if: success() + # shell: pwsh + # run: | + + # 配置Golang环境 + - name: Setup Go Environment 📍 + uses: actions/setup-go@v2 + if: success() + with: + go-version: ${{ env.go-version }} + stable: ${{ env.go-stable }} + + # 获取依赖包 + - name: Get Go Modules 📟 + if: success() + shell: pwsh + run: | + go version + go env + mkdir -p .\build + + # 运行Golang测试 + # - name: Golang Test ✅ + # run: | + + # 构建64位应用 + - name: Build x64 Application 🛠 + if: success() + shell: pwsh + run: | + $env:GOOS="windows" + $env:GOARCH="amd64" + go build -ldflags "-H=windowsgui -s -w" -o .\build\Clash.Mini_dev_x64.exe + + # 构建32位应用 + - name: Build x86 Application 🛠 + if: success() + shell: pwsh + run: | + $env:GOOS="windows" + $env:GOARCH="386" + go build -a -v -x -ldflags "-H=windowsgui -s -w" -o .\build\Clash.Mini_dev_x86.exe + + # 准备上传Artifact文件 + - name: Prepare to Upload 🕹 + if: success() + shell: pwsh + run: | + cd $env:BUILD_PATH + mkdir -p .\publish + $BUILD_X64_FILENAME="Clash.Mini_${env:GIT_BRANCH}_${env:BUILD_VERSION}_${env:SHORT_SHA}_x64.exe" + $BUILD_X86_FILENAME="Clash.Mini_${env:GIT_BRANCH}_${env:BUILD_VERSION}_${env:SHORT_SHA}_x86.exe" + echo "BUILD_X64_FILENAME=$BUILD_X64_FILENAME" >> $env:GITHUB_ENV + echo "BUILD_X86_FILENAME=$BUILD_X86_FILENAME" >> $env:GITHUB_ENV + cp .\Clash.Mini_dev_*.exe .\publish\ + echo "Ready to upload the following file(s):" + ls .\publish + + # 上传64位应用到Actions Artifacts + - name: Upload x64 Application to Artifacts 📤 + if: success() + uses: actions/upload-artifact@v2 + with: + name: ${{ env.BUILD_X64_FILENAME }} + path: ${{ env.BUILD_PATH }}\publish\*_x64.exe + if-no-files-found: error + retention-days: ${{ env.artifact-retention-days }} + + # 上传32位应用到Actions Artifacts + - name: Upload x86 Application to Artifacts 📤 + if: success() + uses: actions/upload-artifact@v2 + with: + name: ${{ env.BUILD_X86_FILENAME }} + path: ${{ env.BUILD_PATH }}\publish\*_x86.exe + if-no-files-found: error + retention-days: ${{ env.artifact-retention-days }} diff --git a/.github/workflows/github_build_release_windows.yml b/.github/workflows/github_build_release_windows.yml new file mode 100644 index 0000000..f94b7d7 --- /dev/null +++ b/.github/workflows/github_build_release_windows.yml @@ -0,0 +1,196 @@ +name: Build Release Windows +on: + push: + branches: + - release + - pre-release + pull_request: + branches: + - release + - pre-release +# tags: +# - 'v*.*.*' + +env: + go-version: '^1.16.4' + go-stable: 'true' + artifact-retention-days: 5 + +jobs: + build-and-publish: + name: Build & Publish (Pre)Release Windows + runs-on: windows-latest + if: ${{ !contains(github.event.head_commit.message, '[Skip CI]') }} + steps: + # 拉取项目代码 + - name: Checkout 🔀 + uses: actions/checkout@v2 + with: + persist-credentials: false + fetch-depth: 0 + + # 获取Git信息 + - name: Get Git Info 💡 + shell: pwsh + run: | + $VERSION_REGEXP='^v?\d+\.\d+\.\d+(\.\d+)?-pre$' + echo "VERSION_REGEXP=$VERSION_REGEXP" >> $env:GITHUB_ENV + $GIT_BRANCH=$env:GITHUB_REF -replace 'refs/heads/', '' + echo "GIT_BRANCH=$GIT_BRANCH" >> $env:GITHUB_ENV + echo "Current Branch: $GIT_BRANCH" + + $SHORT_SHA=${env:GITHUB_SHA}.Substring(0,7) + echo "SHORT_SHA=$SHORT_SHA" >> $env:GITHUB_ENV + echo "Current commit hash id: ${env:GITHUB_SHA} ($SHORT_SHA)" + + $GIT_TAG_VERSION=git tag -l | where { $_ -match $VERSION_REGEXP } | sort -descending -top 1 + $GIT_TAG_PRE_VERSION=git tag -l | where { $_ -match $VERSION_REGEXP } | sort -descending -top 1 + if ($GIT_TAG_PRE_VERSION -eq $GIT_TAG_VERSION + '-pre') { $GIT_TAG_LATEST=$GIT_TAG_VERSION } + else { $GIT_TAG_LATEST=@($GIT_TAG_VERSION, $GIT_TAG_PRE_VERSION) | sort -descending -top 1 } + echo "GIT_TAG_LATEST=$GIT_TAG_LATEST" >> $env:GITHUB_ENV + echo "Latest Tag: $GIT_TAG_LATEST" + + # 配置构建信息 + - name: Configurate Build Information 🖨 + if: success() + shell: pwsh + run: | + $BUILD_PATH="$pwd\build" + echo "BUILD_PATH=$BUILD_PATH" >> $env:GITHUB_ENV + $BUILD_VERSION=cat .\versioninfo.json | jq -r '.StringFileInfo.ProductVersion' + echo "BUILD_VERSION=$BUILD_VERSION" >> $env:GITHUB_ENV + echo "Build Version: $BUILD_VERSION" + $GIT_TAG="$BUILD_VERSION$(${env:GIT_BRANCH} -ne 'release' ? '-pre' : '')" + echo "GIT_TAG=$GIT_TAG" >> $env:GITHUB_ENV + echo "Current Tag: $GIT_TAG" + + # # 构建前检查 + # - name: Check on Failures ❌ + # if: success() + # shell: pwsh + # run: | + + # 配置Golang环境 + - name: Setup Go Environment 📍 + uses: actions/setup-go@v2 + if: success() + with: + go-version: ${{ env.go-version }} + stable: ${{ env.go-stable }} + + # 获取依赖包 + - name: Get Go Modules 📟 + if: success() + shell: pwsh + run: | + go version + go env + mkdir -p .\build + + # 运行Golang测试 + # - name: Golang Test ✅ + # run: | + + # 构建64位应用 + - name: Build x64 Application 🛠 + if: success() + shell: pwsh + run: | + $env:GOOS="windows" + $env:GOARCH="amd64" + go build -ldflags "-H=windowsgui -s -w" -o .\build\Clash.Mini_x64.exe + + # 构建32位应用 + - name: Build x86 Application 🛠 + if: success() + shell: pwsh + run: | + $env:GOOS="windows" + $env:GOARCH="386" + go build -a -v -x -ldflags "-H=windowsgui -s -w" -o .\build\Clash.Mini_x86.exe + + # 准备发布PreRelease文件 + - id: prepare-pre-release + name: Prepare to Publish PreRelease 🕹 + if: ${{ env.GIT_BRANCH != 'release' && success() }} + shell: pwsh + run: | + cd $env:BUILD_PATH + mkdir -p .\publish + $BUILD_X64_FILENAME="Clash.Mini_${env:GIT_BRANCH}_${env:BUILD_VERSION}_x64.exe" + $BUILD_X86_FILENAME="Clash.Mini_${env:GIT_BRANCH}_${env:BUILD_VERSION}_x86.exe" + echo "BUILD_X64_FILENAME=$BUILD_X64_FILENAME" >> $env:GITHUB_ENV + echo "BUILD_X86_FILENAME=$BUILD_X86_FILENAME" >> $env:GITHUB_ENV + cp .\Clash.Mini_*.exe .\publish\ + echo "Ready to upload the following file(s):" + ls .\publish + + # 上传64位应用到Actions Artifacts + - name: Upload x64 Application to Artifacts 📤 + if: ${{ steps.prepare-pre-release.outcome == 'success' }} + uses: actions/upload-artifact@v2 + with: + name: ${{ env.BUILD_X64_FILENAME }} + path: ${{ env.BUILD_PATH }}\publish\*_x64.exe + if-no-files-found: error + retention-days: ${{ env.artifact-retention-days }} + + # 上传32位应用到Actions Artifacts + - name: Upload x86 Application to Artifacts 📤 + if: ${{ steps.prepare-pre-release.outcome == 'success' && success() }} + uses: actions/upload-artifact@v2 + with: + name: ${{ env.BUILD_X86_FILENAME }} + path: ${{ env.BUILD_PATH }}\publish\*_x86.exe + if-no-files-found: error + retention-days: ${{ env.artifact-retention-days }} + + # 准备发布Release文件 + - name: Prepare to Publish Release 🕹 + if: ${{ env.GIT_BRANCH == 'release' && success() }} + shell: pwsh + run: | + cd $env:BUILD_PATH + mkdir -p .\publish + cp .\Clash.Mini_*.exe .\publish\ + echo "Ready to upload the following file(s):" + ls .\publish + + # 准备压缩 + - name: Prepare to Compression 🕹 + if: success() + shell: pwsh + run: | + cd $env:BUILD_PATH + mkdir -p ($PUBLISH_PATH_X64="${env:BUILD_PATH}\publish\x64") + mkdir -p ($PUBLISH_PATH_X86="${env:BUILD_PATH}\publish\x86") + echo "PUBLISH_PATH_X64=$PUBLISH_PATH_X64" >> $env:GITHUB_ENV + echo "PUBLISH_PATH_X86=$PUBLISH_PATH_X86" >> $env:GITHUB_ENV + mkdir -p .\Profile + $packageFiles=@(".\Profile", "..\config.yaml", "..\Country.mmdb") + mv .\publish\Clash.Mini*64.exe $PUBLISH_PATH_X64\Clash.Mini.exe + $filesX64=$packageFiles + foreach ($file in $filesX64) { cp $file $PUBLISH_PATH_X64\ } + mv .\publish\Clash.Mini*86.exe $PUBLISH_PATH_X86\Clash.Mini.exe + $filesX86=$packageFiles + foreach ($file in $filesX86) { cp $file $PUBLISH_PATH_X86\ } + + # 压缩打包 + - name: Compression x64 📦 + if: success() + shell: pwsh + run: | + 7z a -t7z -mx=9 ${env:BUILD_PATH}\publish\Clash.Mini.${{ env.GIT_TAG }}.x64.7z ${env:PUBLISH_PATH_X64}\* + 7z a -t7z -mx=9 ${env:BUILD_PATH}\publish\Clash.Mini.${{ env.GIT_TAG }}.x86.7z ${env:PUBLISH_PATH_X86}\* + + # 发布到Releases + - name: Publish to Releases 💸 + if: success() + uses: ncipollo/release-action@v1 + with: + prerelease: ${{ env.GIT_BRANCH != 'release' }} + tag: ${{ env.GIT_TAG }} + artifacts: ${{ env.BUILD_PATH }}\publish\Clash.Mini*.7z + # bodyFile: .\CHANGELOG.md + bodyFile: .\RELEASELOG.md + token: ${{ secrets.ACTION_ACCESS_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/RELEASELOG.md b/RELEASELOG.md new file mode 100644 index 0000000..c5bc068 --- /dev/null +++ b/RELEASELOG.md @@ -0,0 +1,11 @@ +## Release Log + +### **v0.1.2-pre** + +Release on *2021-05-29 20:30* + +**Features** + +1. Part of the code has been refactored +2. Fixed an encoding problem of the generated schtasks file +3. GitHub Actions has been configured