v0.7.2 - CGO Systray Support for Linux #11
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| release: | |
| types: [created] | |
| workflow_dispatch: | |
| inputs: | |
| tag: | |
| description: 'Release tag (e.g., v0.1.0)' | |
| required: true | |
| permissions: | |
| contents: write | |
| jobs: | |
| build-and-release: | |
| name: Build and Release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: '1.23' | |
| cache: true | |
| - name: Get version | |
| id: version | |
| run: | | |
| if [ -n "${{ github.event.inputs.tag }}" ]; then | |
| VERSION="${{ github.event.inputs.tag }}" | |
| else | |
| VERSION="${{ github.ref_name }}" | |
| fi | |
| # Remove v prefix if present | |
| VERSION="${VERSION#v}" | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "Building version: $VERSION" | |
| - name: Install CGO dependencies for Linux systray | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| gcc \ | |
| pkg-config \ | |
| libgtk-3-dev \ | |
| libayatana-appindicator3-dev \ | |
| libgl1-mesa-dev \ | |
| libx11-dev \ | |
| libxcursor-dev \ | |
| libxrandr-dev \ | |
| libxinerama-dev \ | |
| libxi-dev \ | |
| libxxf86vm-dev | |
| - name: Build binaries | |
| env: | |
| VERSION: ${{ steps.version.outputs.version }} | |
| run: | | |
| mkdir -p release | |
| LDFLAGS="-s -w -X main.version=${VERSION}" | |
| echo "Building linux-amd64 (with CGO for systray support)..." | |
| GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -ldflags "$LDFLAGS" -o release/kartoza-screencaster-linux-amd64 . | |
| echo "Building linux-arm64 (no systray - CGO cross-compile not supported)..." | |
| GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -ldflags "$LDFLAGS" -o release/kartoza-screencaster-linux-arm64 . | |
| echo "Building darwin-amd64 (no systray - CGO cross-compile not supported)..." | |
| GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build -ldflags "$LDFLAGS" -o release/kartoza-screencaster-darwin-amd64 . | |
| echo "Building darwin-arm64 (no systray - CGO cross-compile not supported)..." | |
| GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -ldflags "$LDFLAGS" -o release/kartoza-screencaster-darwin-arm64 . | |
| echo "Building windows-amd64 (no systray - CGO cross-compile not supported)..." | |
| GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -ldflags "$LDFLAGS" -o release/kartoza-screencaster-windows-amd64.exe . | |
| - name: Create tarballs | |
| run: | | |
| cd release | |
| tar -czf kartoza-screencaster-linux-amd64.tar.gz kartoza-screencaster-linux-amd64 | |
| tar -czf kartoza-screencaster-linux-arm64.tar.gz kartoza-screencaster-linux-arm64 | |
| tar -czf kartoza-screencaster-darwin-amd64.tar.gz kartoza-screencaster-darwin-amd64 | |
| tar -czf kartoza-screencaster-darwin-arm64.tar.gz kartoza-screencaster-darwin-arm64 | |
| tar -czf kartoza-screencaster-windows-amd64.tar.gz kartoza-screencaster-windows-amd64.exe | |
| # Generate checksums | |
| sha256sum *.tar.gz > checksums.txt | |
| # Clean up raw binaries (not the tarballs!) | |
| rm -f kartoza-screencaster-linux-amd64 kartoza-screencaster-linux-arm64 | |
| rm -f kartoza-screencaster-darwin-amd64 kartoza-screencaster-darwin-arm64 | |
| rm -f kartoza-screencaster-windows-amd64.exe | |
| - name: Upload release assets | |
| if: github.event_name == 'release' | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: | | |
| release/*.tar.gz | |
| release/checksums.txt | |
| - name: Upload artifacts (manual trigger) | |
| if: github.event_name == 'workflow_dispatch' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: release-${{ steps.version.outputs.version }} | |
| path: release/ | |
| build-deb: | |
| name: Build Debian Package | |
| runs-on: ubuntu-latest | |
| needs: build-and-release | |
| if: github.event_name == 'release' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: '1.23' | |
| cache: true | |
| - name: Get version | |
| id: version | |
| run: | | |
| VERSION="${{ github.ref_name }}" | |
| VERSION="${VERSION#v}" | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Build Debian package | |
| run: | | |
| # Install build dependencies (including CGO deps for systray) | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| dpkg-dev \ | |
| gcc \ | |
| pkg-config \ | |
| libgtk-3-dev \ | |
| libayatana-appindicator3-dev \ | |
| libgl1-mesa-dev \ | |
| libx11-dev \ | |
| libxcursor-dev \ | |
| libxrandr-dev \ | |
| libxinerama-dev \ | |
| libxi-dev \ | |
| libxxf86vm-dev | |
| # Build binary with CGO for systray support | |
| CGO_ENABLED=1 go build -ldflags "-s -w -X main.version=${{ steps.version.outputs.version }}" -o kartoza-screencaster . | |
| # Create package structure | |
| mkdir -p dpkg/DEBIAN | |
| mkdir -p dpkg/usr/bin | |
| mkdir -p dpkg/usr/share/applications | |
| mkdir -p dpkg/usr/share/doc/kartoza-screencaster | |
| cp kartoza-screencaster dpkg/usr/bin/ | |
| # Create control file with dependencies | |
| cat > dpkg/DEBIAN/control << EOF | |
| Package: kartoza-screencaster | |
| Version: ${{ steps.version.outputs.version }} | |
| Section: video | |
| Priority: optional | |
| Architecture: amd64 | |
| Depends: ffmpeg, pipewire | pulseaudio, libgtk-3-0, libayatana-appindicator3-1 | |
| Recommends: wl-clipboard, libnotify-bin | |
| Suggests: v4l-utils | |
| Maintainer: Tim Sutton <tim@kartoza.com> | |
| Homepage: https://github.com/kartoza/kartoza-screencaster | |
| Description: Screen recording tool for Wayland/X11 | |
| A TUI-based screen recording tool with support for: | |
| - Screen recording (Wayland via wl-screenrec, X11 via ffmpeg) | |
| - Audio recording via PipeWire | |
| - Webcam recording | |
| - Audio normalization | |
| - Vertical video creation for social media | |
| - Logo overlays and title text | |
| EOF | |
| # Create desktop file | |
| cat > dpkg/usr/share/applications/kartoza-screencaster.desktop << 'EOF' | |
| [Desktop Entry] | |
| Name=Kartoza Video Processor | |
| Comment=Screen recording tool for Wayland/X11 | |
| Exec=kartoza-screencaster | |
| Icon=video-x-generic | |
| Terminal=true | |
| Type=Application | |
| Categories=AudioVideo;Video;Recorder; | |
| Keywords=screen;record;video;wayland;x11; | |
| EOF | |
| # Create copyright file | |
| cat > dpkg/usr/share/doc/kartoza-screencaster/copyright << 'EOF' | |
| Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ | |
| Upstream-Name: kartoza-screencaster | |
| Upstream-Contact: Tim Sutton <tim@kartoza.com> | |
| Source: https://github.com/kartoza/kartoza-screencaster | |
| Files: * | |
| Copyright: 2024 Kartoza (Pty) Ltd | |
| License: MIT | |
| EOF | |
| # Build package | |
| dpkg-deb --build dpkg kartoza-screencaster_${{ steps.version.outputs.version }}_amd64.deb | |
| - name: Upload Debian package | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: '*.deb' | |
| build-rpm: | |
| name: Build RPM Package | |
| runs-on: ubuntu-latest | |
| needs: build-and-release | |
| if: github.event_name == 'release' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: '1.23' | |
| cache: true | |
| - name: Get version | |
| id: version | |
| run: | | |
| VERSION="${{ github.ref_name }}" | |
| VERSION="${VERSION#v}" | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Build RPM package | |
| run: | | |
| # Install build dependencies (including CGO deps for systray) | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| rpm \ | |
| gcc \ | |
| pkg-config \ | |
| libgtk-3-dev \ | |
| libayatana-appindicator3-dev \ | |
| libgl1-mesa-dev \ | |
| libx11-dev \ | |
| libxcursor-dev \ | |
| libxrandr-dev \ | |
| libxinerama-dev \ | |
| libxi-dev \ | |
| libxxf86vm-dev | |
| # Build binary with CGO for systray support | |
| CGO_ENABLED=1 go build -ldflags "-s -w -X main.version=${{ steps.version.outputs.version }}" -o kartoza-screencaster . | |
| # Create RPM build structure | |
| mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} | |
| # Get the date for changelog | |
| CHANGELOG_DATE=$(date '+%a %b %d %Y') | |
| # Create spec file with install section that copies files | |
| cat > rpmbuild/SPECS/kartoza-screencaster.spec << EOF | |
| Name: kartoza-screencaster | |
| Version: ${{ steps.version.outputs.version }} | |
| Release: 1%{?dist} | |
| Summary: Screen recording tool for Wayland/X11 | |
| License: MIT | |
| URL: https://github.com/kartoza/kartoza-screencaster | |
| Requires: ffmpeg | |
| Requires: pipewire | |
| Requires: gtk3 | |
| Requires: libayatana-appindicator-gtk3 | |
| Recommends: wl-clipboard | |
| Recommends: libnotify | |
| %description | |
| A TUI-based screen recording tool with support for: | |
| - Screen recording (Wayland via wl-screenrec, X11 via ffmpeg) | |
| - Audio recording via PipeWire | |
| - Webcam recording | |
| - Audio normalization | |
| - Vertical video creation for social media | |
| - Logo overlays and title text | |
| %install | |
| mkdir -p %{buildroot}/usr/bin | |
| mkdir -p %{buildroot}/usr/share/applications | |
| cp $(pwd)/kartoza-screencaster %{buildroot}/usr/bin/ | |
| cat > %{buildroot}/usr/share/applications/kartoza-screencaster.desktop << 'DESKTOP' | |
| [Desktop Entry] | |
| Name=Kartoza Video Processor | |
| Comment=Screen recording tool for Wayland/X11 | |
| Exec=kartoza-screencaster | |
| Icon=video-x-generic | |
| Terminal=true | |
| Type=Application | |
| Categories=AudioVideo;Video;Recorder; | |
| Keywords=screen;record;video;wayland;x11; | |
| DESKTOP | |
| %files | |
| %attr(755, root, root) /usr/bin/kartoza-screencaster | |
| /usr/share/applications/kartoza-screencaster.desktop | |
| %changelog | |
| * ${CHANGELOG_DATE} Tim Sutton <tim@kartoza.com> - ${{ steps.version.outputs.version }}-1 | |
| - Release ${{ steps.version.outputs.version }} | |
| EOF | |
| # Build RPM | |
| rpmbuild --define "_topdir $(pwd)/rpmbuild" \ | |
| --define "_rpmdir $(pwd)" \ | |
| -bb rpmbuild/SPECS/kartoza-screencaster.spec | |
| # Move RPM to current directory | |
| mv x86_64/*.rpm . | |
| - name: Upload RPM package | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: '*.rpm' |