name: Build and Release on: push: tags: - 'v*' permissions: contents: write jobs: build: runs-on: ubuntu-latest strategy: matrix: goos: [windows, linux] goarch: [amd64, arm64] fail-fast: false steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.24.5' - name: Generate Windows resources if: matrix.goos == 'windows' run: | go install github.com/tc-hib/go-winres@latest go-winres simply \ --manifest cli \ --product-name whiskr \ --original-filename whiskr.exe \ --icon static/favicon.ico \ --copyright "(c) 2025 coalaura" \ --file-description "Minimal LLM chat UI using OpenRouter giving you control over your context." \ --file-version "${{ github.ref_name }}" \ --arch "${{ matrix.goarch }}" - name: Build ${{ matrix.goos }}_${{ matrix.goarch }} shell: bash run: | for f in static/css/*.css static/js/*.js static/lib/*.css static/lib/*.js; do [ -f "$f" ] || continue hash=$(sha1sum "$f" | cut -c1-8) filepath=${f#static/} sed -i "s|\([\"']$filepath\)[\"']|\1?v=$hash\"|g" static/index.html done mkdir -p build [[ "${{ matrix.goos }}" == "windows" ]] && EXT=".exe" || EXT="" GOOS=${{ matrix.goos }} \ GOARCH=${{ matrix.goarch }} \ CGO_ENABLED=0 \ go build \ -trimpath \ -buildvcs=false \ -ldflags "-s -w -X 'main.Version=${{ github.ref_name }}'" \ -o "build/whiskr${EXT}" . cp -r static build/static cp -r prompts build/prompts cp example.config.yml build/config.yml tar -czvf build/whiskr_${{ github.ref_name }}_${{ matrix.goos }}_${{ matrix.goarch }}.tar.gz -C build "whiskr${EXT}" static prompts config.yml rm -rf build/static build/prompts build/config.yml "build/whiskr${EXT}" - name: Upload artifact uses: actions/upload-artifact@v4 with: name: whiskr_${{ github.ref_name }}_${{ matrix.goos }}_${{ matrix.goarch }}.tar.gz path: build/* release: needs: build runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Download all build artifacts uses: actions/download-artifact@v4 with: path: ./build - name: Create GitHub release uses: softprops/action-gh-release@v2 with: files: ./build/** name: "Release ${{ github.ref_name }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}