123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- 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 -X 'github.com/0xJacky/Nginx-UI/server/settings.buildTime=$(date +%s)'" -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
|