Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
fb4e657
fix(certs): read the system CA bundle where Linux distributions keep it
sineld Oct 18, 2026
18df29e
feat(binaries): name linux-x64 and linux-arm64 in the manifest
sineld Oct 18, 2026
d06e02b
feat(daemon): check on Linux that .test lookups reach Flock's DNS server
sineld Oct 18, 2026
8d4291e
fix(ports): a low port without permission isn't a taken one on Linux
sineld Oct 18, 2026
ecd6f1c
refactor(cli): share the shims and shell profile code of macOS with L…
sineld Oct 18, 2026
df13d6c
feat(cli): flock install, uninstall and restart on Linux
sineld Oct 18, 2026
befd5e3
ci: run the Go tests on Linux and build the CLI for it
sineld Oct 19, 2026
c195af1
fix(ports): find a port's holder through /proc on Linux, without lsof
sineld Oct 19, 2026
838ed20
fix(cli): name the Linux CLI flock-php, util-linux owns flock(1)
sineld Oct 19, 2026
043d519
fix(dns): route the TLD through a link of Flock's own on Linux
sineld Oct 19, 2026
18d4050
fix(dns): keep NetworkManager off flock0, and report the link when it…
sineld Oct 19, 2026
9d631ee
fix(dns): check flock0 and NetworkManager even while lookups work, so…
sineld Oct 19, 2026
31d1957
feat(linux): release archives of the Linux CLI, and install.sh that i…
Nejcc Oct 19, 2026
957985f
feat(linux): AUR package flock-php-bin
Nejcc Oct 19, 2026
89d0784
fix(linux): ship the CLI as flock-php, as #12 now names it
Nejcc Oct 19, 2026
a8ee472
feat(linux): a tray app for Linux, with the panel, Mail and Logs
Nejcc Oct 19, 2026
627903e
fix(linux): the app runs flock-php, the CLI's name on Linux
Nejcc Oct 19, 2026
a33aa52
feat(linux): Settings in the Linux app, with the General and Sites panes
Nejcc Oct 19, 2026
913a6cd
feat(linux): the Linux app looks like flockphp.com
Nejcc Oct 19, 2026
7626a36
feat(linux): the rest of Settings in the Linux app
Nejcc Oct 19, 2026
ee66f0c
feat(linux): the Dumps window in the Linux app
Nejcc Oct 19, 2026
876f69a
feat(linux): a setup wizard, a .desktop entry and flock:// links in t…
Nejcc Oct 19, 2026
74a7f87
feat(linux): a release archive, CI build and AUR package for the Linu…
Nejcc Oct 19, 2026
3540b9b
feat(linux): Boost and PHP extensions in the Linux app's Sites pane
Nejcc Oct 19, 2026
a36d884
fix(cli): keep sudo for flock-php install without a desktop session
Nejcc Oct 19, 2026
a220bb3
fix(linux): start the tray watcher after the app, and guard the app's…
Nejcc Oct 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,9 @@ jobs:
- name: Release
run: |
go run ./tools/release notes > "$RUNNER_TEMP/notes.md"
for f in "dist/Flock-$VERSION-macOS.dmg" "dist/Flock-Setup-$VERSION-x64.exe"; do
for f in "dist/Flock-$VERSION-macOS.dmg" "dist/Flock-Setup-$VERSION-x64.exe" \
"dist/flock-$VERSION-linux-x64.tar.gz" "dist/flock-$VERSION-linux-arm64.tar.gz" \
"dist/flock-app-$VERSION-linux-x64.tar.gz"; do
[ -f "$f" ] || { echo "::error::$f missing"; exit 1; }
done
gh release create "v$VERSION" --repo "$GITHUB_REPOSITORY" --target "$SHA" --prerelease --latest=false \
Expand Down
63 changes: 60 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Runs the Go tests, and builds the macOS disk image (signed and notarized) and the Windows installer
# (signed with Artifact Signing) and keeps them as run artifacts. Signing takes the secrets and
# Runs the Go tests, and builds the macOS disk image (signed and notarized), the Windows installer
# (signed with Artifact Signing) and the Linux CLI archives, and keeps them as run artifacts. Signing takes the secrets and
# variables of the "release" environment, and is required in the merge queue and for releases.
#
# - on every pull request: the Go tests only; the builds are skipped (which counts as passed)
Expand Down Expand Up @@ -64,7 +64,7 @@ jobs:
fi
echo "version=$version" >> "$GITHUB_OUTPUT"

# The Go tests on both platforms Flock supports (the race detector needs cgo, so macOS only).
# The Go tests on the platforms Flock supports (the race detector needs cgo, so not on Windows).
go-test:
name: Go tests (${{ matrix.name }})
needs: version
Expand All @@ -74,6 +74,8 @@ jobs:
include:
- { name: macOS, os: macos-26, flags: -race }
- { name: Windows, os: windows-2025, flags: "" }
- { name: Linux, os: ubuntu-24.04, flags: -race }
- { name: Linux arm64, os: ubuntu-24.04-arm, flags: -race }
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
Expand Down Expand Up @@ -272,3 +274,58 @@ jobs:
name: flock-windows
path: windows/dist/Flock-Setup-*-x64.exe
if-no-files-found: error

linux:
name: Linux (x64, arm64)
needs: version
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
ref: ${{ inputs.ref || github.event.pull_request.head.sha }}

- uses: actions/setup-go@v7
with:
go-version-file: go.mod

