Files
nginx-ui/.github/workflows/build.yml
2022-03-04 00:45:40 +08:00

173 lines
5.8 KiB
YAML

name: Build
on:
push:
branches: [ master ]
paths:
- "**/*.js"
- "**/*.vue"
- "frontend/package.json"
- "frontend/.env*"
- "**/*.go"
- "go.mod"
- "go.sum"
- ".github/workflows/*.yml"
pull_request:
types: [ opened, synchronize, reopened ]
paths:
- "**/*.js"
- "**/*.vue"
- "frontend/package.json"
- "frontend/.env*"
- "**/*.go"
- "go.mod"
- "go.sum"
- ".github/workflows/*.yml"
release:
types:
- published
jobs:
build_frontend:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up nodejs
uses: actions/setup-node@v2
with:
node-version: '16.x'
cache: 'yarn'
cache-dependency-path: 'frontend/yarn.lock'
- name: Install dependencies
run: yarn install
working-directory: frontend
- name: Update tranlations
run: make translations
working-directory: frontend
- name: Build
run: |
npx browserslist@latest --update-db
yarn build
working-directory: frontend
- name: Archive frontend artifacts
uses: actions/upload-artifact@v2
with:
name: frontend-dist
path: frontend/dist
- name: Prepare publish
if: github.event_name == 'release'
run: |
cp README*.md frontend/dist
find frontend/dist -printf '%P\n' | tar -C frontend/dist --no-recursion -zcvf frontend-dist.tar.gz -T -
- name: Publish
uses: softprops/action-gh-release@v1
if: github.event_name == 'release'
with:
files: frontend-dist.tar.gz
build:
runs-on: ubuntu-latest
needs: build_frontend
strategy:
matrix:
goos: [linux, darwin]
goarch: [amd64, 386, arm64]
exclude:
# Exclude i386 on darwin.
- goarch: 386
goos: darwin
env:
CGO_ENABLED: 1
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
DIST: nginx-ui-${{ matrix.GOOS }}-${{ matrix.GOARCH }}
outputs:
dist: ${{ env.DIST }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: ^1.17.7
- name: Set up cache
uses: actions/cache@v2
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-${{ env.GOOS }}-${{ env.GOARCH }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-${{ env.GOOS }}-${{ env.GOARCH }}-go-
- name: Setup compiler environment
id: info
run: |
export _ARCH=$(jq ".[\"$GOARCH\"].$GOOS" -r < .github/build/compiler_arch.json)
echo "::set-output name=ARCH_NAME::$_ARCH"
- name: Install musl cross compiler
if: env.GOOS == 'linux'
uses: Lesmiscore/musl-cross-compilers@v0.5
id: musl
with:
target: ${{ steps.info.outputs.ARCH_NAME }}-linux-musl
- name: Post install musl cross compiler
if: env.GOOS == 'linux'
run: |
echo "PATH=${{ steps.musl.outputs.path }}:$PATH" >> $GITHUB_ENV
echo "CC=${{ steps.info.outputs.ARCH_NAME }}-linux-musl-gcc" >> $GITHUB_ENV
echo "CXX=${{ steps.info.outputs.ARCH_NAME }}-linux-musl-g++" >> $GITHUB_ENV
echo "LD_FLAGS=--extldflags '-static'" >> $GITHUB_ENV
- name: Install darwin cross compiler
if: env.GOOS == 'darwin'
run: |
curl -L https://github.com/Hintay/crossosx/releases/latest/download/crossosx.tar.zst -o crossosx.tar.zst
tar xvaf crossosx.tar.zst
echo "LD_LIBRARY_PATH=$(pwd)/crossosx/lib/" >> $GITHUB_ENV
echo "PATH=$(pwd)/crossosx/bin/:$PATH" >> $GITHUB_ENV
echo "CC=${{ steps.info.outputs.ARCH_NAME }}-clang" >> $GITHUB_ENV
echo "CXX=${{ steps.info.outputs.ARCH_NAME }}-clang++" >> $GITHUB_ENV
echo "LD_FLAGS=-s -w" >> $GITHUB_ENV
- name: Download frontend artifacts
uses: actions/download-artifact@v2
with:
name: frontend-dist
path: frontend/dist
- name: Build
run: |
mkdir -p dist
go build -ldflags "$LD_FLAGS" -o dist/nginx-ui -v main.go
- name: Archive backend artifacts
uses: actions/upload-artifact@v2
with:
name: ${{ env.DIST }}
path: dist/nginx-ui
- name: Prepare publish
if: github.event_name == 'release'
run: |
cp README*.md ./dist
find dist -printf '%P\n' | tar -C dist --no-recursion -zcvf ${{ env.DIST }}.tar.gz -T -
- name: Publish
uses: softprops/action-gh-release@v1
if: github.event_name == 'release'
with:
files: ${{ env.DIST }}.tar.gz