Skip to content

feat(ci): Bump to upstream v1.80 #20

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 224 commits into from
Feb 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
224 commits
Select commit Hold shift + click to select a range
b37a478
go.mod: bump x/net and dependencies
raggi Dec 5, 2024
66aa774
cmd/gitops-pusher: default previousEtag to controlEtag (#14296)
awly Dec 5, 2024
a482dc0
logpolicy: cleanup options API and allow setting http.Client (#11503)
dsnet Dec 5, 2024
dc67287
health: fix TestHealthMetric to pass on release branch
bradfitz Dec 5, 2024
06a82f4
cmd,{get-authkey,tailscale}: remove unnecessary scope qualifier from …
oxtoacart Dec 4, 2024
f817860
VERSION.txt: this is v1.79.0
nickkhyl Dec 6, 2024
c276116
cmd/stunc: enforce read timeout deadline (#14309)
mikeodr Dec 6, 2024
06c5e83
hostinfo: fix testing in container (#14330)
tomhjp Dec 9, 2024
24b243c
derp: add env var setting server send queue depth (#14334)
mikeodr Dec 10, 2024
ea3d0bc
prober,derp/derphttp: make dev-mode DERP probes work without TLS (#14…
mpminardi Dec 10, 2024
fa28b02
.github: Bump actions/cache from 4.1.2 to 4.2.0 (#14331)
dependabot[bot] Dec 10, 2024
d54cd59
.github: Bump github/codeql-action from 3.27.1 to 3.27.6 (#14332)
dependabot[bot] Dec 10, 2024
8b1d011
cmd/containerboot: guard kubeClient against nil dereference (#14357)
neersighted Dec 11, 2024
0cc071f
cmd/containerboot: don't attempt to write kube Secret in non-kube env…
irbekrm Dec 11, 2024
fa655e6
cmd/containerboot: add more tests, check that egress service config o…
irbekrm Dec 11, 2024
f1ccdcc
cmd/k8s-operator,k8s-operator: operator integration tests (#12792)
tomhjp Dec 11, 2024
6e552f6
cmd/containerboot: don't attempt to patch a Secret field without perm…
irbekrm Dec 11, 2024
0045860
types/iox: add function types for Reader and Writer (#14366)
dsnet Dec 11, 2024
c9188d7
types/bools: add IfElse (#14272)
dsnet Dec 11, 2024
716cb37
util/dnsname: use vizerror for all errors
sailorfrag Dec 12, 2024
73128e2
ssh/tailssh: remove unused public key support
bradfitz Dec 12, 2024
aa04f61
net/netcheck: adjust HTTPS latency check to connection time and avoid…
raggi Dec 5, 2024
1ed9bd7
prober: perform DERP bandwidth probes over TUN device to mimic real c…
oxtoacart Dec 10, 2024
cc168d9
cmd/k8s-operator: fix ProxyGroup hostname (#14336)
irbekrm Dec 16, 2024
5883ca7
types/opt: fix test to be agnostic to omitzero support (#14401)
dsnet Dec 16, 2024
0cc2a8d
go.toolchain.rev: bump Go toolchain
bradfitz Dec 16, 2024
2506b81
prober: fix WithBandwidthProbing behavior with optional tunAddress
bradfitz Dec 16, 2024
b62a013
Switch logging service from log.tailscale.io to log.tailscale.com (#1…
dsnet Dec 16, 2024
b3d4ffe
docs/k8s: add some high-level operator architecture diagrams (#13915)
tomhjp Dec 17, 2024
ff5b4ba
syncs: add MutexValue (#14422)
dsnet Dec 19, 2024
6ae0287
cmd/systray: add account switcher
awly Dec 10, 2024
00a4504
cmd/derpprobe,prober: add ability to perform continuous queuing delay…
oxtoacart Dec 17, 2024
2d4edd8
cmd/systray: add extra padding around notification icon
willnorris Dec 19, 2024
e8f1721
syncs: add ShardedInt expvar.Var type
raggi Dec 17, 2024
89adcd8
cmd/systray: improve profile menu
willnorris Dec 19, 2024
3adad36
cmd/k8s-operator,k8s-operator: include top-level CRD descriptions (#1…
tomhjp Dec 20, 2024
5095efd
prober: make histogram buckets cumulative
oxtoacart Dec 20, 2024
256da8d
cmd/systray: remove new menu delay on KDE
willnorris Dec 20, 2024
8874723
tailcfg: rename and retype ServiceHost capability (#14380)
tendstofortytwo Dec 20, 2024
cb59943
cmd/systray: add exit nodes menu
willnorris Dec 20, 2024
10d4057
cmd/systray: add visual workarounds for gnome, mac, and windows
willnorris Dec 21, 2024
8d4ea4d
wgengine/router: add ip rules for unifi udm-pro
jasonwbarnett Jan 12, 2024
c4f9f95
scripts/installer.sh: add support for PikaOS (#14461)
Erisa Dec 23, 2024
4267d0f
.github: update matrix of installer.sh tests (#14462)
Erisa Dec 23, 2024
9e2819b
util/stringsx: add package for extra string functions, like CompareFold
bradfitz Dec 23, 2024
76ca1ad
scripts/installer.sh: accept different capitalisation of deepin (#14463)
Erisa Dec 23, 2024
3837b6c
cmd/systray: rebuild menu on pref change, assorted other fixes
willnorris Dec 21, 2024
72b2789
scripts/installer.sh: allow CachyOS for Arch packages (#14464)
Erisa Dec 23, 2024
68b12a7
metrics,syncs: add ShardedInt support to metrics.LabelMap
raggi Dec 20, 2024
2bdbe5b
cmd/systray: add icons for exit node online and offline
willnorris Dec 23, 2024
86f273d
cmd/systray: set app icon and title consistently
willnorris Dec 23, 2024
5a4148e
cmd/systray: update state management and initialization
willnorris Dec 26, 2024
c43c5ca
cmd/systray: properly set tooltip on different platforms
willnorris Dec 27, 2024
30d3e7b
scripts/install.sh: add special case for Parrot Security (#14487)
Erisa Dec 30, 2024
ff09560
all: add means to set device posture attributes from node
bradfitz Nov 20, 2024
03b9361
ipn: update reference to Notify's Swift definition
bradfitz Jan 3, 2025
e3bcb2e
ipn/ipnlocal: use context.CancelFunc type for doc clarity
bradfitz Jan 3, 2025
17b8815
wgengine/router: refactor udm-pro into broader ubnt support
jasonwbarnett Dec 22, 2024
1e2e319
util/slicesx: add MapKeys and MapValues from golang.org/x/exp/maps
bradfitz Jan 3, 2025
402fc9d
control/controlclient: remove optimization that was more convoluted t…
bradfitz Jan 3, 2025
ad8d8e3
go.mod: update github.com/go-json-experiment/json (#14522)
dsnet Jan 4, 2025
47bd072
all: use iterators in more places instead of Range funcs
bradfitz Jan 4, 2025
4b56bf9
types/views: remove various Map Range funcs; use iterators everywhere
bradfitz Jan 4, 2025
2b8f02b
ipn: convert ServeConfig Range methods to iterators
bradfitz Jan 4, 2025
60930d1
Update README to reference correct Commit Style URL
Dec 29, 2024
36ea792
Fix various linting, vet & static check issues
Dec 28, 2024
2fb361a
ipn: declare NotifyWatchOpt consts without using iota
bradfitz Jan 4, 2025
f13b2bc
tailcfg: flesh out docs
bradfitz Jan 6, 2025
5da772c
cmd/tailscale/cli: fix TestUpdatePrefs on macOS
bradfitz Jan 6, 2025
b907076
tailcfg: remove unused User fields
bradfitz Jan 6, 2025
07aae18
ipn/ipnlocal, util/goroutines: track goroutines for tests, shutdown
bradfitz Jan 3, 2025
041622c
ipn/ipnlocal: move where auto exit node selection happens
bradfitz Jan 3, 2025
82e99fc
client/systray: move cmd/systray to client/systray
willnorris Jan 7, 2025
b36984c
cmd/systray: add cmd/systray back as a small client/systray wrapper
willnorris Jan 7, 2025
cc4aa43
go.mod: bump github.com/tailscale/peercred for Solaris
bradfitz Jan 7, 2025
6e45a83
cmd/derper: improve logging on derp mesh connect
raggi Jan 6, 2025
f4f57b8
wgengine/magicsock: rebind on EPIPE/ECONNRESET
raggi Jan 6, 2025
6db220b
controlclient: do not set HTTPS port for any private coordination ser…
agottardo Jan 7, 2025
2c07f5d
wgengine/magicsock: refactor maybeRebindOnError
raggi Jan 6, 2025
220dc56
go.mod: bump tailscale/wireguard-go for Solaris/Illumos
bradfitz Jan 7, 2025
de9d4b2
net/netmon: remove extra panic guard around ParseRIB
raggi Dec 5, 2024
60daa2a
all: fix golangci-lint errors
willnorris Jan 7, 2025
009da8a
ipn/ipnlocal: connect serve config to c2n endpoint
KevinLiang10 Jan 6, 2025
8d4ca13
cmd/k8s-operator,k8s-operator: support ingress ProxyGroup type (#14548)
irbekrm Jan 8, 2025
c81a95d
prober: clone histogram buckets before handing to Prometheus for derp…
oxtoacart Jan 8, 2025
8d6b996
ipn/ipnlocal: add client metric gauge for number of IPNBus connections
bradfitz Jan 8, 2025
1d4fd2f
hostinfo: improve accuracy of Linux desktop detection heuristic
bradfitz Jan 8, 2025
9f17260
types/views: add MapViewsEqual and MapViewsEqualFunc
andrew-d Jan 8, 2025
fa52035
client/systray: record that systray is running
willnorris Jan 8, 2025
0b4ba40
client/web: properly show "Log In" for web client on fresh install (#…
mpminardi Jan 8, 2025
d8579a4
go.mod: bump go-git to v5.13.1 (#14584)
awly Jan 8, 2025
68997e0
cmd/k8s-operator,k8s-operator: allow users to set custom labels for t…
irbekrm Jan 9, 2025
a51672c
prober: record total bytes transferred in DERP bandwidth probes
oxtoacart Jan 8, 2025
7fa07f3
types/views: add SliceEqualAnyOrderFunc
andrew-d Jan 9, 2025
6ddeae7
types/views: optimize SliceEqualAnyOrderFunc for small slices
andrew-d Jan 9, 2025
9373a1b
all: illumos/solaris userspace only support
nshalman Apr 23, 2023
fc8b6d9
ipn/conf.go: add VIPServices to tailscaled configfile (#14345)
irbekrm Jan 10, 2025
48a95c4
cmd/containerboot,cmd/k8s-operator: reload tailscaled config (#14342)
irbekrm Jan 10, 2025
77017ba
cmd/containerboot: load containerboot serve config that does not cont…
irbekrm Jan 10, 2025
a841f9d
go.mod: bump some deps
bradfitz Jan 10, 2025
cd795d8
prober: support filtering regions by region ID in addition to code
oxtoacart Jan 10, 2025
2af2557
ipn/ipnlocal: add VIPServices hash to return body of vip-services c2n…
KevinLiang10 Jan 9, 2025
5fdb4f8
Dockerfile: bump base alpine image (#14604)
awly Jan 11, 2025
69b9074
util/uniq,types/lazy,*: delete code that's now in Go std
bradfitz Jan 13, 2025
60d19fa
all: use Go 1.21's binary.NativeEndian
bradfitz Jan 13, 2025
377127c
Revert "Dockerfile: bump base alpine image (#14604)" (#14620)
awly Jan 13, 2025
6ccde36
prober: record total bytes transferred in DERP bandwidth probes
oxtoacart Jan 9, 2025
64ab0dd
cmd/tailscale/cli: only exit silently if len(args) == 0
stapelberg Jan 12, 2025
e4385f1
cmd/tailscale/cli: add --posture-checking to tailscale up
knyar Jan 14, 2025
da9965d
cmd/viewer,types/views,various: avoid allocations in pointer field ge…
nickkhyl Jan 8, 2025
414a011
go.mod: bump mdlayher/netlink and u-root/uio to use Go 1.21 NativeEndian
bradfitz Jan 14, 2025
cfda1ff
cmd/viewer,all: consistently use "read-only" instead of "readonly"
bradfitz Jan 14, 2025
66269dc
ipn/ipnlocal: allow Peer API access via either V4MasqAddr or V6MasqAd…
nickkhyl Jan 14, 2025
2fc4455
all: add Node.HomeDERP int, phase out "127.3.3.40:$region" hack [capv…
bradfitz Jan 14, 2025
2747798
control/controlclient: remove misleading TS_DEBUG_NETMAP, make it TS_…
bradfitz Jan 14, 2025
d818a58
net/dns: ensure the Windows configurator does not touch the hosts fil…
dblohm7 Jan 13, 2025
d0ba91b
ipn/ipnserver: use ipnauth.Actor instead of *ipnserver.actor whenever…
nickkhyl Jan 11, 2025
c3c4c96
ipn/{ipnauth,ipnlocal,ipnserver}, client/tailscale: make ipnserver.Se…
nickkhyl Jan 13, 2025
f33f5f9
ipn/{ipnlocal,ipnserver}: remove redundant (*LocalBackend).ResetForCl…
nickkhyl Jan 13, 2025
6fac290
ipn/ipnserver: fix race condition where LocalBackend is reset after a…
nickkhyl Jan 14, 2025
2ac1898
client/tailscale: fix typo in comment
nickkhyl Jan 14, 2025
6364b5f
net/netmon: trim IPv6 endpoints in already routable subnets
raggi Jan 10, 2025
7ecb69e
tailcfg,control/controlclient: treat nil AllowedIPs as Addresses [cap…
bradfitz Jan 14, 2025
db05e83
cmd/derper: support explicit configuration of mesh dial hosts
oxtoacart Jan 7, 2025
beb951c
.github: Bump actions/setup-go from 5.1.0 to 5.2.0 (#14391)
dependabot[bot] Jan 15, 2025
3431ab1
.github: Bump github/codeql-action from 3.27.6 to 3.28.1 (#14618)
dependabot[bot] Jan 15, 2025
fcf9026
atomicfile: use ReplaceFile on Windows so that attributes and ACLs ar…
dblohm7 Jan 13, 2025
1b303ee
ipn/ipnlocal: re-advertise appc routes on startup (#14609)
awly Jan 15, 2025
f023c86
types/lazy: fix flaky TestDeferAfterDo
nickkhyl Jan 15, 2025
d8b00e3
cmd/tailscaled: add some more depchecker dep tests
bradfitz Jan 15, 2025
62fb857
ipn/ipnserver: fix TestConcurrentOSUserSwitchingOnWindows
nickkhyl Jan 15, 2025
0481042
ipn/ipnserver: fix a deadlock in (*Server).blockWhileIdentityInUse
nickkhyl Jan 15, 2025
84b0379
prober: remove per-packet DERP pub key copying overheads (#14658)
jwhited Jan 15, 2025
00bd906
prober: remove DERP pub key copying overheads in qd and non-tun measu…
jwhited Jan 16, 2025
2d1f6f1
cmd/k8s-operator: require namespace config (#14648)
tomhjp Jan 16, 2025
7d73a38
net/dns: only populate OSConfig.Hosts when MagicDNS is enabled
dblohm7 Jan 10, 2025
de5683f
derp: change packets_dropped metric to also have reason and kind labe…
mpminardi Jan 16, 2025
d912a49
net/tstun: add logging to aid developers missing Start calls
bradfitz Jan 17, 2025
97a44d6
go.{mod,sum},cmd/{k8s-operator,derper,stund}/depaware.txt: bump kube …
irbekrm Jan 17, 2025
c79b736
ipnlocal: allow overriding os.Hostname() via syspolicy (#14676)
agottardo Jan 17, 2025
6c30840
ipn: [serve] warn that foreground funnel won't work if shields are up…
irbekrm Jan 19, 2025
6e3c746
derp: add bytes dropped metric (#14698)
mikeodr Jan 20, 2025
174af76
.github: Bump actions/upload-artifact from 4.4.3 to 4.6.0 (#14697)
dependabot[bot] Jan 20, 2025
33e62a3
.github: Bump peter-evans/create-pull-request from 7.0.5 to 7.0.6 (#1…
dependabot[bot] Jan 20, 2025
682c06a
.github: Bump golangci/golangci-lint-action from 6.1.0 to 6.2.0 (#14696)
dependabot[bot] Jan 20, 2025
70c7b0d
build(deps): bump nanoid from 3.3.4 to 3.3.8 in /cmd/tsconnect (#14352)
dependabot[bot] Jan 20, 2025
69a985f
ipn/ipnlocal,tailcfg: communicate to control whether funnel is enable…
irbekrm Jan 21, 2025
817ba1c
cmd/{k8s-operator,containerboot},kube/kubetypes: parse Ingresses for …
irbekrm Jan 21, 2025
bcc2622
build(deps): bump braces from 3.0.2 to 3.0.3 in /cmd/tsconnect (#12468)
dependabot[bot] Jan 21, 2025
51adaec
Revert "ipn/ipnlocal: re-advertise appc routes on startup (#14609)"
bradfitz Jan 21, 2025
7f3c193
tsnet: fix panic on race between listener.Close and incoming packet
bradfitz Jan 21, 2025
2729942
prober: fix nil pointer access in tcp-in-tcp probes
oxtoacart Jan 19, 2025
b50d320
tsnet: block in Server.Dial until backend is Running
bradfitz Jan 21, 2025
8b9d5fd
go.mod: bump github.com/inetaf/tcpproxy
raggi Jan 21, 2025
e12b2a7
cmd/tailscale/cli: clean up how optional commands get registered
bradfitz Jan 21, 2025
150cd30
ipn/ipnlocal: also use LetsEncrypt-baked-in roots for cert validation
bradfitz Jan 21, 2025
042ed6b
net/bakedroots: add LetsEncrypt ISRG Root X2
bradfitz Jan 22, 2025
cb3b1a1
tsweb: add missing debug pprof endpoints
bradfitz Jan 22, 2025
8c8750f
ipn/ipnlocal: Support TCP and Web VIP services
KevinLiang10 Jan 20, 2025
ccd1643
add copyright header
KevinLiang10 Jan 21, 2025
0a57051
add blank line
KevinLiang10 Jan 21, 2025
550923d
fix handler related and some nit
KevinLiang10 Jan 22, 2025
e477914
delete extra struct in tailcfg
KevinLiang10 Jan 22, 2025
17022ad
tailcfg: remove now-unused TailscaleFunnelEnabled method
bradfitz Jan 22, 2025
8b65598
util/slicesx: add AppendNonzero
bradfitz Jan 22, 2025
d1b3785
.github: Bump slackapi/slack-github-action from 1.27.0 to 2.0.0 (#14141)
dependabot[bot] Jan 22, 2025
0fa7b4a
tailcfg: add ServiceName
sailorfrag Jan 21, 2025
3dabea0
cmd/tailscale: define CLI tools to manipulate macOS network and syste…
agottardo Jan 23, 2025
3fb8a1f
ipn/ipnlocal: re-advertise appc routes on startup, take 2 (#14740)
awly Jan 23, 2025
1562a6f
feature/*: make Wake-on-LAN conditional, start supporting modular fea…
bradfitz Jan 22, 2025
3033a96
cmd/k8s-operator: fix reconciler name clash (#14712)
tomhjp Jan 23, 2025
a00623e
derp,wgengine/magicsock: remove unexpected label (#14711)
mikeodr Jan 23, 2025
f1710f4
appc,ipn/ipnlocal: log DNS parsing errors in app connectors (#14607)
awly Jan 23, 2025
d6abbc2
net/tstun: move TAP support out to separate package feature/tap
bradfitz Jan 23, 2025
413fb5b
control/controlclient: delete unreferenced mapSession UserProfiles
bradfitz Jan 23, 2025
f0db473
cmd/tailscaled,util/syspolicy/source,util/winutil/gp: disallow acquir…
nickkhyl Jan 16, 2025
61bea75
cmd/tailscale: fix, test some recent doc inconsistencies
bradfitz Jan 24, 2025
3a39f08
util/usermetric: add more drop labels
kradalby Dec 20, 2024
5756bc1
wgengine/filter: return drop reason for metrics
kradalby Dec 20, 2024
f39ee8e
net/tstun: add back outgoing drop metric
kradalby Dec 20, 2024
f0b63d0
wgengine/filter: add check for unknown proto
kradalby Jan 8, 2025
5e9056a
derp: move Conn interface to derp.go
oxtoacart Jan 23, 2025
450bc9a
cmd/derper,derp: make TCP write timeout configurable
oxtoacart Jan 23, 2025
05afa31
util/clientmetric: use counter in aggcounter
kradalby Jan 24, 2025
d69c70e
tailcfg: adjust ServiceName.Validate to use vizerror
sailorfrag Jan 23, 2025
69bc164
ipn/ipnlocal: include DNS SAN in cert CSR (#14764)
tomhjp Jan 24, 2025
716e4fc
client/web: remove advanced options from web client login (#14770)
mpminardi Jan 24, 2025
cbf1a9a
go.{mod,sum}: update web-client-prebuilt (#14772)
mpminardi Jan 25, 2025
1a7274f
control/controlclient: skip SetControlClientStatus when queue has new…
bradfitz Jan 24, 2025
ca39c4e
cmd/natc,wgengine/netstack: tune buffer size and segment lifetime in …
raggi Jan 24, 2025
2089f4b
ipn/ipnlocal: add debug envknob for ACME directory URL (#14771)
tomhjp Jan 25, 2025
82e41dd
cmd/natc: expose netstack metrics in client metrics in natc
raggi Jan 24, 2025
2c98c44
control/controlclient: sanitize invalid DERPMap nil Region from control
bradfitz Jan 23, 2025
68a66ee
feature/capture: move packet capture to feature/*, out of iOS + CLI
bradfitz Jan 24, 2025
66b2e9f
envknob/featureknob: allow use of exit node on unraid (#14754)
dkaser Jan 26, 2025
e701fde
control/controlknobs: make Knobs.AsDebugJSON automatic, not require m…
bradfitz Jan 26, 2025
04029b8
tstest/deptest: verify that tailscale.com BadDeps actually exist
bradfitz Jan 26, 2025
8c92589
go.mod: bump depaware, add --internal flag to stop hiding internal pa…
bradfitz Jan 26, 2025
bce05ec
control/controlclient,tempfork/httprec: don't link httptest, test cer…
bradfitz Jan 26, 2025
3fec806
.github: Bump actions/setup-go from 5.2.0 to 5.3.0 (#14793)
dependabot[bot] Jan 27, 2025
76dc028
.github: Bump github/codeql-action from 3.28.1 to 3.28.5 (#14794)
dependabot[bot] Jan 27, 2025
bfde807
health: do Warnable dependency filtering in tailscaled
bradfitz Jan 27, 2025
bd9725c
health: relax no-derp-home warnable to not fire if not in map poll
bradfitz Jan 27, 2025
2691b9f
tempfork/acme: add new package for x/crypto package acme fork, move
bradfitz Jan 27, 2025
ba1f9a3
types/persist: remove Persist.LegacyFrontendPrivateMachineKey
bradfitz Jan 25, 2025
079973d
tempfork/acme: fix TestSyncedToUpstream with Windows line endings
bradfitz Jan 27, 2025
6f10fe8
cmd/tailscale: add warning to help text of `--force-reauth` (#14778)
yejingchen Jan 28, 2025
3abfbf5
tsnet: return from Accept when the listener gets closed
knyar Jan 28, 2025
46fd4e5
ssh,tempfork/gliderlabs/ssh: replace github.com/tailscale/golang-x-cr…
oxtoacart Jan 27, 2025
f1514a9
go.toolchain.rev: bump from Go 1.23.3 to 1.23.5 (#14814)
mpminardi Jan 28, 2025
0aa5415
.github: Bump actions/checkout from 3.6.0 to 4.2.2 (#14139)
dependabot[bot] Jan 28, 2025
eb29930
types/views: fix SliceEqualAnyOrderFunc short optimization
andrew-d Jan 24, 2025
b406f20
cmd/{k8s-operator,containerboot},kube: ensure egress ProxyGroup proxi…
irbekrm Jan 29, 2025
52f88f7
cmd/k8s-operator: don't set deprecated configfile hash on new proxies…
irbekrm Jan 29, 2025
b60f6b8
Revert "ssh,tempfork/gliderlabs/ssh: replace github.com/tailscale/gol…
oxtoacart Jan 29, 2025
8bd04bd
go.mod: bump gorilla/csrf for security fix (#14822)
bradfitz Jan 29, 2025
3f39211
cmd/k8s-operator: check that cluster traffic is routed to egress Prox…
irbekrm Jan 30, 2025
ed8bb3b
control/controlclient: add missing word in comment
bradfitz Jan 30, 2025
0ed4aa0
control/controlclient: flesh out a recently added comment
bradfitz Jan 30, 2025
a49af98
cmd/k8s-operator: temporarily disable HA Ingress controller (#14833)
irbekrm Jan 30, 2025
c2af1cd
prober: support multiple probes running concurrently
knyar Jan 29, 2025
138a83e
cmd/containerboot: wait for consistent state on shutdown (#14263)
tomhjp Jan 30, 2025
649a71f
VERSION.txt: this is v1.80.0 (#14837)
agottardo Jan 30, 2025
bcc4a6a
Merge branch 'release-branch/1.80' into cpierre/coreweave-1.80
ChandonPierre Feb 5, 2025
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
  •  
  •  
  •  
5 changes: 2 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ lint: ## Run golangci-lint
updatedeps: ## Update depaware deps
# depaware (via x/tools/go/packages) shells back to "go", so make sure the "go"
# it finds in its $$PATH is the right one.
PATH="$$(./tool/go env GOROOT)/bin:$$PATH" ./tool/go run github.com/tailscale/depaware --update \
PATH="$$(./tool/go env GOROOT)/bin:$$PATH" ./tool/go run github.com/tailscale/depaware --update --internal \
tailscale.com/cmd/tailscaled \
tailscale.com/cmd/tailscale \
tailscale.com/cmd/derper \
Expand All @@ -27,7 +27,7 @@ updatedeps: ## Update depaware deps
depaware: ## Run depaware checks
# depaware (via x/tools/go/packages) shells back to "go", so make sure the "go"
# it finds in its $$PATH is the right one.
PATH="$$(./tool/go env GOROOT)/bin:$$PATH" ./tool/go run github.com/tailscale/depaware --check \
PATH="$$(./tool/go env GOROOT)/bin:$$PATH" ./tool/go run github.com/tailscale/depaware --check --internal \
tailscale.com/cmd/tailscaled \
tailscale.com/cmd/tailscale \
tailscale.com/cmd/derper \
Expand Down Expand Up @@ -116,7 +116,6 @@ sshintegrationtest: ## Run the SSH integration tests in various Docker container
GOOS=linux GOARCH=amd64 ./tool/go build -o ssh/tailssh/testcontainers/tailscaled ./cmd/tailscaled && \
echo "Testing on ubuntu:focal" && docker build --build-arg="BASE=ubuntu:focal" -t ssh-ubuntu-focal ssh/tailssh/testcontainers && \
echo "Testing on ubuntu:jammy" && docker build --build-arg="BASE=ubuntu:jammy" -t ssh-ubuntu-jammy ssh/tailssh/testcontainers && \
echo "Testing on ubuntu:mantic" && docker build --build-arg="BASE=ubuntu:mantic" -t ssh-ubuntu-mantic ssh/tailssh/testcontainers && \
echo "Testing on ubuntu:noble" && docker build --build-arg="BASE=ubuntu:noble" -t ssh-ubuntu-noble ssh/tailssh/testcontainers && \
echo "Testing on alpine:latest" && docker build --build-arg="BASE=alpine:latest" -t ssh-alpine-latest ssh/tailssh/testcontainers

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ Origin](https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin)
`Signed-off-by` lines in commits.

See `git log` for our commit message style. It's basically the same as
[Go's style](https://github.com/golang/go/wiki/CommitMessage).
[Go's style](https://go.dev/wiki/CommitMessage).

## About Us

Expand Down
2 changes: 1 addition & 1 deletion VERSION.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.78.3
1.80.0
28 changes: 14 additions & 14 deletions appc/appconnector.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import (
"sync"
"time"

xmaps "golang.org/x/exp/maps"
"golang.org/x/net/dns/dnsmessage"
"tailscale.com/types/logger"
"tailscale.com/types/views"
Expand Down Expand Up @@ -291,11 +290,11 @@ func (e *AppConnector) updateDomains(domains []string) {
}
}
if err := e.routeAdvertiser.UnadvertiseRoute(toRemove...); err != nil {
e.logf("failed to unadvertise routes on domain removal: %v: %v: %v", xmaps.Keys(oldDomains), toRemove, err)
e.logf("failed to unadvertise routes on domain removal: %v: %v: %v", slicesx.MapKeys(oldDomains), toRemove, err)
}
}

e.logf("handling domains: %v and wildcards: %v", xmaps.Keys(e.domains), e.wildcards)
e.logf("handling domains: %v and wildcards: %v", slicesx.MapKeys(e.domains), e.wildcards)
}

// updateRoutes merges the supplied routes into the currently configured routes. The routes supplied
Expand Down Expand Up @@ -354,7 +353,7 @@ func (e *AppConnector) Domains() views.Slice[string] {
e.mu.Lock()
defer e.mu.Unlock()

return views.SliceOf(xmaps.Keys(e.domains))
return views.SliceOf(slicesx.MapKeys(e.domains))
}

// DomainRoutes returns a map of domains to resolved IP
Expand All @@ -375,13 +374,13 @@ func (e *AppConnector) DomainRoutes() map[string][]netip.Addr {
// response is being returned over the PeerAPI. The response is parsed and
// matched against the configured domains, if matched the routeAdvertiser is
// advised to advertise the discovered route.
func (e *AppConnector) ObserveDNSResponse(res []byte) {
func (e *AppConnector) ObserveDNSResponse(res []byte) error {
var p dnsmessage.Parser
if _, err := p.Start(res); err != nil {
return
return err
}
if err := p.SkipAllQuestions(); err != nil {
return
return err
}

// cnameChain tracks a chain of CNAMEs for a given query in order to reverse
Expand All @@ -400,12 +399,12 @@ func (e *AppConnector) ObserveDNSResponse(res []byte) {
break
}
if err != nil {
return
return err
}

if h.Class != dnsmessage.ClassINET {
if err := p.SkipAnswer(); err != nil {
return
return err
}
continue
}
Expand All @@ -414,7 +413,7 @@ func (e *AppConnector) ObserveDNSResponse(res []byte) {
case dnsmessage.TypeCNAME, dnsmessage.TypeA, dnsmessage.TypeAAAA:
default:
if err := p.SkipAnswer(); err != nil {
return
return err
}
continue

Expand All @@ -428,7 +427,7 @@ func (e *AppConnector) ObserveDNSResponse(res []byte) {
if h.Type == dnsmessage.TypeCNAME {
res, err := p.CNAMEResource()
if err != nil {
return
return err
}
cname := strings.TrimSuffix(strings.ToLower(res.CNAME.String()), ".")
if len(cname) == 0 {
Expand All @@ -442,20 +441,20 @@ func (e *AppConnector) ObserveDNSResponse(res []byte) {
case dnsmessage.TypeA:
r, err := p.AResource()
if err != nil {
return
return err
}
addr := netip.AddrFrom4(r.A)
mak.Set(&addressRecords, domain, append(addressRecords[domain], addr))
case dnsmessage.TypeAAAA:
r, err := p.AAAAResource()
if err != nil {
return
return err
}
addr := netip.AddrFrom16(r.AAAA)
mak.Set(&addressRecords, domain, append(addressRecords[domain], addr))
default:
if err := p.SkipAnswer(); err != nil {
return
return err
}
continue
}
Expand Down Expand Up @@ -486,6 +485,7 @@ func (e *AppConnector) ObserveDNSResponse(res []byte) {
e.scheduleAdvertisement(domain, toAdvertise...)
}
}
return nil
}

// starting from the given domain that resolved to an address, find it, or any
Expand Down
76 changes: 55 additions & 21 deletions appc/appconnector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ import (
"testing"
"time"

xmaps "golang.org/x/exp/maps"
"golang.org/x/net/dns/dnsmessage"
"tailscale.com/appc/appctest"
"tailscale.com/tstest"
"tailscale.com/util/clientmetric"
"tailscale.com/util/mak"
"tailscale.com/util/must"
"tailscale.com/util/slicesx"
)

func fakeStoreRoutes(*RouteInfo) error { return nil }
Expand Down Expand Up @@ -50,7 +50,7 @@ func TestUpdateDomains(t *testing.T) {
// domains are explicitly downcased on set.
a.UpdateDomains([]string{"UP.EXAMPLE.COM"})
a.Wait(ctx)
if got, want := xmaps.Keys(a.domains), []string{"up.example.com"}; !slices.Equal(got, want) {
if got, want := slicesx.MapKeys(a.domains), []string{"up.example.com"}; !slices.Equal(got, want) {
t.Errorf("got %v; want %v", got, want)
}
}
Expand All @@ -69,15 +69,19 @@ func TestUpdateRoutes(t *testing.T) {
a.updateDomains([]string{"*.example.com"})

// This route should be collapsed into the range
a.ObserveDNSResponse(dnsResponse("a.example.com.", "192.0.2.1"))
if err := a.ObserveDNSResponse(dnsResponse("a.example.com.", "192.0.2.1")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
a.Wait(ctx)

if !slices.Equal(rc.Routes(), []netip.Prefix{netip.MustParsePrefix("192.0.2.1/32")}) {
t.Fatalf("got %v, want %v", rc.Routes(), []netip.Prefix{netip.MustParsePrefix("192.0.2.1/32")})
}

// This route should not be collapsed or removed
a.ObserveDNSResponse(dnsResponse("b.example.com.", "192.0.0.1"))
if err := a.ObserveDNSResponse(dnsResponse("b.example.com.", "192.0.0.1")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
a.Wait(ctx)

routes := []netip.Prefix{netip.MustParsePrefix("192.0.2.0/24"), netip.MustParsePrefix("192.0.0.1/32")}
Expand Down Expand Up @@ -130,7 +134,9 @@ func TestDomainRoutes(t *testing.T) {
a = NewAppConnector(t.Logf, rc, nil, nil)
}
a.updateDomains([]string{"example.com"})
a.ObserveDNSResponse(dnsResponse("example.com.", "192.0.0.8"))
if err := a.ObserveDNSResponse(dnsResponse("example.com.", "192.0.0.8")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
a.Wait(context.Background())

want := map[string][]netip.Addr{
Expand All @@ -155,15 +161,19 @@ func TestObserveDNSResponse(t *testing.T) {
}

// a has no domains configured, so it should not advertise any routes
a.ObserveDNSResponse(dnsResponse("example.com.", "192.0.0.8"))
if err := a.ObserveDNSResponse(dnsResponse("example.com.", "192.0.0.8")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
if got, want := rc.Routes(), ([]netip.Prefix)(nil); !slices.Equal(got, want) {
t.Errorf("got %v; want %v", got, want)
}

wantRoutes := []netip.Prefix{netip.MustParsePrefix("192.0.0.8/32")}

a.updateDomains([]string{"example.com"})
a.ObserveDNSResponse(dnsResponse("example.com.", "192.0.0.8"))
if err := a.ObserveDNSResponse(dnsResponse("example.com.", "192.0.0.8")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
a.Wait(ctx)
if got, want := rc.Routes(), wantRoutes; !slices.Equal(got, want) {
t.Errorf("got %v; want %v", got, want)
Expand All @@ -172,7 +182,9 @@ func TestObserveDNSResponse(t *testing.T) {
// a CNAME record chain should result in a route being added if the chain
// matches a routed domain.
a.updateDomains([]string{"www.example.com", "example.com"})
a.ObserveDNSResponse(dnsCNAMEResponse("192.0.0.9", "www.example.com.", "chain.example.com.", "example.com."))
if err := a.ObserveDNSResponse(dnsCNAMEResponse("192.0.0.9", "www.example.com.", "chain.example.com.", "example.com.")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
a.Wait(ctx)
wantRoutes = append(wantRoutes, netip.MustParsePrefix("192.0.0.9/32"))
if got, want := rc.Routes(), wantRoutes; !slices.Equal(got, want) {
Expand All @@ -181,7 +193,9 @@ func TestObserveDNSResponse(t *testing.T) {

// a CNAME record chain should result in a route being added if the chain
// even if only found in the middle of the chain
a.ObserveDNSResponse(dnsCNAMEResponse("192.0.0.10", "outside.example.org.", "www.example.com.", "example.org."))
if err := a.ObserveDNSResponse(dnsCNAMEResponse("192.0.0.10", "outside.example.org.", "www.example.com.", "example.org.")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
a.Wait(ctx)
wantRoutes = append(wantRoutes, netip.MustParsePrefix("192.0.0.10/32"))
if got, want := rc.Routes(), wantRoutes; !slices.Equal(got, want) {
Expand All @@ -190,14 +204,18 @@ func TestObserveDNSResponse(t *testing.T) {

wantRoutes = append(wantRoutes, netip.MustParsePrefix("2001:db8::1/128"))

a.ObserveDNSResponse(dnsResponse("example.com.", "2001:db8::1"))
if err := a.ObserveDNSResponse(dnsResponse("example.com.", "2001:db8::1")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
a.Wait(ctx)
if got, want := rc.Routes(), wantRoutes; !slices.Equal(got, want) {
t.Errorf("got %v; want %v", got, want)
}

// don't re-advertise routes that have already been advertised
a.ObserveDNSResponse(dnsResponse("example.com.", "2001:db8::1"))
if err := a.ObserveDNSResponse(dnsResponse("example.com.", "2001:db8::1")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
a.Wait(ctx)
if !slices.Equal(rc.Routes(), wantRoutes) {
t.Errorf("rc.Routes(): got %v; want %v", rc.Routes(), wantRoutes)
Expand All @@ -207,7 +225,9 @@ func TestObserveDNSResponse(t *testing.T) {
pfx := netip.MustParsePrefix("192.0.2.0/24")
a.updateRoutes([]netip.Prefix{pfx})
wantRoutes = append(wantRoutes, pfx)
a.ObserveDNSResponse(dnsResponse("example.com.", "192.0.2.1"))
if err := a.ObserveDNSResponse(dnsResponse("example.com.", "192.0.2.1")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
a.Wait(ctx)
if !slices.Equal(rc.Routes(), wantRoutes) {
t.Errorf("rc.Routes(): got %v; want %v", rc.Routes(), wantRoutes)
Expand All @@ -230,7 +250,9 @@ func TestWildcardDomains(t *testing.T) {
}

a.updateDomains([]string{"*.example.com"})
a.ObserveDNSResponse(dnsResponse("foo.example.com.", "192.0.0.8"))
if err := a.ObserveDNSResponse(dnsResponse("foo.example.com.", "192.0.0.8")); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
a.Wait(ctx)
if got, want := rc.Routes(), []netip.Prefix{netip.MustParsePrefix("192.0.0.8/32")}; !slices.Equal(got, want) {
t.Errorf("routes: got %v; want %v", got, want)
Expand Down Expand Up @@ -438,10 +460,16 @@ func TestUpdateDomainRouteRemoval(t *testing.T) {
// adding domains doesn't immediately cause any routes to be advertised
assertRoutes("update domains", []netip.Prefix{}, []netip.Prefix{})

a.ObserveDNSResponse(dnsResponse("a.example.com.", "1.2.3.1"))
a.ObserveDNSResponse(dnsResponse("a.example.com.", "1.2.3.2"))
a.ObserveDNSResponse(dnsResponse("b.example.com.", "1.2.3.3"))
a.ObserveDNSResponse(dnsResponse("b.example.com.", "1.2.3.4"))
for _, res := range [][]byte{
dnsResponse("a.example.com.", "1.2.3.1"),
dnsResponse("a.example.com.", "1.2.3.2"),
dnsResponse("b.example.com.", "1.2.3.3"),
dnsResponse("b.example.com.", "1.2.3.4"),
} {
if err := a.ObserveDNSResponse(res); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
}
a.Wait(ctx)
// observing dns responses causes routes to be advertised
assertRoutes("observed dns", prefixes("1.2.3.1/32", "1.2.3.2/32", "1.2.3.3/32", "1.2.3.4/32"), []netip.Prefix{})
Expand Down Expand Up @@ -487,10 +515,16 @@ func TestUpdateWildcardRouteRemoval(t *testing.T) {
// adding domains doesn't immediately cause any routes to be advertised
assertRoutes("update domains", []netip.Prefix{}, []netip.Prefix{})

a.ObserveDNSResponse(dnsResponse("a.example.com.", "1.2.3.1"))
a.ObserveDNSResponse(dnsResponse("a.example.com.", "1.2.3.2"))
a.ObserveDNSResponse(dnsResponse("1.b.example.com.", "1.2.3.3"))
a.ObserveDNSResponse(dnsResponse("2.b.example.com.", "1.2.3.4"))
for _, res := range [][]byte{
dnsResponse("a.example.com.", "1.2.3.1"),
dnsResponse("a.example.com.", "1.2.3.2"),
dnsResponse("1.b.example.com.", "1.2.3.3"),
dnsResponse("2.b.example.com.", "1.2.3.4"),
} {
if err := a.ObserveDNSResponse(res); err != nil {
t.Errorf("ObserveDNSResponse: %v", err)
}
}
a.Wait(ctx)
// observing dns responses causes routes to be advertised
assertRoutes("observed dns", prefixes("1.2.3.1/32", "1.2.3.2/32", "1.2.3.3/32", "1.2.3.4/32"), []netip.Prefix{})
Expand Down
7 changes: 4 additions & 3 deletions atomicfile/atomicfile.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ import (
)

// WriteFile writes data to filename+some suffix, then renames it into filename.
// The perm argument is ignored on Windows. If the target filename already
// exists but is not a regular file, WriteFile returns an error.
// The perm argument is ignored on Windows, but if the target filename already
// exists then the target file's attributes and ACLs are preserved. If the target
// filename already exists but is not a regular file, WriteFile returns an error.
func WriteFile(filename string, data []byte, perm os.FileMode) (err error) {
fi, err := os.Stat(filename)
if err == nil && !fi.Mode().IsRegular() {
Expand Down Expand Up @@ -47,5 +48,5 @@ func WriteFile(filename string, data []byte, perm os.FileMode) (err error) {
if err := f.Close(); err != nil {
return err
}
return os.Rename(tmpName, filename)
return rename(tmpName, filename)
}
14 changes: 14 additions & 0 deletions atomicfile/atomicfile_notwindows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause

//go:build !windows

package atomicfile

import (
"os"
)

func rename(srcFile, destFile string) error {
return os.Rename(srcFile, destFile)
}
Loading