- name: Build archives
run: make linux VERSION=${{ needs.version.outputs.version }}

- uses: actions/upload-artifact@v7
with:
name: flock-linux
path: |
dist/flock-*-linux-*.tar.gz
dist/flock-*-linux-*.tar.gz.sha256
if-no-files-found: error

linux-app:
name: Linux app (x64)
needs: version
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
ref: ${{ inputs.ref || github.event.pull_request.head.sha }}

- uses: actions/setup-go@v7
with:
go-version-file: linux/go.mod
cache-dependency-path: linux/go.sum

# cgo against GTK 3 and WebKitGTK 4.1 (Wails' gtk3 build tag).
- name: Install GTK and WebKitGTK
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends libgtk-3-dev libwebkit2gtk-4.1-dev

- name: Build archive
run: make linux-app-archive VERSION=${{ needs.version.outputs.version }}

- uses: actions/upload-artifact@v7
with:
name: flock-linux-app
path: |
dist/flock-app-*-linux-x64.tar.gz
dist/flock-app-*-linux-x64.tar.gz.sha256
if-no-files-found: error
4 changes: 3 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,9 @@ jobs:
VERSION: ${{ needs.release-please.outputs.version }}
run: |
ls dist
for f in "dist/Flock-$VERSION-macOS.dmg" "dist/Flock-Setup-$VERSION-x64.exe"; do
for f in "dist/Flock-$VERSION-macOS.dmg" "dist/Flock-Setup-$VERSION-x64.exe" \
"dist/flock-$VERSION-linux-x64.tar.gz" "dist/flock-$VERSION-linux-arm64.tar.gz" \
"dist/flock-app-$VERSION-linux-x64.tar.gz"; do
[ -f "$f" ] || { echo "::error::$f missing"; exit 1; }
done
gh release upload "$TAG" dist/* --clobber --repo "$GITHUB_REPOSITORY"
Expand Down
34 changes: 33 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
LDFLAGS := -s -w -X flock/internal/cli.Version=$(VERSION)

.PHONY: build build-all test lint notices app dmg windows windows-test
.PHONY: build build-all test lint notices app dmg windows windows-test linux linux-app linux-app-archive

build:
go build -ldflags "$(LDFLAGS)" -o bin/flock ./cmd/flock

build-all:
GOOS=darwin GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o dist/flock-darwin-arm64 ./cmd/flock
GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o dist/flock-windows-amd64.exe ./cmd/flock
GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o dist/flock-linux-amd64 ./cmd/flock
GOOS=linux GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o dist/flock-linux-arm64 ./cmd/flock

test:
go test -race ./...
Expand All @@ -33,6 +35,36 @@ windows:
GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -X main.version=$(VERSION)" -o dist/windows-amd64/flock-helper.exe ./cmd/flock-helper
GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -H windowsgui" -o dist/windows-amd64/flockd.exe ./cmd/flockd

# The Linux CLI as release archives (install.sh and the AUR package download these):
# dist/flock-<version>-linux-{x64,arm64}.tar.gz with flock-php (util-linux owns flock), each with its .sha256.
linux:
for a in x64:amd64 arm64:arm64; do \
name=flock-$(VERSION)-linux-$${a%%:*}; \
rm -rf dist/$$name && mkdir -p dist/$$name && \
CGO_ENABLED=0 GOOS=linux GOARCH=$${a##*:} go build -trimpath -ldflags "$(LDFLAGS)" -o dist/$$name/flock-php ./cmd/flock && \
cp LICENSE NOTICE THIRD_PARTY_NOTICES dist/$$name/ && \
tar -C dist/$$name -czf dist/$$name.tar.gz flock-php LICENSE NOTICE THIRD_PARTY_NOTICES && \
rm -r dist/$$name && \
(cd dist && sha256sum $$name.tar.gz > $$name.tar.gz.sha256) || exit 1; \
done

# The Linux tray app, bin/flock-app (linux/, a module of its own). Needs cgo, GTK 3 and WebKitGTK:
# Arch webkit2gtk-4.1, Ubuntu libwebkit2gtk-4.1-dev, Fedora webkit2gtk4.1-devel.
linux-app:
cd linux && go build -tags gtk3 -trimpath -ldflags "-s -w" -o ../bin/flock-app ./app

# The Linux app as a release archive (the AUR package flock-php-app downloads it), x64 only: it needs
# cgo against GTK and WebKitGTK, so arm64 would need an arm64 runner.
# dist/flock-app-<version>-linux-x64.tar.gz with flock-app, its .desktop entry and icon, and its .sha256.
linux-app-archive: linux-app
name=flock-app-$(VERSION)-linux-x64; \
rm -rf dist/$$name && mkdir -p dist/$$name && \
cp bin/flock-app linux/flock-app.desktop LICENSE NOTICE THIRD_PARTY_NOTICES dist/$$name/ && \
cp linux/app/icons/AppIcon.png dist/$$name/flock-app.png && \
tar -C dist/$$name -czf dist/$$name.tar.gz flock-app flock-app.desktop flock-app.png LICENSE NOTICE THIRD_PARTY_NOTICES && \
rm -r dist/$$name && \
cd dist && sha256sum $$name.tar.gz > $$name.tar.gz.sha256

# The tray app's models and API client (windows/FlockKit) run on any OS; the app itself is built on Windows (windows/build.ps1).
windows-test:
dotnet test windows/FlockKit.Tests
Loading