Skip to content
This repository was archived by the owner on Jul 13, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1300 commits
Select commit Hold shift + click to select a range
87bf76d
net/porttrack: change magic listen address format for Go 1.26
bradfitz Mar 5, 2026
d784dcc
go.toolchain.branch: switch to Go 1.26
bradfitz Mar 4, 2026
faf7f2b
cmd/k8s-operator: remove deprecated TS_EXPERIMENTAL_KUBE_API_EVENTS (…
BeckyPauley Mar 5, 2026
d82e478
cli: `--json` for `tailscale dns status|query`
kradalby Feb 18, 2026
1b53c00
clientupdate,net/tstun: add support for OpenWrt 25.12.0 using apk (#1…
cmol Mar 5, 2026
19e2c8c
cmd/k8s-proxy: use L4 TCPForward instead of L7 HTTP proxy (#18179)
rajsinghtech Mar 5, 2026
c17ec8c
VERSION.txt: this is v1.97.0 (#18898)
barnstar Mar 5, 2026
9657a93
tstest/natlab: add test for no control and rotated disco key (#18261)
cmol Mar 5, 2026
2810f0c
all: fix typos in comments
bradfitz Mar 5, 2026
8cfbaa7
go.mod: bump staticcheck to version that supports Go 1.26
bradfitz Mar 5, 2026
2a64c03
types/ptr: deprecate ptr.To, use Go 1.26 new
bradfitz Mar 5, 2026
bb45b2e
nix: update flakes to get a nixpkgs version with go 1.26
kradalby Mar 6, 2026
8e3d176
control/controlbase: deflake, speed up TestConnMemoryOverhead
bradfitz Mar 6, 2026
40858a6
ipnext,ipnlocal: add ExtraWireGuardAllowedIPs hook
mzbenami Mar 2, 2026
3cc7b85
prober: fix queuing delay probe txRecords overflow under high DERP se…
mikeodr Mar 6, 2026
4453cc5
go.mod: bump to Go 1.26.1
bradfitz Mar 6, 2026
bd2a2d5
all: use Go 1.26 things, run most gofix modernizers
bradfitz Mar 5, 2026
e400d5a
cmd/testwrapper: make test tolerant of a GOEXPERIMENT being set
bradfitz Mar 6, 2026
ac74dfa
util/osuser: extend id command fallback for group IDs to freebsd
neinkeinkaffee Mar 5, 2026
6a19995
tailcfg: reintroduce UserProfile.Groups
neinkeinkaffee Feb 17, 2026
a4614d7
appc,feature/conn25: conn25: send address assignments to connector
franbull Feb 27, 2026
633e892
ssh/tailssh: fix race between termination message write and session t…
bradfitz Mar 9, 2026
8d3efd4
go.mod: bump for internal/poll: move rsan to heap on windows
nickkhyl Mar 9, 2026
0023f1a
.github/workflows: use tailscale/go for Windows CI too
bradfitz Mar 9, 2026
9522619
cmd/k8s-operator: use correct tailnet client for L7 & L3 ingresses (#…
davidsbond Mar 10, 2026
16c4780
go.toolchain.next.rev: update to final Go 1.26.1 [next] (#18939)
jasonodonnell Mar 10, 2026
32adca7
pull-toolchain.sh: advance the next hash if it's behind
bradfitz Mar 10, 2026
525f7a1
types/key: add NodePrivate.Raw32 and DiscoPrivateFromRaw32
bradfitz Mar 9, 2026
021de2e
util/linuxfw: fix nil pointer panic in connmark rules without IPv6 (#…
mikeodr Mar 10, 2026
99bde5a
tstest/integration: deflake TestCollectPanic
bradfitz Mar 10, 2026
99e3e9a
ssh/tailssh: mark TestSSHRecordingCancelsSessionsOnUploadFailure as f…
bradfitz Sep 17, 2025
f905871
ipn/ipnlocal, feature/ssh: move SSH code out of LocalBackend to feature
bradfitz Mar 10, 2026
16fa81e
wgengine: add API to force a disco key for experiments, testing
bradfitz Mar 10, 2026
7a43e41
client/web: signal need to wait for auth across tabs
neinkeinkaffee Mar 11, 2026
95a135e
cmd/{containerboot,k8s-operator}: reissue auth keys for broken proxie…
tomhjp Mar 11, 2026
70de111
wgengine/magicsock: fix three race conditions in TestTwoDevicePing
bradfitz Mar 9, 2026
607d01c
net/batching: clarify & simplify single packet read limitations
jwhited Mar 11, 2026
dd1da0b
wgengine: search randomly for unused port instead of in contiguous ra…
kari-ts Mar 11, 2026
4c7c109
netns: add Android callback to bind socket to network (#18915)
kari-ts Mar 11, 2026
073a9a8
wgengine{,/magicsock}: add DERP hooks for filtering+sending packets
bradfitz Mar 11, 2026
0c53cf7
.github: Bump actions/upload-artifact from 6.0.0 to 7.0.0
dependabot[bot] Mar 2, 2026
224305b
.github: Bump actions/download-artifact from 7.0.0 to 8.0.0
dependabot[bot] Mar 2, 2026
0a4e0e2
.github: Bump github/codeql-action from 4.32.5 to 4.32.6
dependabot[bot] Mar 9, 2026
be62e6d
tsnet: make tsnet fallback to control url from environment
kradalby Mar 11, 2026
7412fc0
flake.nix: update build to use buildGo126Module (#18977)
mikeodr Mar 12, 2026
dd480f0
gokrazy: fix busybox breakglass support, add test
bradfitz Mar 10, 2026
621f719
cmd/k8s-operator: fix Service reconcile triggers for default ProxyCla…
tomhjp Mar 13, 2026
660a460
feature/conn25: Update ConnectorTransitIPRequest handling (#18979)
george-tailscale Mar 13, 2026
96dde53
net/{batching,udprelay},wgengine/magicsock: add SO_RXQ_OVFL clientmet…
jwhited Mar 11, 2026
4c91f90
tstest/integration: add userspace-networking + proxymap WhoIs integra…
bradfitz Mar 13, 2026
54606a0
wgengine/netstack: don't register subnet/4via6 TCP flows with proxymap
bradfitz Mar 13, 2026
51a117f
feature/conn25: rewrite A records for connector domains
franbull Mar 3, 2026
b3c6184
go.mod: bump tailscale/wireguard-go
jwhited Mar 16, 2026
a565833
kube/certs: discover TLS domains from TCP TerminateTLS handlers (#19020)
rajsinghtech Mar 17, 2026
9826db3
docs: add new package to go:embed commit-messages.md
bradfitz Mar 17, 2026
b0e63cb
wgengine/netstack: add TS_NETSTACK_KEEPALIVE_{IDLE,INTERVAL} envknobs
josefbacik Mar 16, 2026
667fd0d
build_docker.sh: fix typo
AaronPerk Mar 18, 2026
ce77890
feature/conn25: add NATing support with flow caching
mzbenami Mar 6, 2026
26ba71d
derp: add envknob to disable RTT stats collection (#19029)
mikeodr Mar 18, 2026
31d65a9
net/batching: eliminate gso helper func indirection
jwhited Mar 17, 2026
156d97c
derp/derpserver: fix locking in a few expvar.Func metrics (#19031)
bradfitz Mar 18, 2026
4e88d23
control,health,ipn: move IP forwarding check to health tracker (#19007)
mikeodr Mar 18, 2026
2534bc3
net/tstun: do not write when Wrapper is closed (#19038)
cmol Mar 18, 2026
0d8d383
net/dns: use the correct separator for multiple servers in the same N…
nickkhyl Mar 19, 2026
ac19bd5
feature/featuretags: skip TestAllOmitBuildTagsDeclared when not in a …
bradfitz Mar 19, 2026
ca9aa20
ipn/ipnlocal: populate Groups field in profileFromView
neinkeinkaffee Mar 19, 2026
85bb5f8
wgengine/magicsock,control/controlclient: do not overwrite discokey w…
cmol Mar 20, 2026
1e09eb0
feature/conn25: implement IPMapper
franbull Mar 18, 2026
79f71be
feature/conn25: implement IPMapper
franbull Mar 19, 2026
ffa7df2
ipn: reject advertised routes with non-address bits set (#18649)
bcreane Mar 20, 2026
34477cf
tka: use constant-time comparison of disablement secret (#19064)
awly Mar 20, 2026
3a5afc3
feature/conn25: guard against an index out of bounds panic (#19066)
awly Mar 20, 2026
ea7040e
ipn/{ipnext,ipnlocal}: expose authReconfig in ipnext.Host as AuthReco…
mzbenami Mar 18, 2026
931fe56
tsnet: fall back to 'tsnet' when os.Executable fails on darwin
prakashrj Mar 19, 2026
34267d5
cmd/tailscale: print a helpful error for Taildrive CLI on macOS GUI
alexwlchan Mar 17, 2026
6e5a64d
.github: Bump actions/cache from 5.0.3 to 5.0.4
dependabot[bot] Mar 23, 2026
323e0f8
docs/windows/policy: add CheckUpdates key to tailscale.admx (#19044)
jpelchat Mar 23, 2026
4378260
util/osdiag: fix typo in comment (reciever -> receiver)
Mar 22, 2026
1d6ecb1
safesocket, ipn/ipnserver: use PeerCreds on solaris and illumos
nshalman Mar 23, 2026
67496e1
cmd/tailscale/cli: fix a typo in the `whois` help text
alexwlchan Mar 23, 2026
d3626c5
feature/conn25: add packet filter allow functions
franbull Mar 20, 2026
18528d1
.github: Bump github/codeql-action from 4.32.6 to 4.34.1
dependabot[bot] Mar 23, 2026
db3348f
.github/workflows: limit vet to the tailscale.com module (#19084)
tomhjp Mar 23, 2026
04ef9d8
ipn/ipnlocal: add a map for node public key to node ID lookups (#19051)
amalscale Mar 23, 2026
0b4c0f2
net/dns/resolver: treat DNS REFUSED responses as soft errors in forwa…
bcreane Mar 23, 2026
44ec71c
tsnet: print state change in auth loop more responsively (#18048)
tomhjp Mar 23, 2026
1d0fde6
all: use `bart.Lite` instead of `bart.Table` where appropriate
alexwlchan Mar 23, 2026
1403920
derp,types,util: use bufio Peek+Discard for allocation-free fast read…
mikeodr Mar 24, 2026
302e49d
cmd/tailscale/cli: add a debug command to print the statedir
alexwlchan Mar 23, 2026
bdcf976
feature/conn25: guard extension Init() and PeerAPI handler with opt-i…
mzbenami Mar 24, 2026
9c36a71
feature/*,net/tstun: add tundev_txq_drops clientmetric on Linux
jwhited Mar 19, 2026
85906b6
feature/conn25: call AuthReconfigAsync after address assignment
franbull Mar 23, 2026
f0ba1f3
net/udprelay: remove experimental label from package docs
jwhited Mar 24, 2026
590546b
disco: remove experimental label from BindUDPRelayHandshakeState
jwhited Mar 24, 2026
87ec323
control/controlclient: allow multiple non-streaming map requests (#19…
cmol Mar 24, 2026
066ce9a
licenses: update license notices
Mar 23, 2026
1e51d57
ipn: fix the typo causing NoSNAT always set to true (#19110)
KevinLiang10 Mar 24, 2026
9992b7c
ipn,ipn/local: broadcast ClientVersion if AutoUpdate.Check (#19107)
kari-ts Mar 24, 2026
f52c1e3
derp: use AvailableBuffer for WriteFrameHeader, consolidate tests (#1…
mikeodr Mar 24, 2026
bb59942
types/key: use AvailableBuffer for WriteRawWithoutAllocating (#19102)
mikeodr Mar 24, 2026
9a4a2db
control/controlclient: handle errors in rememberLastNetmapUpdator (#1…
cmol Mar 25, 2026
c026be1
ipn/ipnserver: use peercreds for actor.Username on freebsd (for Taild…
rtgnx Mar 25, 2026
a57c645
ipn/ipnlocal: debounce extra enqueues in ExtensionHost.AuthReconfigAsync
mzbenami Mar 24, 2026
47ef1a9
tsnet: use tstest.Shard in new tsnet tests
hwh33 Jan 22, 2026
1794765
tsnet: block rather than poll in setup for TestListenService
hwh33 Jan 22, 2026
4f43ad3
tsnet: clean up state when Service listener is closed
hwh33 Jan 22, 2026
954a2df
net/dns: fix duplicate search line entries (OpenBSD, primarily)
blackgnezdo Mar 25, 2026
33da8a8
go.toolchain.*: bump for mips and synology segmentation violation fixes
nickkhyl Mar 25, 2026
18983ec
wif: add AWS ecs for autogenerated OIDC tokens
pguinard-public-com Mar 5, 2026
330a17b
net/batching: use vectored writes on Linux (#19054)
illotum Mar 25, 2026
2d5962f
feature/conn25,ipn/ipnext,ipn/ipnlocal: add ExtraRouterConfigRoutes hook
franbull Mar 25, 2026
b4519e9
.github: Bump actions/create-github-app-token from 2.2.1 to 3.0.0 (#1…
dependabot[bot] Mar 26, 2026
45f989f
ipn/ipnlocal: warn incompatibility between no-snat-routes and exitnod…
KevinLiang10 Mar 26, 2026
fa22d0a
docs: add commit message example (#19134)
noelob Mar 26, 2026
f0fa895
tsnet/tsnet.go: fix docs link (#19136)
WalterHub Mar 26, 2026
4ace87a
net,tsnet: fix the capitalisation of "Wireshark"
alexwlchan Mar 26, 2026
86135d3
feature/conn25: Store transit ips by connector key (#19071)
george-tailscale Mar 26, 2026
e7121b4
feature/conn25: connect the ExtraWireguardAllowedIPs hook (#19140)
george-tailscale Mar 26, 2026
2b1030a
release/dist/unixpkgs: include tailscale-online.target in packages
bradfitz Mar 22, 2026
d3bfc33
Add 'fish' to the list of scales
SamPlaysKeys Mar 27, 2026
70fabf1
.github: Bump actions/download-artifact from 8.0.0 to 8.0.1
dependabot[bot] Mar 16, 2026
156e6ae
feature/conn25: install all the hooks
mzbenami Mar 26, 2026
0694521
README: update the version of Go in the README (#19168)
Lykathia Mar 29, 2026
edb2be1
cmd/tailscale: improve `tailscale lock` error message if no keys
alexwlchan Mar 26, 2026
4c0f488
docker: add riscv64 to container image architectures
gounthar Mar 28, 2026
99f8039
tsnet: fix advertiseService dropping existing services
Mar 28, 2026
bf46772
control/controlclient,ipn/ipnlocal,wgengine: avoid restarting wiregua…
cmol Mar 30, 2026
87388ce
licenses: update license notices
Mar 30, 2026
61ac021
wgengine/magicsock: assume network up for tests
hwh33 Mar 28, 2026
4334dfa
control/controlclient: take mapsession and release lock early in sub …
cmol Mar 31, 2026
6f0ca94
tka: consolidate all the limits into a single file
alexwlchan Mar 31, 2026
fed0df6
tsnet: add test for advertising multiple Services
hwh33 Mar 29, 2026
1e2fdfd
tsnet: fix bug in closing multiple ServiceListeners at once
hwh33 Mar 30, 2026
88e7330
ipn,tka: improve Tailnet Lock logs
alexwlchan Apr 1, 2026
990d25c
go.toolchain.rev, version: bump Tailscale Go, add IsTailscaleGo
bradfitz Apr 1, 2026
4ffb92d
tka: refer consistently to "DisablementValues"
alexwlchan Mar 31, 2026
5b62f98
ipn, cmd/tailscale/cli: allow setting FQDN sans dot as an exit node
alexwlchan Mar 23, 2026
c76113a
wgengine/magicsock: send out disco keys over TSMP periodically (#19212)
cmol Apr 1, 2026
211ef67
tailcfg,ipn/ipnlocal: regulate netmap caching via a node attribute (#…
creachadair Apr 1, 2026
9c1d59f
version: parse Void Linux version strings
alexwlchan Mar 31, 2026
e82ffe0
cmd/k8s-operator: add further E2E tests for Ingress (#19219)
BeckyPauley Apr 2, 2026
ffaebd7
control/controlclient: filter out disco updates from full map (#19220)
cmol Apr 2, 2026
d6b626f
tstest: add test for connectivity to off-tailnet CGNAT endpoints
tendstofortytwo Apr 2, 2026
eaa5d9d
client,cmd/tailscale,ipn/{ipnlocal,localapi}: add debug CLI command t…
creachadair Apr 2, 2026
7ddbd84
ipn/ipnlocal: ensure TestServeUnixSocket actually serves a Unix socket
hwh33 Apr 3, 2026
5ba3015
flake.nix: add patch for debug/mod.go (#19238)
mikeodr Apr 3, 2026
0f02c20
tool/gocross: skip broken TestGocrossWrapper inside `git worktree` (#…
sfllaw Apr 5, 2026
5ef3713
cmd/vet: add subtestnames analyzer; fix all existing violations
bradfitz Apr 4, 2026
7b5b9f5
client/web: fix nil metricCapture crash in mockLocalAPI
bradfitz Apr 6, 2026
85827f7
ci: fix Windows benchmarks running all tests instead of just benchmarks
bradfitz Apr 6, 2026
5a899e4
ipn/ipnlocal: add health.Tracker to tests where it was warning in CI
bradfitz Apr 6, 2026
86f42ea
cmd/cloner, cmd/viewer: handle named map/slice types with Clone/View …
bradfitz Apr 5, 2026
9a43bca
tailcfg: fix ClientVersion.UrgentSecurityUpdate doc comment (#19214)
dylan-tailscale Apr 6, 2026
4111d4b
ssh/tailssh: fix integration test hang due to missing host keys
bradfitz Apr 5, 2026
58595a6
safeweb: add CSRF token helpers and set cookie path to root (#19265)
fserb Apr 6, 2026
d0cd090
go.toolchain.rev: bump our Go toolchain for caching fix
bradfitz Apr 6, 2026
21695cd
ipn/ipnlocal,net/netmon: make frequent darkwake more efficient
raggi Apr 3, 2026
82fa218
tempfork/gliderlabs/ssh: remove tempfork
kradalby Mar 9, 2026
dd3b613
ssh: replace tempfork with tailscale/gliderssh
kradalby Mar 16, 2026
6e44c68
.golangci.yml: enforce gliderssh import alias via importas linter
kradalby Apr 7, 2026
2b1cfa7
ssh/tailssh: fix race in session termination message delivery
bradfitz Apr 5, 2026
d44649a
control/controlclient: add rwlock to peers in mapsession (#19261)
cmol Apr 7, 2026
9a7f143
wgengine/userspace: add extra check for tsmp learned keys in engine (…
cmol Apr 7, 2026
1b5b437
ipn/localapi, cli, clientmetric: add ipnbus feature tag; fix omit.go …
bradfitz Apr 7, 2026
1f84729
ipn/desktop: use runtime.Pinner to force heap-allocation of msg
nickkhyl Apr 7, 2026
96c3ad5
feature/conn25: add IPv6 support
franbull Apr 6, 2026
8a7e160
ipn/desktop: move behind feature/condregister
bradfitz Apr 7, 2026
0739927
k8s-operator/sessionrecording/ws: unify Read/Write frame parsing (#19…
fserb Apr 7, 2026
bd09e84
licenses: update license notices
Apr 6, 2026
e689283
derp/derpserver: add per-connection receive rate limiting (#19222)
mikeodr Apr 7, 2026
8df8e9c
cmd/containerboot: rate-limit IPN bus netmap notifications
dougbryant-ant Apr 7, 2026
2aac2ab
derp: align FrameType docs casing
jwhited Apr 7, 2026
c4cb5eb
go.toolchain.rev: update to Go 1.26.2
bradfitz Apr 7, 2026
a182b86
tsd, all: add Sys.ExtraRootCAs, plumb through TLS dial paths
bradfitz Apr 7, 2026
5341b26
wgengine/netstack: allow UDP listeners to receive traffic on Service …
ChaosInTheCRD Apr 8, 2026
9e68841
control/controlclient: avoid calls to ms.netmap() (#19281)
cmol Apr 8, 2026
ccef06b
tstest/integration/testcontrol: notify peers when subnet routes change
bradfitz Apr 8, 2026
8141613
tstest/natlab/vnet: add multi-NIC node support, DHCP fixes, and VIPs
bradfitz Apr 8, 2026
8a9840d
tool: replace go.cmd with a 19KB Rust go.exe wrapper
bradfitz Apr 6, 2026
33cd8ea
tool/goexe: refactor to use windows_sys
npry Apr 8, 2026
647deed
misc: add install-git-hooks.go and git hook for Change-Id tracking
bradfitz Apr 5, 2026
d948b78
tsweb: add TS_DEBUG_TRUSTED_CIDRS envknob to debug (#19283)
jasonodonnell Apr 8, 2026
ec0b23a
vmtest: add VM-based integration test framework
bradfitz Apr 8, 2026
b25920d
tka: improve logging for Compact and Commit operations
alexwlchan Apr 1, 2026
85d6ba9
cmd/k8s-operator: migrate to tailscale-client-go-v2 (#19010)
davidsbond Apr 9, 2026
dca1d8e
tstest/natlab: add TestSubnetRouterFreeBSD with FreeBSD cloud image s…
bradfitz Apr 9, 2026
27e6fed
ssh/tailssh: fix default PATH for Debian
andrew-d Apr 7, 2026
6b7caaf
cmd/k8s-operator: set PreferDualStack on ProxyGroup egress services (…
fserb Apr 9, 2026
03c3551
ipn/ipnlocal: add netmap mutations to the ipn bus (#19120)
barnstar Apr 9, 2026
1ff369a
tka: keep the CompactionDefaults alongside the other limits
alexwlchan Apr 10, 2026
399f048
tka: Revert "improve logging for Compact and Commit operations"
alexwlchan Apr 10, 2026
5e81840
tstest: add RequireRoot helper
bradfitz Apr 10, 2026
b4c0d67
wgengine/router/osrouter: fix privileged tests missing fake netfilter…
amalscale Apr 9, 2026
ca5db86
cmd/derper,derp: add --rate-config file with SIGHUP reload (#19314)
mikeodr Apr 10, 2026
cf59a6f
.github, tool/listpkgs: automatically find tests which use tstest.Req…
bradfitz Apr 10, 2026
0e8ae9d
gokrazy: add arm64 natlab appliance image support
bradfitz Apr 10, 2026
674f866
tstest/tailmac: add headless mode for automated VM testing
bradfitz Apr 10, 2026
4fcce60
tailcfg,types/netmap: add (visible) Services to SelfNode Caps (#19335)
adrianosela Apr 13, 2026
d5341fd
tailscaleroot: add test that tsgo rev is in Go build cache keys
bradfitz Apr 13, 2026
aa9a76c
ssh/tailssh: gofmt
bradfitz Apr 13, 2026
2188045
ipn/localapi,client/local: add services over localapi
adrianosela Apr 13, 2026
929ad51
cmd/derper: mark rate-config flag as experimental and unstable
jwhited Apr 13, 2026
cfed69f
licenses: update license notices
Apr 13, 2026
e2fa9ff
ssh/tailssh: speed up SSH integration tests
bradfitz Apr 5, 2026
4ce1643
types/netmap,tailcfg: update documentation for Services cap
adrianosela Apr 13, 2026
5a7ef4a
ipn/ipnlocal: mark TestStateMachineSeamless as flaky
bradfitz Apr 13, 2026
9dfe787
version: show tailscale/go toolchain git hash in version output
bradfitz Apr 13, 2026
6500d3c
cmd/containerboot: mark TestContainerBoot as flaky
bradfitz Apr 13, 2026
50b8cfb
wgengine/netstack: fix data race on in-flight connection test globals
bradfitz Apr 13, 2026
dbd19e4
tstest: add AssertNotParallel helper
bradfitz Apr 13, 2026
7dcb378
tstest/integration/nat, tstest/natlab/vnet: fix natlab test flake
bradfitz Apr 13, 2026
a97850f
cmd/derper: fix TestLookupMetric to pass when run alone
bradfitz Apr 14, 2026
13d5370
.gitignore: explicitly include tool/go.exe
raggi Apr 13, 2026
9fbe4b3
all: fix six tests that failed with -count=2
bradfitz Apr 14, 2026
ab74ea0
tstest/integration: clear SSH_CLIENT env to prevent false positive de…
apenwarr Apr 13, 2026
75819ae
derp/derpserver: increase minimum token bucket size
jwhited Apr 13, 2026
0afaa29
go.mod: upgrade go-git to v5.17.1
patrickod Apr 13, 2026
27f1d4c
control/controlclient: improve filter on netmap updates (#19308)
cmol Apr 14, 2026
49eb1b5
net/dns: fix TestDNSTrampleRecovery failure under flakestress
bradfitz Apr 14, 2026
6aa1057
wgengine/magicsock: deflake TestTwoDevicePing compare-metrics-stats
bradfitz Apr 13, 2026
621dc9c
tstest: fix kernel version parsing for Debian-style version strings
apenwarr Apr 13, 2026
a0a8fae
tstest/integration: use linkat to hardlink test binaries on Linux
bradfitz Apr 14, 2026
943b426
util/linuxfw: fix nil deref in nftables chain check
bradfitz Apr 11, 2026
5834058
wgengine: replace reflect.DeepEqual with typed Equal for maybeReconfi…
fserb Apr 14, 2026
6301a6c
util/linuxfw,wgengine/router: allow incoming CGNAT range traffic with…
tendstofortytwo Apr 14, 2026
effbe67
wgengine/magicsock: remove pickPort, use port 0 to avoid TOCTOU race
apenwarr Apr 15, 2026
61c95f4
control/controlclient: accept key if last seen on exist node is absen…
cmol Apr 15, 2026
dbf4687
control/controlclient: add patchify miss stats
bradfitz Apr 15, 2026
5eb0b4b
cmd/containerboot,cmd/k8s-proxy,kube: add authkey renewal to k8s-prox…
ChaosInTheCRD Apr 15, 2026
d8190e0
derp/derpserver: implement hierarchical token bucket rate limiting
jwhited Apr 14, 2026
958bcda
control/controlclient: handle 429 responses during node registration
knyar Apr 14, 2026
1e49346
ipn/ipnlocal: discard cached netmaps upon panic during SetNetworkMap …
creachadair Apr 15, 2026
acc4335
control/controlclient: enable request signatures on macOS (#19317)
barnstar Apr 15, 2026
eea39ea
cmd/k8s-operator: add affinity rules to DNSConfig (#19360)
davidsbond Apr 15, 2026
b39ee04
util/httpm: open .git/index to defeat Go test caching
bradfitz Apr 15, 2026
d3ba148
magicsock: invalidate endpoint on trust timeout (#19415)
illotum Apr 16, 2026
4f47c3c
ipn/ipnlocal: log AUM hash on startup as base32, not hex
alexwlchan Apr 16, 2026
1dc08f4
appc,feature/conn25: prevent clients from forwarding DNS requests and
mzbenami Apr 7, 2026
69572c7
derp/derpserver: add rate limit config metrics
jwhited Apr 13, 2026
50d7176
control/tsp, cmd/tsp: add low-level Tailscale protocol client and tool
bradfitz Apr 16, 2026
c2da563
tstest/integration/vms: skip cloud-init package updates (#19443)
tomhjp Apr 17, 2026
00a08ea
control/tsp: add lite map update support
bradfitz Apr 17, 2026
47ecbe5
cmd/k8s-operator: add priorityClassName support to helm chart (#19236)
bjorn-stange-expel Apr 17, 2026
d52ae45
cmd/cloner: deep-clone pointer elements in map-of-slice values
andrew-d Apr 7, 2026
b239e92
cmd/k8s-operator: add e2e test setup and l7 ingress test for multi-ta…
BeckyPauley Apr 17, 2026
8dda62c
feature/clientupdate: windows update should use tailscale.exe update …
kari-ts Apr 17, 2026
1fbb834
logtail: add Logger.SetEnabled to toggle uploads at runtime
bradfitz Apr 17, 2026
514d7d2
misc/git_hook: extract shared githook package; auto-rebuild on versio…
fserb Apr 17, 2026
618dfd4
client/local,types/netmap: modify services format in local api
adrianosela Apr 17, 2026
cb5a53c
ipn/ipnlocal: preserve b.loginFlags in auto-login cc.Login calls
sgraham Apr 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
59 changes: 59 additions & 0 deletions .github/actions/go-cache/action.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/usr/bin/env bash
#
# This script sets up cigocacher, but should never fail the build if unsuccessful.
# It expects to run on a GitHub-hosted runner, and connects to cigocached over a
# private Azure network that is configured at the runner group level in GitHub.
#
# Usage: ./action.sh
# Inputs:
# URL: The cigocached server URL.
# HOST: The cigocached server host to dial.
# Outputs:
# success: Whether cigocacher was set up successfully.

set -euo pipefail

if [ -z "${GITHUB_ACTIONS:-}" ]; then
echo "This script is intended to run within GitHub Actions"
exit 1
fi

if [ -z "${URL:-}" ]; then
echo "No cigocached URL is set, skipping cigocacher setup"
exit 0
fi

BIN_PATH="$(PATH="$PATH:$HOME/bin" command -v cigocacher || true)"
if [ -z "${BIN_PATH}" ]; then
echo "cigocacher not found in PATH, attempting to build or fetch it"

GOPATH=$(command -v go || true)
if [ -z "${GOPATH}" ]; then
if [ ! -f "tool/go" ]; then
echo "Go not available, unable to proceed"
exit 1
fi
GOPATH="./tool/go"
fi

BIN_PATH="${RUNNER_TEMP:-/tmp}/cigocacher$(${GOPATH} env GOEXE)"
if [ -d "cmd/cigocacher" ]; then
echo "cmd/cigocacher found locally, building from local source"
"${GOPATH}" build -o "${BIN_PATH}" ./cmd/cigocacher
else
echo "cmd/cigocacher not found locally, fetching from tailscale.com/cmd/cigocacher"
"${GOPATH}" build -o "${BIN_PATH}" tailscale.com/cmd/cigocacher
fi
fi

CIGOCACHER_TOKEN="$("${BIN_PATH}" --auth --cigocached-url "${URL}" --cigocached-host "${HOST}" )"
if [ -z "${CIGOCACHER_TOKEN:-}" ]; then
echo "Failed to fetch cigocacher token, skipping cigocacher setup"
exit 0
fi

echo "Fetched cigocacher token successfully"
echo "::add-mask::${CIGOCACHER_TOKEN}"

echo "GOCACHEPROG=${BIN_PATH} --cache-dir ${CACHE_DIR} --cigocached-url ${URL} --cigocached-host ${HOST} --token ${CIGOCACHER_TOKEN}" >> "${GITHUB_ENV}"
echo "success=true" >> "${GITHUB_OUTPUT}"
35 changes: 35 additions & 0 deletions .github/actions/go-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: go-cache
description: Set up build to use cigocacher

inputs:
cigocached-url:
description: URL of the cigocached server
required: true
cigocached-host:
description: Host to dial for the cigocached server
required: true
checkout-path:
description: Path to cloned repository
required: true
cache-dir:
description: Directory to use for caching
required: true

outputs:
success:
description: Whether cigocacher was set up successfully
value: ${{ steps.setup.outputs.success }}

runs:
using: composite
steps:
- name: Setup cigocacher
id: setup
shell: bash
env:
URL: ${{ inputs.cigocached-url }}
HOST: ${{ inputs.cigocached-host }}
CACHE_DIR: ${{ inputs.cache-dir }}
working-directory: ${{ inputs.checkout-path }}
# https://github.com/orgs/community/discussions/25910
run: $GITHUB_ACTION_PATH/action.sh
2 changes: 1 addition & 1 deletion .github/workflows/checklocks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
runs-on: [ ubuntu-latest ]
steps:
- name: Check out code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Build checklocks
run: ./tool/go build -o /tmp/checklocks gvisor.dev/gvisor/tools/checklocks/cmd/checklocks
Expand Down
73 changes: 73 additions & 0 deletions .github/workflows/cigocacher.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: Build cigocacher

on:
# Released on-demand. The commit will be used as part of the tag, so generally
# prefer to release from main where the commit is stable in linear history.
workflow_dispatch:

jobs:
build:
strategy:
matrix:
GOOS: ["linux", "darwin", "windows"]
GOARCH: ["amd64", "arm64"]
runs-on: ubuntu-24.04
env:
GOOS: "${{ matrix.GOOS }}"
GOARCH: "${{ matrix.GOARCH }}"
CGO_ENABLED: "0"
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Build
run: |
OUT="cigocacher$(./tool/go env GOEXE)"
./tool/go build -o "${OUT}" ./cmd/cigocacher/
tar -zcf cigocacher-${{ matrix.GOOS }}-${{ matrix.GOARCH }}.tar.gz "${OUT}"

- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: cigocacher-${{ matrix.GOOS }}-${{ matrix.GOARCH }}
path: cigocacher-${{ matrix.GOOS }}-${{ matrix.GOARCH }}.tar.gz

release:
runs-on: ubuntu-24.04
needs: build
permissions:
contents: write
steps:
- name: Download all artifacts
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
pattern: 'cigocacher-*'
merge-multiple: true
# This step is a simplified version of actions/create-release and
# actions/upload-release-asset, which are archived and unmaintained.
- name: Create release
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const fs = require('fs');
const path = require('path');

const { data: release } = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: `cmd/cigocacher/${{ github.sha }}`,
name: `cigocacher-${{ github.sha }}`,
draft: false,
prerelease: true,
target_commitish: `${{ github.sha }}`
});

const files = fs.readdirSync('.').filter(f => f.endsWith('.tar.gz'));

for (const file of files) {
await github.rest.repos.uploadReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.id,
name: file,
data: fs.readFileSync(file)
});
console.log(`Uploaded ${file}`);
}
10 changes: 5 additions & 5 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,17 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

# Install a more recent Go that understands modern go.mod content.
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: go.mod

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
uses: github/codeql-action/init@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
Expand All @@ -66,7 +66,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
uses: github/codeql-action/autobuild@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1

# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
Expand All @@ -80,4 +80,4 @@ jobs:
# make release

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
uses: github/codeql-action/analyze@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1
29 changes: 29 additions & 0 deletions .github/workflows/docker-base.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: "Validate Docker base image"
on:
workflow_dispatch:
pull_request:
paths:
- "Dockerfile.base"
- ".github/workflows/docker-base.yml"
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: "build and test"
run: |
set -e
IMG="test-base:$(head -c 8 /dev/urandom | xxd -p)"
docker build -t "$IMG" -f Dockerfile.base .

iptables_version=$(docker run --rm "$IMG" iptables --version)
if [[ "$iptables_version" != *"(legacy)"* ]]; then
echo "ERROR: Docker base image should contain legacy iptables; found ${iptables_version}"
exit 1
fi

ip6tables_version=$(docker run --rm "$IMG" ip6tables --version)
if [[ "$ip6tables_version" != *"(legacy)"* ]]; then
echo "ERROR: Docker base image should contain legacy ip6tables; found ${ip6tables_version}"
exit 1
fi
4 changes: 1 addition & 3 deletions .github/workflows/docker-file-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@ on:
branches:
- main
pull_request:
branches:
- "*"
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: "Build Docker image"
run: docker build .
6 changes: 3 additions & 3 deletions .github/workflows/flakehub-publish-tagged.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ jobs:
id-token: "write"
contents: "read"
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: "${{ (inputs.tag != null) && format('refs/tags/{0}', inputs.tag) || '' }}"
- uses: "DeterminateSystems/nix-installer-action@main"
- uses: "DeterminateSystems/flakehub-push@main"
- uses: DeterminateSystems/nix-installer-action@c5a866b6ab867e88becbed4467b93592bce69f8a # v21
- uses: DeterminateSystems/flakehub-push@71f57208810a5d299fc6545350981de98fdbc860 # v6
with:
visibility: "public"
tag: "${{ inputs.tag }}"
20 changes: 14 additions & 6 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ name: golangci-lint
on:
# For now, only lint pull requests, not the main branches.
pull_request:

paths:
- ".github/workflows/golangci-lint.yml"
- "**.go"
- "go.mod"
- "go.sum"
# TODO(andrew): enable for main branch after an initial waiting period.
#push:
# branches:
Expand All @@ -23,17 +27,21 @@ jobs:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: go.mod
cache: false
cache: true

- name: golangci-lint
uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0
uses: golangci/golangci-lint-action@b7bcab6379029e905e3f389a6bf301f1bc220662 # head as of 2026-03-04
with:
version: v2.0.2
version: v2.10.1

# Show only new issues if it's a pull request.
only-new-issues: true

# Loading packages with a cold cache takes a while:
args: --timeout=10m

4 changes: 2 additions & 2 deletions .github/workflows/govulncheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:

steps:
- name: Check out code into the Go module directory
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install govulncheck
run: ./tool/go install golang.org/x/vuln/cmd/govulncheck@latest
Expand All @@ -24,7 +24,7 @@ jobs:

- name: Post to slack
if: failure() && github.event_name == 'schedule'
uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 # v2.1.0
uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1
with:
method: chat.postMessage
token: ${{ secrets.GOVULNCHECK_BOT_TOKEN }}
Expand Down
22 changes: 17 additions & 5 deletions .github/workflows/installer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ on:
- scripts/installer.sh
- .github/workflows/installer.yml
pull_request:
branches:
- "*"
paths:
- scripts/installer.sh
- .github/workflows/installer.yml
Expand Down Expand Up @@ -60,6 +58,14 @@ jobs:
# Check a few images with wget rather than curl.
- { image: "debian:oldstable-slim", deps: "wget" }
- { image: "debian:sid-slim", deps: "wget" }
- { image: "debian:stable-slim", deps: "curl" }
- { image: "ubuntu:24.04", deps: "curl" }
- { image: "fedora:latest", deps: "curl" }
# Test TAILSCALE_VERSION pinning on a subset of distros.
# Skip Alpine as community repos don't reliably keep old versions.
- { image: "debian:stable-slim", deps: "curl", version: "1.80.0" }
- { image: "ubuntu:24.04", deps: "curl", version: "1.80.0" }
- { image: "fedora:latest", deps: "curl", version: "1.80.0" }
runs-on: ubuntu-latest
container:
image: ${{ matrix.image }}
Expand Down Expand Up @@ -93,22 +99,28 @@ jobs:
contains(matrix.image, 'parrotsec') ||
contains(matrix.image, 'kalilinux')
- name: checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: run installer
run: scripts/installer.sh
env:
TAILSCALE_VERSION: ${{ matrix.version }}
# Package installation can fail in docker because systemd is not running
# as PID 1, so ignore errors at this step. The real check is the
# `tailscale --version` command below.
continue-on-error: true
- name: check tailscale version
run: tailscale --version
run: |
tailscale --version
if [ -n "${{ matrix.version }}" ]; then
tailscale --version | grep -q "^${{ matrix.version }}" || { echo "Version mismatch!"; exit 1; }
fi
notify-slack:
needs: test
runs-on: ubuntu-latest
steps:
- name: Notify Slack of failure on scheduled runs
if: failure() && github.event_name == 'schedule'
uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 # v2.1.0
uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1
with:
webhook: ${{ secrets.SLACK_WEBHOOK_URL }}
webhook-type: incoming-webhook
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/kubemanifests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
runs-on: [ ubuntu-latest ]
steps:
- name: Check out code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Build and lint Helm chart
run: |
eval `./tool/go run ./cmd/mkversion`
Expand Down
Loading