Skip to content

Commit

Permalink
feat: add GitHub Actions configs
Browse files Browse the repository at this point in the history
  • Loading branch information
JyCyun committed May 29, 2021
1 parent a1e93b2 commit 0abd8fd
Show file tree
Hide file tree
Showing 4 changed files with 348 additions and 0 deletions.
141 changes: 141 additions & 0 deletions .github/workflows/github_build_dev_windows.yml
Original file line number Diff line number Diff line change
@@ -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 }}
196 changes: 196 additions & 0 deletions .github/workflows/github_build_release_windows.yml
Original file line number Diff line number Diff line change
@@ -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 }}
Empty file added CHANGELOG.md
Empty file.
11 changes: 11 additions & 0 deletions RELEASELOG.md
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 0abd8fd

Please sign in to comment.