Skip to content

Commit

Permalink
feat: basic linux version (#4)
Browse files Browse the repository at this point in the history
* feat: basic linux version

* fix: cleanup

* fix: err

* feat: deb

* fix: ci

* fix: maintainer
  • Loading branch information
skynet2 authored Jan 3, 2025
1 parent ea8ca7c commit 65d426e
Show file tree
Hide file tree
Showing 12 changed files with 182 additions and 51 deletions.
25 changes: 21 additions & 4 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ on:
push:
branches:
- master
- initial
- linux

jobs:
version:
Expand All @@ -11,16 +11,20 @@ jobs:
MAJOR_VERSION: 0
outputs:
versionSemVerOut: v${{ steps.semVer.outputs.semVersion }}
rawVerOut: ${{ steps.semVer.outputs.semVersion }}
steps:
- id: semVer
run: echo "semVersion=$MAJOR_VERSION.0.${{ github.run_number }}" >> "$GITHUB_OUTPUT"
- id: raw
run: echo "rawVerOut=$MAJOR_VERSION.0.${{ github.run_number }}" >> "$GITHUB_OUTPUT"
ci:
runs-on: ubuntu-latest
container: golang:1.23-bookworm
needs:
- version
env:
SEM_VERSION: ${{needs.version.outputs.versionSemVerOut}}
RAW_VERSION: ${{needs.version.outputs.rawVerOut}}
steps:
- name: Install zip
uses: montudor/action-zip@v1
Expand All @@ -29,6 +33,14 @@ jobs:
- uses: actions/checkout@v4
- run: make build

- name: Create deb package
run: cd ci && bash ./deb.sh

- uses: montudor/action-zip@v1
with:
args: zip -qq -r browser-switcher-${{ env.SEM_VERSION }}-windows-amd64.zip .
working-directory: dist/win/

- name: release
uses: actions/create-release@v1
id: create_release
Expand All @@ -40,10 +52,15 @@ jobs:
env:
GITHUB_TOKEN: ${{ github.token }}

- uses: montudor/action-zip@v1
- name: upload linux artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
args: zip -qq -r browser-switcher-${{ env.SEM_VERSION }}-windows-amd64.zip .
working-directory: dist/win/
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ci/browser-switcher_${{ env.RAW_VERSION }}.deb
asset_name: browser-switcher_${{ env.RAW_VERSION }}.deb
asset_content_type: application/octet-stream

- name: upload windows artifact
uses: actions/upload-release-asset@v1
Expand Down
19 changes: 12 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
.PHONY: build-debug
build-debug: build-win
.PHONY: debug-win
debug-win: build-win
@cp dist/win/BrowserSwitcherProxied.exe /mnt/i/BrowserSwitcherProxied.exe
@cp dist/win/BrowserSwitcher.exe /mnt/i/BrowserSwitcher.exe
@cp dist/win/register.ps1 /mnt/i/register.ps1
Expand All @@ -10,18 +10,23 @@ build-debug: build-win
@#cp fyne-cross/bin/windows-amd64/browser-switcher.exe /mnt/i/BrowserSwitcher.exe
## powershell -ExecutionPolicy Bypass -File register.ps1

.PHONY: build-linux
build-linux:
@mkdir -p dist/linux
@GOOS=linux go build -buildvcs=false -o dist/linux/browser-switcher-proxied cmd/switcher/main.go
@GOOS=linux go build -buildvcs=false -o dist/linux/browser-switcher cmd/proxy/main.go cmd/proxy/linux.go

.PHONY: debug-linux
debug-linux: build-linux
@cd dist/linux && bash install.sh

.PHONY: lint
lint:
@golangci-lint run

.PHONY: build
build: build-win build-linux

.PHONY: build-linux
build-linux:
@mkdir -p dist
@GOOS=linux go build -buildvcs=false -o dist/linux/BrowserSwitcher cmd/switcher/main.go

.PHONY: build-win
build-win:
@mkdir -p dist/win
Expand Down
40 changes: 40 additions & 0 deletions ci/deb.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/bin/bash
RAW_VERSION=${RAW_VERSION:-1.0.1}
TARGET_FOLDER=browser-switcher_$RAW_VERSION

mkdir -p $TARGET_FOLDER/{DEBIAN,usr/local/bin,usr/share/applications}

cat <<EOF > $TARGET_FOLDER/DEBIAN/control
Package: browser-switcher
Version: $RAW_VERSION
Architecture: all
Maintainer: FT-T <https://github.com/ft-t/browser-switcher>
Description: A tool to switch between browsers.
Priority: optional
Depends: xdg-utils
EOF

cp ../dist/linux/browser-switcher $TARGET_FOLDER/usr/local/bin/browser-switcher
cp ../dist/linux/browser-switcher-proxied $TARGET_FOLDER/usr/local/bin/browser-switcher-proxied
cp ../dist/linux/browser-switcher.desktop $TARGET_FOLDER/usr/share/applications/browser-switcher.desktop

cat <<EOF > browser-switcher_$RAW_VERSION/DEBIAN/postinst
#!/bin/bash
set -e
# Create required directories
mkdir -p ~/BrowserSwitcher
xdg-mime default browser-switcher.desktop x-scheme-handler/http
xdg-mime default browser-switcher.desktop x-scheme-handler/https
xdg-settings set default-web-browser browser-switcher.desktop
update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/local/bin/browser-switcher 400
update-alternatives --set x-www-browser /usr/local/bin/browser-switcher
xdg-settings set default-web-browser browser-switcher.desktop
EOF

chmod 755 browser-switcher_$RAW_VERSION/DEBIAN/postinst

dpkg-deb --build $TARGET_FOLDER
32 changes: 29 additions & 3 deletions cmd/proxy/linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,34 @@

package main

import "context"
import (
"context"
"os"
"os/exec"
"syscall"

func run(_ context.Context) error {
panic("not implemented")
"github.com/rs/zerolog"

"github.com/ft-t/browser-switcher/pkg/escaper"
)

func run(ctx context.Context) error {
// Escape arguments
var escapedArgs []string
for _, arg := range os.Args[1:] {
escapedArgs = append(escapedArgs, escaper.Escape(arg))
}

args := append([]string{"-e", "/usr/local/bin/browser-switcher-proxied"}, escapedArgs...) // todo: remove hardcoded path

zerolog.Ctx(ctx).Debug().Msgf("running command: terminal %v", args)

cmd := exec.Command(
"x-terminal-emulator",
args...,
)

cmd.SysProcAttr = &syscall.SysProcAttr{}

return cmd.Start()
}
18 changes: 2 additions & 16 deletions cmd/switcher/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,17 @@ package main
import (
"context"
"os"
"path/filepath"

"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"gopkg.in/natefinch/lumberjack.v2"

config2 "github.com/ft-t/browser-switcher/pkg/config"
"github.com/ft-t/browser-switcher/pkg/escaper"
"github.com/ft-t/browser-switcher/pkg/launcher"
logger2 "github.com/ft-t/browser-switcher/pkg/logger"
"github.com/ft-t/browser-switcher/pkg/selector"
"github.com/ft-t/browser-switcher/pkg/ui"
)

func main() {
currentDir := filepath.Dir(os.Args[0])

logFile := &lumberjack.Logger{
Filename: filepath.Join(currentDir, "logs", "log.log"),
MaxSize: 30,
MaxBackups: 3,
MaxAge: 10,
Compress: false,
}
lg := zerolog.New(zerolog.MultiLevelWriter(os.Stdout, logFile)).With().Timestamp().Logger()
log.Logger = lg
lg := logger2.GetLogger()

lg.Info().Msgf("Starting browser-switcher. Args: %v", os.Args)
ctx := lg.WithContext(context.Background())
Expand Down
18 changes: 0 additions & 18 deletions pkg/launcher/launcher.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
package launcher

import (
"context"
"os/exec"
"slices"

"github.com/ft-t/browser-switcher/pkg/config"
)

type Launcher struct {
targetURL string
}
Expand All @@ -17,13 +9,3 @@ func New(targetURL string) *Launcher {
targetURL: targetURL,
}
}

func (l *Launcher) Launch(_ context.Context, browser *config.Browser) error {
return exec.Command(
browser.BinaryPath,
slices.Concat(
[]string{l.targetURL},
browser.LaunchArgs,
)...,
).Start()
}
2 changes: 1 addition & 1 deletion pkg/launcher/launcher_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ import (

func TestLauncher(t *testing.T) {
l := launcher.New("https://example.com")
assert.Error(t, l.Launch(context.TODO(), &config.Browser{}))
assert.NoError(t, l.Launch(context.TODO(), &config.Browser{}))
}
24 changes: 24 additions & 0 deletions pkg/launcher/linux.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
//go:build linux

package launcher

import (
"context"
"os/exec"
"slices"

"github.com/ft-t/browser-switcher/pkg/config"
)

func (l *Launcher) Launch(ctx context.Context, browser *config.Browser) error {
return exec.Command(
"setsid",
slices.Concat(
[]string{
browser.BinaryPath,
l.targetURL,
},
browser.LaunchArgs,
)...,
).Start()
}
21 changes: 21 additions & 0 deletions pkg/launcher/windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//go:build windows

package launcher

import (
"context"
"os/exec"
"slices"

"github.com/ft-t/browser-switcher/pkg/config"
)

func (l *Launcher) Launch(_ context.Context, browser *config.Browser) error {
return exec.Command(
browser.BinaryPath,
slices.Concat(
[]string{l.targetURL},
browser.LaunchArgs,
)...,
).Start()
}
9 changes: 7 additions & 2 deletions pkg/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,22 @@ package logger
import (
"os"
"path/filepath"
"runtime"

"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"gopkg.in/natefinch/lumberjack.v2"
)

func GetLogger() zerolog.Logger {
currentDir := filepath.Dir(os.Args[0])
currentDir := filepath.Join(filepath.Dir(os.Args[0]), "logs")

if runtime.GOOS != "windows" {
currentDir = "/tmp/"
}

logFile := &lumberjack.Logger{
Filename: filepath.Join(currentDir, "logs", "log.log"),
Filename: filepath.Join(currentDir, "browser-switcher.log"),
MaxSize: 30,
MaxBackups: 3,
MaxAge: 10,
Expand Down
10 changes: 10 additions & 0 deletions scripts/browser-switcher.desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[Desktop Entry]
Version=1.0
Name=Browser Switcher
Exec=/usr/local/bin/browser-switcher %U
Terminal=false
Type=Application
MimeType=x-scheme-handler/http;x-scheme-handler/https;
Categories=Network;WebBrowser;
StartupNotify=true
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;
15 changes: 15 additions & 0 deletions scripts/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash
sudo mkdir -p /etc/browser-switcher
mkdir -p ~/BrowserSwitcher

sudo cp -f browser-switcher /usr/local/bin/browser-switcher && sudo chmod 777 /usr/local/bin/browser-switcher
sudo cp -f browser-switcher-proxied /usr/local/bin/browser-switcher-proxied && sudo chmod 777 /usr/local/bin/browser-switcher-proxied

sudo cp -f browser-switcher.desktop /usr/share/applications/browser-switcher.desktop
sudo xdg-mime default browser-switcher.desktop x-scheme-handler/http
sudo xdg-mime default browser-switcher.desktop x-scheme-handler/https

sudo update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/local/bin/browser-switcher 400
sudo update-alternatives --config x-www-browser

sudo xdg-settings set default-web-browser browser-switcher.desktop

0 comments on commit 65d426e

Please sign in to comment.