diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a36fc3c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,80 @@ +name: Release + +on: + release: + types: [published] + +permissions: + contents: write + +jobs: + build: + strategy: + matrix: + include: + - goos: linux + goarch: amd64 + - goos: linux + goarch: arm64 + - goos: windows + goarch: amd64 + - goos: darwin + goarch: amd64 + - goos: darwin + goarch: arm64 + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version: "1.25" + + - uses: oven-sh/setup-bun@v2 + + - name: Build frontend + run: | + cd web/admin && bun install && bun run build + cd ../tenant && bun install && bun run build + + - name: Set variables + id: vars + run: | + VERSION=${GITHUB_REF_NAME} + BINARY=team-api + if [ "${{ matrix.goos }}" = "windows" ]; then + BINARY=team-api.exe + fi + echo "version=${VERSION}" >> $GITHUB_OUTPUT + echo "binary=${BINARY}" >> $GITHUB_OUTPUT + echo "artifact=team-api-${VERSION}-${{ matrix.goos }}-${{ matrix.goarch }}" >> $GITHUB_OUTPUT + + - name: Build + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + CGO_ENABLED: 0 + run: | + go build -tags embedweb -ldflags "-X github.com/qianfree/team-api/internal/consts.Version=${{ steps.vars.outputs.version }}" -o ${{ steps.vars.outputs.binary }} main.go + + - name: Package + run: | + ARTIFACT=${{ steps.vars.outputs.artifact }} + mkdir -p $ARTIFACT + cp ${{ steps.vars.outputs.binary }} $ARTIFACT/ + cp README.md $ARTIFACT/ 2>/dev/null || true + cp LICENSE $ARTIFACT/ 2>/dev/null || true + + if [ "${{ matrix.goos }}" = "windows" ]; then + zip -r ${ARTIFACT}.zip $ARTIFACT + else + tar -czf ${ARTIFACT}.tar.gz $ARTIFACT + fi + + - name: Upload release asset + uses: softprops/action-gh-release@v2 + with: + files: | + team-api-*.zip + team-api-*.tar.gz