mirror of https://github.com/synctv-org/synctv
Feat: build wordflow and auto dev
parent
328f5e957c
commit
0745cecee0
@ -0,0 +1,39 @@
|
|||||||
|
name: build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
platform: [ubuntu-latest]
|
||||||
|
go-version: [ '1.21' ]
|
||||||
|
name: Build
|
||||||
|
runs-on: ${{ matrix.platform }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Get version
|
||||||
|
id: get_version
|
||||||
|
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\/v/}
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
bash build.sh -v "v${{ steps.get_version.outputs.VERSION }}" -P -p "windows/amd64,linux/amd64,linux/arm64,darwin/amd64,darwin/arm64"
|
||||||
|
|
||||||
|
- uses: "marvinpinto/action-automatic-releases@latest"
|
||||||
|
with:
|
||||||
|
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
automatic_release_tag: "v${{ steps.get_version.outputs.VERSION }}"
|
||||||
|
title: "Version ${{ steps.get_version.outputs.VERSION }}"
|
||||||
|
prerelease: false
|
||||||
|
files: |
|
||||||
|
build/*
|
||||||
@ -0,0 +1,179 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function ChToScriptFileDir() {
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "cd to script file dir error"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function Help() {
|
||||||
|
echo "-h get help"
|
||||||
|
echo "-v set build version (default: dev)"
|
||||||
|
echo "-w set web version (default: latest releases)"
|
||||||
|
echo "-m set build mode (default: pie)"
|
||||||
|
echo "-l set ldflags (default: -s -w --extldflags \"-static -fpic -Wl,-z,relro,-z,now\")"
|
||||||
|
echo "-p set platform (default: linux/amd64,darwin/arm64)"
|
||||||
|
echo "-P set trim path (default: disable)"
|
||||||
|
echo "-b set build result dir (default: build)"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Init() {
|
||||||
|
VERSION="dev"
|
||||||
|
WEB_VERSION=""
|
||||||
|
commit="$(git log --pretty=format:"%h" -1)"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "git log error"
|
||||||
|
GIT_COMMIT="unknown"
|
||||||
|
else
|
||||||
|
GIT_COMMIT="$commit"
|
||||||
|
fi
|
||||||
|
BUILD_MODE="pie"
|
||||||
|
LDFLAGS='-s -w --extldflags "-static -fpic -Wl,-z,relro,-z,now"'
|
||||||
|
PLATFORM="linux/amd64,darwin/arm64"
|
||||||
|
TRIM_PATH=""
|
||||||
|
BUILD_DIR="build"
|
||||||
|
}
|
||||||
|
|
||||||
|
function ParseArgs() {
|
||||||
|
while getopts "hv:w:m:l:p:Pb:" arg; do
|
||||||
|
case $arg in
|
||||||
|
h)
|
||||||
|
Help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
v)
|
||||||
|
VERSION="$OPTARG"
|
||||||
|
;;
|
||||||
|
w)
|
||||||
|
WEB_VERSION="$OPTARG"
|
||||||
|
;;
|
||||||
|
m)
|
||||||
|
BUILD_MODE="$OPTARG"
|
||||||
|
;;
|
||||||
|
l)
|
||||||
|
LDFLAGS="$OPTARG"
|
||||||
|
;;
|
||||||
|
p)
|
||||||
|
PLATFORM="$OPTARG"
|
||||||
|
;;
|
||||||
|
P)
|
||||||
|
TRIM_PATH="true"
|
||||||
|
;;
|
||||||
|
b)
|
||||||
|
BUILD_DIR="$OPTARG"
|
||||||
|
;;
|
||||||
|
?)
|
||||||
|
echo "unkonw argument"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function GetLatestWebVersion() {
|
||||||
|
while true; do
|
||||||
|
LATEST=$(curl -sL https://api.github.com/repos/$1/releases/latest)
|
||||||
|
if [ $? -ne 0 ]; then exit $?; fi
|
||||||
|
if [ "$(echo "$LATEST" | grep -o "API rate limit exceeded")" ]; then
|
||||||
|
echo "API rate limit exceeded"
|
||||||
|
echo "sleep 5s"
|
||||||
|
sleep 5
|
||||||
|
elif [ "$(echo "$LATEST" | grep -o "Not Found")" ]; then
|
||||||
|
echo "Not Found"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
WEB_VERSION=$(echo "$LATEST" | grep -o '"tag_name": "[^"]*' | grep -o '[^"]*$')
|
||||||
|
}
|
||||||
|
|
||||||
|
# Comply with golang version rules
|
||||||
|
function CheckVersionFormat() {
|
||||||
|
if [ "$1" == "dev" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [ "$(echo "$1" | grep -oE "^v?[0-9]+\.[0-9]+\.[0-9]+$")" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function FixArgs() {
|
||||||
|
CheckAllPlatform
|
||||||
|
CheckVersionFormat "$VERSION"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "version format error"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ ! "$WEB_VERSION" ]; then
|
||||||
|
GetLatestWebVersion "synctv-org/synctv-web"
|
||||||
|
fi
|
||||||
|
LDFLAGS="$LDFLAGS \
|
||||||
|
-X 'github.com/synctv-org/synctv/internal/conf.Version=$VERSION' \
|
||||||
|
-X 'github.com/synctv-org/synctv/internal/conf.WebVersion=$WEB_VERSION' \
|
||||||
|
-X 'github.com/synctv-org/synctv/internal/conf.GitCommit=$GIT_COMMIT'"
|
||||||
|
|
||||||
|
BUILD_DIR="$(echo "$BUILD_DIR" | sed 's#/$##')"
|
||||||
|
}
|
||||||
|
|
||||||
|
function InitDep() {
|
||||||
|
rm -rf public/dist/*
|
||||||
|
echo "download: https://github.com/synctv-org/synctv-web/releases/download/${WEB_VERSION}/dist.tar.gz"
|
||||||
|
curl -sL "https://github.com/synctv-org/synctv-web/releases/download/${WEB_VERSION}/dist.tar.gz" | tar --strip-components 1 -C "public/dist" -z -x -v -f -
|
||||||
|
}
|
||||||
|
|
||||||
|
ALLOWD_PLATFORM="linux/amd64,linux/arm64,darwin/amd64,darwin/arm64,windows/amd64,windows/arm64"
|
||||||
|
|
||||||
|
function CheckPlatform() {
|
||||||
|
platform="$1"
|
||||||
|
for p in $(echo "$ALLOWD_PLATFORM" | tr "," "\n"); do
|
||||||
|
if [ "$p" == "$platform" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function CheckAllPlatform() {
|
||||||
|
for platform in $(echo "$PLATFORM" | tr "," "\n"); do
|
||||||
|
CheckPlatform "$platform"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "platform $platform not allowd"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function Build() {
|
||||||
|
platform="$1"
|
||||||
|
echo "build $platform"
|
||||||
|
GOOS=${platform%/*}
|
||||||
|
GOARCH=${platform#*/}
|
||||||
|
if [ "$GOOS" == "windows" ]; then
|
||||||
|
EXT=".exe"
|
||||||
|
else
|
||||||
|
EXT=""
|
||||||
|
fi
|
||||||
|
if [ "$TRIM_PATH" ]; then
|
||||||
|
GOOS=$GOOS GOARCH=$GOARCH go build -trimpath -ldflags "$LDFLAGS" -o "$BUILD_DIR/$(basename $PWD)-$GOOS-$GOARCH$EXT" .
|
||||||
|
else
|
||||||
|
GOOS=$GOOS GOARCH=$GOARCH go build -ldflags "$LDFLAGS" -o "$BUILD_DIR/$(basename $PWD)-$GOOS-$GOARCH$EXT" .
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function BuildAll() {
|
||||||
|
for platform in $(echo "$PLATFORM" | tr "," "\n"); do
|
||||||
|
Build "$platform"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
ChToScriptFileDir
|
||||||
|
Init
|
||||||
|
ParseArgs "$@"
|
||||||
|
FixArgs
|
||||||
|
InitDep
|
||||||
|
BuildAll
|
||||||
Loading…
Reference in New Issue