# Builds ipswap.exe on every tag and attaches it, with its checksum, to the # Gitea release. # # There is no Wine step and no mingw step: ipswap is pure Go with no cgo, so a # Linux runner cross-compiles the Windows binary directly. That constraint is # why the tray is fyne.io/systray and the dialogs are raw user32 calls — keep # it that way and this file stays this short. # # The SHA256SUMS artifact is not decoration. The in-app updater refuses to # install a release that publishes no checksum, so a release built without this # step cannot be auto-updated to. name: release on: push: tags: - "v*" jobs: build: runs-on: ubuntu-latest steps: - name: Check out uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: "1.26" cache: true - name: Derive version from the tag id: version run: echo "version=${GITEA_REF_NAME#v}" >> "$GITHUB_OUTPUT" env: GITEA_REF_NAME: ${{ gitea.ref_name }} - name: Test run: go test ./... - name: Vet both targets run: | go vet ./... GOOS=windows GOARCH=amd64 go vet ./... - name: Build run: make dist VERSION=${{ steps.version.outputs.version }} - name: Publish the release uses: akkuman/gitea-release-action@v1 with: token: ${{ secrets.GITEA_TOKEN }} files: | dist/ipswap.exe dist/SHA256SUMS body: | ipswap v${{ steps.version.outputs.version }} SHA256 of `ipswap.exe` is published in the `SHA256SUMS` asset; the in-app updater verifies against it before installing.