• v1.1.8 5857dec730

    v1.1.8
    SonarQube Scan / SonarQube Trigger (push) Successful in 4m6s
    Docker Build and Push / Run Tests (push) Successful in 2m31s
    Docker Build and Push / Build and Push Docker Image (push) Successful in 18m4s
    Stable

    bagas released this 2026-07-19 14:13:04 +07:00 | 23 commits to main since this release

    Concurrency and lifecycle safety fixes across the session, transport, forwarder, and port-registry packages, plus a new frontendURL env var.

    • Fix data race in SetChannel() and Channel() by adding mutex protection

    • Fix data race in StartedAt() by adding mutex protection

    • Fix waitForTCPIPForward() failing on non-tcpip-forward global requests

    • Fix data races in the forwarder struct (SetType(), SetForwardedPort(), SetListener(), TunnelType(), ForwardedPort(), Listener()) via sync.RWMutex

    • Fix data races in the slug struct (Set(), String()) via sync.RWMutex

    • Fix data race in HandleTCPForward() caused by a goroutine writing to an outer-scope err variable

    • Fix POST/PUT requests hanging in the HTTP handler

    • Fix AddRange infinite loop when endPort == 65535 (uint16 wraparound)

    • Fix Claim bypassing the allowed port range — now rejects out-of-range ports

    • Fix Unassigned handing out the same port to concurrent callers — now reserves atomically

    • Fix SetStatus silently creating entries for unknown ports — now returns an error

    • Fix concurrent map read/write in registry.Update crashing the server

    • Refactor Close() to release its mutex before calling external code, preventing deadlocks

    • Make CLOSED a terminal state — SetChannel() and SetStatus() now reject/ignore calls after Close()

    • Add nil check to SetChannel() to prevent masking upstream bugs

    • Add PortRegistry interface for better interface segregation

    • Set startedAt when the session starts running, instead of at object creation

    • Extract Close() into helper methods: closeChannel(), closeConnection(), cleanupRegistry(), cleanupForwarder()

    • Fix isClosedError() redundant string comparison

    • Make cleanupRegistry() conditional on non-empty slug to avoid unnecessary registry calls

    • Use ForwardedPort() / Listener() getters consistently instead of direct field access

    • Add frontendURL environment variable

    • #150 Fix race conditions and improve lifecycle safety

    • #151 fix(session): resolve race conditions

    • #154 fix(httphandler): post/put request hang

    • #155 fix(port, session): harden port registry and fix concurrent allocation

    • #156 fix(registry): data race registry update

    Downloads
  • v1.1.7 198147c676

    v1.1.7
    Tests / Run Tests (pull_request) Successful in 3m10s
    Docker Build and Push / Run Tests (push) Successful in 3m16s
    Docker Build and Push / Build and Push Docker Image (push) Successful in 15m8s
    Stable

    bagas released this 2026-07-17 13:24:12 +07:00 | 41 commits to main since this release

    Race Condition Fixes:

    • Fixed data races in SetChannel(), Channel(), and StartedAt()
    • Fixed test race conditions in transport and interaction packages

    Concurrency Safety:

    • Refactored Close() to prevent deadlocks by releasing mutex before external calls
    • Made SetChannel() reject calls after Close()
    • Made SetStatus() ignore calls after Close() (terminal state)
    • Added nil check to SetChannel()

    Code Quality:

    • Extracted helper methods in Close() for better separation of concerns
    • Added PortRegistry interface for better interface segregation
    • Fixed isClosedError() redundant string comparison
    • Made cleanupRegistry() conditional on non-empty slug
    • Fixed startedAt timestamp to reflect actual session start
    Downloads
  • v1.1.6 54179a7112

    v1.1.6
    SonarQube Scan / SonarQube Trigger (push) Successful in 3m39s
    Docker Build and Push / Run Tests (push) Successful in 2m10s
    Docker Build and Push / Build and Push Docker Image (push) Successful in 19m55s
    Stable

    bagas released this 2026-03-30 17:27:25 +07:00 | 45 commits to main since this release

    What's Changed

    • refactor: move server, session, and types package to internal in #123
    • refactor: move types package to internal in #122
    • refactor: move session package to internal in #121
    • refactor: move server package to internal in #120

    Contributors

    Full Changelog: v1.1.5...v1.1.6

    Downloads
  • v1.1.5 9dc3711875

    v1.1.5
    Docker Build and Push / Run Tests (push) Successful in 2m0s
    Docker Build and Push / Build and Push Docker Image (push) Successful in 17m24s
    SonarQube Scan / SonarQube Trigger (push) Successful in 3m41s
    Stable

    bagas released this 2026-03-19 22:32:45 +07:00 | 65 commits to main since this release

    What's Changed

    • chore(deps): update actions/checkout action to v6 in #75
    • fix(deps): update module github.com/stretchr/testify to v1.11.1 in #79
    • chore(deps): update dependency go to v1.25.6 in #78
    • feat(testing): add comprehensive test coverage and code quality improvements in #76
    • feat/restructure in #73

    Contributors

    Full Changelog: v1.1.4...v1.1.5

    Downloads
  • v1.1.4 1e12373359

    v1.1.4
    Docker Build and Push / build-and-push-branches (push) Has been skipped
    Docker Build and Push / build-and-push-tags (push) Successful in 13m1s
    Stable

    bagas released this 2026-01-21 14:06:46 +07:00 | 128 commits to main since this release

    What's Changed

    • Reorganize internal packages and overall project structure
    • Update imports and wiring to match the new layout
    • Separate HTTP parsing and streaming from the server package
    • Separate middleware from the server package
    • Separate session registry from the session package
    • Move HTTP, HTTPS, and TCP servers to the transport package
    • Session package no longer starts the TCP server directly
    • Server package no longer starts HTTP/HTTPS servers on initialization
    • Forwarder no longer handles accepting TCP requests
    • Move session details to the types package
    • HTTP/HTTPS initialization is now the responsibility of main

    Contributors

    Full Changelog: v1.1.3...v1.1.4

    Downloads
  • v1.1.3 44d224f491

    v1.1.3
    Docker Build and Push / build-and-push-branches (push) Has been skipped
    Docker Build and Push / build-and-push-tags (push) Successful in 10m10s
    Stable

    bagas released this 2026-01-18 21:20:05 +07:00 | 136 commits to main since this release

    refactor: explicit initialization and dependency injection

    • Replace init() with config.Load() function when loading env variables
    • Inject portRegistry into session, server, and lifecycle structs
    • Inject sessionRegistry directly into interaction and lifecycle
    • Remove SetSessionRegistry function and global port variables
    • Pass ssh.Conn directly to forwarder constructor instead of lifecycle interface
    • Pass user and closeFunc callback to interaction constructor instead of lifecycle interface
    • Eliminate circular dependencies between lifecycle, forwarder, and interaction
    • Remove setter methods (SetLifecycle) from forwarder and interaction interfaces

    Full Changelog: https://git.fossy.my.id/bagas/tunnel-please/compare/v1.1.2...v1.1.3

    Downloads
  • v1.1.2 2b9bca65d5

    v1.1.2
    Docker Build and Push / build-and-push-branches (push) Has been skipped
    Docker Build and Push / build-and-push-tags (push) Successful in 11m44s
    Stable

    bagas released this 2026-01-17 17:33:10 +07:00 | 139 commits to main since this release

    refactor(interaction): separate view and update logic into modular files

    • Extract slug editing logic to slug.go (slugView/slugUpdate)
    • Extract commands menu logic to commands.go (commandsView/commandsUpdate)
    • Extract coming soon modal to coming_soon.go (comingSoonView/comingSoonUpdate)
    • Extract main dashboard logic to dashboard.go (dashboardView/dashboardUpdate)
    • Create model.go for shared model struct and helper functions
    • Replace math/rand with crypto/rand for random subdomain generation
    • Remove legacy TLS cipher suite configuration

    Full Changelog: https://git.fossy.my.id/bagas/tunnel-please/compare/v1.1.1...v1.1.2

    Downloads
  • v1.1.1 6969d6823a

    v1.1.1
    Docker Build and Push / build-and-push-branches (push) Has been skipped
    Docker Build and Push / build-and-push-tags (push) Successful in 11m38s
    Stable

    bagas released this 2026-01-16 16:37:37 +07:00 | 142 commits to main since this release

    refactor: convert structs to interfaces and rename accessors

    • Convert struct types to interfaces
    • Rename getter and setter methods
    • Add Close method to server interface
    • Merge handler functionality into session file
    • Handle lifecycle.Connection().Wait()
    • fix panic on nil connection in SSH server

    Full Changelog: https://git.fossy.my.id/bagas/tunnel-please/compare/v1.1.0...v1.1.1

    Downloads
  • v1.1.0 aafea49975

    v1.1.0
    Docker Build and Push / build-and-push-tags (push) Successful in 11m34s
    Docker Build and Push / build-and-push-branches (push) Has been skipped
    Stable

    bagas released this 2026-01-14 17:16:43 +07:00 | 148 commits to main since this release

    feat: integrate gRPC, session refactor, SSH headless support, and bug fixes

    • gRPC integration: slug edit handling, get sessions by user, and session requests from gRPC server
    • Refactor gRPC client: simplify processEventStream and handle authenticated user info
    • Session management improvements: use session key for registry, forwarder session termination, inject SessionRegistry interface
    • SSH enhancements: add headless mode support for SSH -N connections
    • Bug fixes:
      • prevent subdomain changes to already-in-use subdomains
      • fix startup order and environment variable keys
      • atomic ClaimPort() to prevent race conditions
    • Refactors:
      • consolidate error handling
      • replace Get/Set patterns with idiomatic Go interfaces
      • change enums from string to int
    • CI cleanup: remove renovate bot

    Reviewed-on: #65

    Downloads
  • v1.1.0-rc.2
    Docker Build and Push / build-and-push-branches (push) Has been skipped
    Docker Build and Push / build-and-push-tags (push) Successful in 13m4s
    Stable

    bagas released this 2026-01-14 16:54:10 +07:00 | 149 commits to main since this release

    refactor: replace Get/Set patterns with idiomatic Go interfaces

    • rename constructors to New
    • remove Get/Set-style accessors
    • replace string-based enums with iota-backed types
    Downloads