mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 10:18:54 +00:00
5e21d077273cb2b754ef5feef4c1068bf972bbad
6847 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
5e21d07727 |
build(deps): bump windows-service from 0.7.0 to 0.8.0 in /rust (#8558)
Bumps [windows-service](https://github.com/mullvad/windows-service-rs) from 0.7.0 to 0.8.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/mullvad/windows-service-rs/blob/main/CHANGELOG.md">windows-service's changelog</a>.</em></p> <blockquote> <h2>[0.8.0] - 2025-02-19</h2> <h3>Added</h3> <ul> <li>Add missing ServiceAccess flags <code>READ_CONTROL</code>, <code>WRITE_DAC</code> and <code>WRITE_OWNER</code>.</li> </ul> <h3>Changed</h3> <ul> <li>Upgrade <code>windows-sys</code> dependency to 0.59 and bump the MSRV to 1.60.0.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
936f5ddb01 |
chore(billing): Enable automatic tax calculation by default (#8552)
When a customer signs up for Starter or Team, we don't enable tax calculation by default. This means customers can upgrade to Team, start paying invoices, and we won't collect taxes. This creates a management issue and possible tax liability since I need to manually reconcile these. Instead, since we have Stripe Tax configured on our account, we can enable automatic tax calculation when the subscription is created. Any products (Starter/Team/Enterprise) therefore in the subscription will automatically collect tax appropriately. In most cases in the US, the tax rate is 0. In EU transactions, for B2B sales, the tax rate for us is also 0 (reverse charge basis). If we sell a Team subscription to an individual, however, we need to collect VAT. There doesn't seem to be a way to block consumer EU transactions in Stripe, so we'll likely need to register for VAT in the EU if we cross the reporting threshold. |
||
|
|
97cd371bc0 |
build(deps): bump docker/setup-buildx-action from 3.8.0 to 3.10.0 (#8564)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.8.0 to 3.10.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/docker/setup-buildx-action/releases">docker/setup-buildx-action's releases</a>.</em></p> <blockquote> <h2>v3.10.0</h2> <ul> <li>Bump <code>@docker/actions-toolkit</code> from 0.54.0 to 0.56.0 in <a href="https://redirect.github.com/docker/setup-buildx-action/pull/408">docker/setup-buildx-action#408</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/setup-buildx-action/compare/v3.9.0...v3.10.0">https://github.com/docker/setup-buildx-action/compare/v3.9.0...v3.10.0</a></p> <h2>v3.9.0</h2> <ul> <li>Bump <code>@docker/actions-toolkit</code> from 0.48.0 to 0.54.0 in <a href="https://redirect.github.com/docker/setup-buildx-action/pull/402">docker/setup-buildx-action#402</a> <a href="https://redirect.github.com/docker/setup-buildx-action/pull/404">docker/setup-buildx-action#404</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/setup-buildx-action/compare/v3.8.0...v3.9.0">https://github.com/docker/setup-buildx-action/compare/v3.8.0...v3.9.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
47287f8054 |
build(deps): bump actions/upload-artifact from 4.6.1 to 4.6.2 (#8563)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.1 to 4.6.2. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/upload-artifact/releases">actions/upload-artifact's releases</a>.</em></p> <blockquote> <h2>v4.6.2</h2> <h2>What's Changed</h2> <ul> <li>Update to use artifact 2.3.2 package & prepare for new upload-artifact release by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/upload-artifact/pull/685">actions/upload-artifact#685</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> made their first contribution in <a href="https://redirect.github.com/actions/upload-artifact/pull/685">actions/upload-artifact#685</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/upload-artifact/compare/v4...v4.6.2">https://github.com/actions/upload-artifact/compare/v4...v4.6.2</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
6dd3d9ddb2 |
build(deps): bump docker/login-action from 3.3.0 to 3.4.0 (#8562)
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.3.0 to 3.4.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/docker/login-action/releases">docker/login-action's releases</a>.</em></p> <blockquote> <h2>v3.4.0</h2> <ul> <li>Bump <code>@actions/core</code> from 1.10.1 to 1.11.1 in <a href="https://redirect.github.com/docker/login-action/pull/791">docker/login-action#791</a></li> <li>Bump <code>@aws-sdk/client-ecr</code> to 3.766.0 in <a href="https://redirect.github.com/docker/login-action/pull/789">docker/login-action#789</a> <a href="https://redirect.github.com/docker/login-action/pull/856">docker/login-action#856</a></li> <li>Bump <code>@aws-sdk/client-ecr-public</code> to 3.758.0 in <a href="https://redirect.github.com/docker/login-action/pull/789">docker/login-action#789</a> <a href="https://redirect.github.com/docker/login-action/pull/856">docker/login-action#856</a></li> <li>Bump <code>@docker/actions-toolkit</code> from 0.35.0 to 0.57.0 in <a href="https://redirect.github.com/docker/login-action/pull/801">docker/login-action#801</a> <a href="https://redirect.github.com/docker/login-action/pull/806">docker/login-action#806</a> <a href="https://redirect.github.com/docker/login-action/pull/858">docker/login-action#858</a></li> <li>Bump cross-spawn from 7.0.3 to 7.0.6 in <a href="https://redirect.github.com/docker/login-action/pull/814">docker/login-action#814</a></li> <li>Bump https-proxy-agent from 7.0.5 to 7.0.6 in <a href="https://redirect.github.com/docker/login-action/pull/823">docker/login-action#823</a></li> <li>Bump path-to-regexp from 6.2.2 to 6.3.0 in <a href="https://redirect.github.com/docker/login-action/pull/777">docker/login-action#777</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/login-action/compare/v3.3.0...v3.4.0">https://github.com/docker/login-action/compare/v3.3.0...v3.4.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
27ad078abd |
build(deps): bump dorny/test-reporter from 1.9.1 to 2.0.0 (#8560)
Bumps [dorny/test-reporter](https://github.com/dorny/test-reporter) from 1.9.1 to 2.0.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/dorny/test-reporter/releases">dorny/test-reporter's releases</a>.</em></p> <blockquote> <h2>v2.0.0</h2> <h2>What's Changed</h2> <ul> <li>Merge v1.7.0 to v1 branche by <a href="https://github.com/j-catania"><code>@j-catania</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/298">dorny/test-reporter#298</a></li> <li>Bump development to <code>v2.0.0-preview</code> by <a href="https://github.com/jozefizso"><code>@jozefizso</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/449">dorny/test-reporter#449</a></li> <li>Update checkout and upload-artifact actions versions by <a href="https://github.com/Akaame"><code>@Akaame</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/419">dorny/test-reporter#419</a></li> <li>README.md: Update GitHub Actions by <a href="https://github.com/cclauss"><code>@cclauss</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/404">dorny/test-reporter#404</a></li> <li>Update project to Node 20 runtime by <a href="https://github.com/jozefizso"><code>@jozefizso</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/450">dorny/test-reporter#450</a></li> <li>Add support for NUnit v3 XML results files by <a href="https://github.com/kring"><code>@kring</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/225">dorny/test-reporter#225</a></li> <li>Fix JUnit message / type fields. by <a href="https://github.com/AnthonyBarbier"><code>@AnthonyBarbier</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/399">dorny/test-reporter#399</a></li> <li>Update mocha-json usage instructions by <a href="https://github.com/MonkeyDo"><code>@MonkeyDo</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/145">dorny/test-reporter#145</a></li> <li>Clarify .NET support is dotnet test command support by <a href="https://github.com/anatawa12"><code>@anatawa12</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/232">dorny/test-reporter#232</a></li> <li>Target node20 by <a href="https://github.com/jozefizso"><code>@jozefizso</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/489">dorny/test-reporter#489</a></li> <li>Support displaying test results in markdown using GitHub Actions Job Summaries by <a href="https://github.com/ritchxu"><code>@ritchxu</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/463">dorny/test-reporter#463</a></li> <li>Support displaying test results in markdown using GitHub Actions Job Summaries by <a href="https://github.com/ritchxu"><code>@ritchxu</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/383">dorny/test-reporter#383</a></li> <li>Fix parsing of ESLint reports in jest-junit format by <a href="https://github.com/phjardas"><code>@phjardas</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/134">dorny/test-reporter#134</a></li> <li>Change docs for mocha-json by <a href="https://github.com/chdanielmueller"><code>@chdanielmueller</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/517">dorny/test-reporter#517</a></li> <li>Remove unused development dependency <code>@types/github-slugger</code> by <a href="https://github.com/jozefizso"><code>@jozefizso</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/524">dorny/test-reporter#524</a></li> <li>Merge <code>v1</code> branch to <code>main</code> by <a href="https://github.com/jozefizso"><code>@jozefizso</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/525">dorny/test-reporter#525</a></li> <li>Update bug_report.md by <a href="https://github.com/j-catania"><code>@j-catania</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/553">dorny/test-reporter#553</a></li> <li>Update feature.md by <a href="https://github.com/j-catania"><code>@j-catania</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/554">dorny/test-reporter#554</a></li> <li>feat: parse junit report with message by <a href="https://github.com/cmonaghan1"><code>@cmonaghan1</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/559">dorny/test-reporter#559</a></li> <li>Update dependencies by <a href="https://github.com/jozefizso"><code>@jozefizso</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/560">dorny/test-reporter#560</a></li> <li>test-reporter release v2.0.0 by <a href="https://github.com/jozefizso"><code>@jozefizso</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/561">dorny/test-reporter#561</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/Akaame"><code>@Akaame</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/test-reporter/pull/419">dorny/test-reporter#419</a></li> <li><a href="https://github.com/cclauss"><code>@cclauss</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/test-reporter/pull/404">dorny/test-reporter#404</a></li> <li><a href="https://github.com/kring"><code>@kring</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/test-reporter/pull/225">dorny/test-reporter#225</a></li> <li><a href="https://github.com/AnthonyBarbier"><code>@AnthonyBarbier</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/test-reporter/pull/399">dorny/test-reporter#399</a></li> <li><a href="https://github.com/MonkeyDo"><code>@MonkeyDo</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/test-reporter/pull/145">dorny/test-reporter#145</a></li> <li><a href="https://github.com/anatawa12"><code>@anatawa12</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/test-reporter/pull/232">dorny/test-reporter#232</a></li> <li><a href="https://github.com/ritchxu"><code>@ritchxu</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/test-reporter/pull/463">dorny/test-reporter#463</a></li> <li><a href="https://github.com/phjardas"><code>@phjardas</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/test-reporter/pull/134">dorny/test-reporter#134</a></li> <li><a href="https://github.com/chdanielmueller"><code>@chdanielmueller</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/test-reporter/pull/517">dorny/test-reporter#517</a></li> <li><a href="https://github.com/cmonaghan1"><code>@cmonaghan1</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/test-reporter/pull/559">dorny/test-reporter#559</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/dorny/test-reporter/compare/v1.9.1...v2.0.0">https://github.com/dorny/test-reporter/compare/v1.9.1...v2.0.0</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/dorny/test-reporter/blob/main/CHANGELOG.md">dorny/test-reporter's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <h2>2.0.0</h2> <ul> <li>Parse JUnit report with detailed message in failure <a href="https://redirect.github.com/dorny/test-reporter/pull/559">dorny/test-reporter#559</a></li> <li>Support displaying test results in markdown using GitHub Actions Job Summaries <a href="https://redirect.github.com/dorny/test-reporter/pull/383">dorny/test-reporter#383</a></li> </ul> <h2>1.9.1</h2> <ul> <li>Fix problematic retransmission of authentication token <a href="https://redirect.github.com/dorny/test-reporter/pull/438">dorny/test-reporter#438</a></li> <li>Report correct number of tests in Dart <a href="https://redirect.github.com/dorny/test-reporter/pull/426">dorny/test-reporter#426</a></li> <li>Number of completed tests mismatches passed/failed <a href="https://redirect.github.com/dorny/test-reporter/issues/319">dorny/test-reporter#319</a></li> </ul> <h2>1.9.0</h2> <ul> <li>Add support for Rspec (Ruby) <a href="https://redirect.github.com/dorny/test-reporter/pull/398">dorny/test-reporter#398</a></li> </ul> <h2>1.8.0</h2> <ul> <li>Add <code>SwiftXunitParser</code> class based on <code>JavaJunitParser</code> for <code>swift-xunit</code> reporter <a href="https://redirect.github.com/dorny/test-reporter/pull/317">dorny/test-reporter#317</a></li> <li>Use NodeJS 18 LTS as default runtime <a href="https://redirect.github.com/dorny/test-reporter/pull/332">dorny/test-reporter#332</a></li> <li>Escape <code><></code> characters in suite name <a href="https://redirect.github.com/dorny/test-reporter/pull/236">dorny/test-reporter#236</a></li> <li>Update actions runtime to Node20 <a href="https://redirect.github.com/dorny/test-reporter/pull/315">dorny/test-reporter#315</a></li> <li>Update check title and remove icon <a href="https://redirect.github.com/dorny/test-reporter/pull/144">dorny/test-reporter#144</a></li> </ul> <h2>1.7.0</h2> <ul> <li>Fix <a href="https://redirect.github.com/dorny/test-reporter/issues/199">#199</a>: Use ✅ instead of ✔️ for better cross platform look by <a href="https://github.com/petrdvorak"><code>@petrdvorak</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/200">dorny/test-reporter#200</a></li> <li>Verify content of dist/ folder matches build output by <a href="https://github.com/dorny"><code>@dorny</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/207">dorny/test-reporter#207</a></li> <li>Gracefully handle empty nested testsuite elements for JUnit. by <a href="https://github.com/rvdlaarschot"><code>@rvdlaarschot</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/193">dorny/test-reporter#193</a></li> <li>Gracefully handle empty failure tags by <a href="https://github.com/haudren-woven"><code>@haudren-woven</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/213">dorny/test-reporter#213</a></li> <li>Fix <a href="https://redirect.github.com/dorny/test-reporter/issues/208">#208</a> - java-junit: show annotations on PR changed files by <a href="https://github.com/atsu85"><code>@atsu85</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/209">dorny/test-reporter#209</a></li> <li>Only report failure if fail-on-error is set by <a href="https://github.com/trond-snekvik"><code>@trond-snekvik</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/214">dorny/test-reporter#214</a></li> <li>Improve clarity on configuring for forkable repos by <a href="https://github.com/abelbraaksma"><code>@abelbraaksma</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/211">dorny/test-reporter#211</a></li> <li>Suppress "Processing test results from" log by <a href="https://github.com/vasanthdharmaraj"><code>@vasanthdharmaraj</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/179">dorny/test-reporter#179</a></li> <li>Skip listing of files if error parsing is disabled by <a href="https://github.com/dorny"><code>@dorny</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/216">dorny/test-reporter#216</a></li> <li>Correct typo in docs by <a href="https://github.com/tangowithfoxtrot"><code>@tangowithfoxtrot</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/254">dorny/test-reporter#254</a></li> <li>update dependencies by <a href="https://github.com/j-catania"><code>@j-catania</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/269">dorny/test-reporter#269</a></li> <li>Add permissions to example yml files by <a href="https://github.com/TurnrDev"><code>@TurnrDev</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/263">dorny/test-reporter#263</a></li> <li>add feature fail-on-empty by <a href="https://github.com/gdams"><code>@gdams</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/243">dorny/test-reporter#243</a></li> <li>Add dependabot configuration by <a href="https://github.com/yeikel"><code>@yeikel</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/228">dorny/test-reporter#228</a></li> <li>Bump ws from 7.3.1 to 7.5.9 in /reports/jest by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/265">dorny/test-reporter#265</a></li> <li>Bump actions/checkout from 2 to 4 by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/279">dorny/test-reporter#279</a></li> <li>Add new output for url url html by <a href="https://github.com/luisito666"><code>@luisito666</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/242">dorny/test-reporter#242</a></li> <li>Update README.md by <a href="https://github.com/IanMoroney"><code>@IanMoroney</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/158">dorny/test-reporter#158</a></li> <li>Update jest-Junit part of Readme by <a href="https://github.com/ryancasburn-KAI"><code>@ryancasburn-KAI</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/176">dorny/test-reporter#176</a></li> <li>fix: default-valued fields are not mandatory by <a href="https://github.com/TomerFi"><code>@TomerFi</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/172">dorny/test-reporter#172</a></li> <li>Bump ansi-regex from 4.1.0 to 4.1.1 in /reports/jest by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/278">dorny/test-reporter#278</a></li> <li>Bump decode-uri-component from 0.2.0 to 0.2.2 in /reports/jest by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/276">dorny/test-reporter#276</a></li> <li>Bump minimist from 1.2.5 to 1.2.8 in /reports/jest by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/275">dorny/test-reporter#275</a></li> <li>Bump qs from 6.5.2 to 6.5.3 in /reports/jest by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/272">dorny/test-reporter#272</a></li> <li>Bump json5 from 2.1.3 to 2.2.3 in /reports/jest by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/271">dorny/test-reporter#271</a></li> <li>Bump ansi-regex from 3.0.0 to 3.0.1 in /reports/mocha by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/270">dorny/test-reporter#270</a></li> <li>declare 'url' and 'url_html' as action outputs by <a href="https://github.com/micha-one"><code>@micha-one</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/287">dorny/test-reporter#287</a></li> <li>Avoid split on undefined by <a href="https://github.com/cazou"><code>@cazou</code></a> in <a href="https://redirect.github.com/dorny/test-reporter/pull/258">dorny/test-reporter#258</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
a4851ee76f |
feat(relay): implement the reverse IPv4 eBPF code path (#8544)
This PR implements the "reverse path" of handling TURN traffic, i.e. UDP datagrams that arrive on an allocation port and need to be wrapped in a channel-data message to be sent to the TURN client. In order to achieve that, I had to rewrite most of the TURN code to not use the `etherparse` crate. I couldn't quite figure out the details but the eBPF verifier rejected my code in mysterious ways that I didn't understand. Commenting out random code-paths seemed to make it happy but all code-paths combined caused an error. Eventually, I decided that we simply have to use less abstractions to implement the same logic. All the "parsing" code is now using types inspired by `network-types`. The only modification here is that we use byte-arrays within our structs in order to directly receive them in big-endian ordering. `network-types` uses `u16`s and `u32`s which get interpreted as little-endian on x86. Instead of converting around between the endianness, constructing those values where we want them using the right endianness is deemed much simpler. I opened an issue with upstream which - if accepted - will allow us to remove our own structs and instead depend on upstream again. I also had to aggressively add `#[inline(always)]` to several functions, otherwise the compiler would not optimise away our function calls, causing the linker and / or eBPF verifier to fail. This PR also fixes numerous bugs that I've found in the already existing eBPF code. The number of bugs makes me question how this has been working so far at all! - We did not swap the Ethernet source and destination MAC address when re-routing the packet. The integration-test didn't catch this because it only operates on the loopback interface. Further testing on staging should allow us to confirm that this is indeed working now. - The UDP checksum update did not incorporate the new src and dst port. The integration-test didnt' catch that because it has UDP checksumming disabled. We need to have that disabled in the test because UDP checksumming is typically offloaded to the NIC and packets on the loopback interface never leave the device. Related: https://github.com/vadorovsky/network-types/issues/32. Related: #7518 |
||
|
|
ae157bce12 |
fix(relay): turn regression tests back on (#8541)
As part of iterating on #8496, the API of `relay::Server` had changed and I had commented out the regression tests to move quicker. In later iterations, those API changes were reverted but I forgot to uncomment them. |
||
|
|
2dbfae9ba9 |
fix(portal): Use old policy for broadcasting events when updated (#8550)
A regression was introduced in
|
||
|
|
463e70f3a4 |
chore(infra): Bump elixir VM image to COS 117 (#8547)
The relay was bumped here for the updated kernel. Would be good to stay standardized. |
||
|
|
5d038697d6 |
feat(infra): Use GVNIC and set queue_count=2 for elixir app (#8546)
This aligns with the relay app and is safe for all machine types. See https://cloud.google.com/compute/docs/networking/using-gvnic |
||
|
|
8a8d314038 |
build(rust): use upstream version of aya-build (#8545)
The PR we have been waiting on got merged. |
||
|
|
afa6814ab4 |
chore(relay): ignore eBPF integration test (#8543)
This needs elevated privileges to run. Our current pattern for these is to set them as ignored. In CI, we run all tests, including the ignored ones. |
||
|
|
e231ba9407 |
fix(relay): update aya-build dependency to latest version (#8540)
As part of working on https://github.com/aya-rs/aya/pull/1228, which I am depending on in here I had to force-push which will break CI. Opening this to fix it. |
||
|
|
1c4d3f44c1 |
fix(infra): Use 2 for default relay queue_count (#8542)
It seems that this cannot be higher than the number of vCPUs in the instance. ``` Instance 'relay-7h8s' creation failed: Invalid value for field 'resource.networkInterfaces[0].queueCount': '4'. Networking queue number is invalid: '4'. (when acting as '85623168602@cloudservices.gserviceaccount.com') ``` |
||
|
|
0110bdf7a7 |
fix(infra/relay): Set active queue count to half of max (#8539)
The `gve` driver defaults to setting the active queue count equal to the max queue count. We need this to be half or lower for XDP eBPF programs to load. Related: #8538 |
||
|
|
b1cdc3b03d |
feat(relay): Bump RX/TX queue count to 2 (#8538)
By default, GCP VMs have a max RX/TX queue count of `1`. While this is a fine default, it causes XDP programs to fail to load onto the virtual NIC with the following error: ``` gve 0000:00:04.0 eth0: XDP load failed: The number of configured RX queues 1 should be equal to the number of configured TX queues 1 and the number of configured RX/TX queues should be less than or equal to half the maximum number of RX/TX queues 1 ``` To fix this, we can bump the maximum queue count to `2` (the max support by gVNIC is 16), allowing the current queue count of `1` to satisfy the condition. |
||
|
|
6edfa7ba7f |
feat(infra): Use gVNIC for relay network interface driver (#8537)
This is supposed to offer much better performance and networking features in GCP. I would bet it supports XDP as well, unlike the default VIRTIO_NET driver. See: https://cloud.google.com/compute/docs/networking/using-gvnic Related: https://github.com/firezone/firezone/issues/7518#issuecomment-2762357354 |
||
|
|
cf13e41e01 |
fix(gateway/docker): Handle missing gateway_id (#8534)
If the volume was not mapped correctly, or the install command was modified, it's possible this file could be missing, which would fail the upgrade script. This gracefully handles that edge case. See https://firezonehq.slack.com/archives/C069H865MHP/p1743128008276809 |
||
|
|
34c5b6475f |
chore(infra): bump COS version for relays to cos-117-lts (#8533)
The 117 version uses Linux 6.6 whereas 113 only uses Linux 6.1. By using a newer kernel, we can hopefully get eBPF to work on Google Cloud. https://cloud.google.com/container-optimized-os/docs/release-notes/m113 https://cloud.google.com/container-optimized-os/docs/release-notes/m117 |
||
|
|
7f4bfc938c | docs: Update outdated docs regarding record types (#8532) | ||
|
|
54274ebdc5 | chore: add terraform to the nix config (#8531) | ||
|
|
1066d53d51 |
fix(infra): move privileged field to security-context (#8530)
Related: #8529 Related: #8496 |
||
|
|
b618eb31e8 |
feat(infra): Make relay containers privileged (#8529)
This is needed to load eBPF programs. Related: #8496 |
||
|
|
3c7ac084c0 |
feat(relay): MVP for routing channel data message in eBPF kernel (#8496)
## Abstract This pull-request implements the first stage of off-loading routing of TURN data channel messages to the kernel via an eBPF XDP program. In particular, the eBPF kernel implemented here **only** handles the decapsulation of IPv4 data channel messages into their embedded UDP payload. Implementation of other data paths, such as the receiving of UDP traffic on an allocation and wrapping it in a TURN channel data message is deferred to a later point for reasons explained further down. As it stands, this PR implements the bare minimum for us to start experimenting and benefiting from eBPF. It is already massive as it is due to the infrastructure required for actually doing this. Let's dive into it! ## A refresher on TURN channel-data messages TURN specifies a channel-data message for relaying data between two peers. A channel data message has a fixed 4-byte header: - The first two bytes specify the channel number - The second two bytes specify the length of the encapsulated payload Like all TURN traffic, channel data messages run over UDP by default, meaning this header sits at the very front of the UDP payload. This will be important later. After making an allocation with a TURN server (i.e. reserving a port on the TURN server's interfaces), a TURN client can bind channels on that allocation. As such, channel numbers are scoped to a client's allocation. Channel numbers are allocated by the client within a given range (0x4000 - 0x4FFF). When binding a channel, the client specifies the remote's peer address that they'd like the data sent on the channel to be sent to. Given this setup, when a TURN server receives a channel data message, it first looks at the sender's IP + port to infer the allocation (a client can only ever have 1 allocation at a time). Within that allocation, the server then looks for the channel number and retrieves the target socket address from that. The allocation itself is a port on the relay's interface. With that, we can now "unpack" the payload of the channel data message and rewrite it to the new receiver: - The new source IP can be set from the old dst IP (when operating in user-space mode this is irrelevant because we are working with the socket API). - The new source port is the client's allocation. - The new destination IP is retrieved from the mapping retrieved via the channel number. - The new destination port is retrieved from the mapping retrieved via the channel number. Last but not least, all that is left is removing the channel data header from the UDP payload and we can send out the packet. In other words, we need to cut off the first 4 bytes of the UDP payload. ## User-space relaying At present, we implement the above flow in user-space. This is tricky to do because we need to bind _many_ sockets, one for each possible allocation port (of which there can be 16383). The actual work to be done on these packets is also extremely minimal. All we do is cut off (or add on) the data-channel header. Benchmarks show that we spend pretty much all of our time copying data between user-space and kernel-space. Cutting this out should give us a massive increase in performance. ## Implementing an eBPF XDP TURN router eBPF has been shown to be a very efficient way of speeding up a TURN server [0]. After many failed experiments (e.g. using TC instead of XDP) and countless rabbit-holes, we have also arrived at the design documented within the paper. Most notably: - The eBPF program is entirely optional. We try to load it on startup, but if that fails, we will simply use the user-space mode. - Retaining the user-space mode is also important because under certain circumstances, the eBPF kernel needs to pass on the packet, for example, when receiving IPv4 packets with options. Those make the header dynamically-sized which makes further processing difficult because the eBPF verifier disallows indexing into the packet with data derived from the packet itself. - In order to add/remove the channel-data header, we shift the packet headers backwards / forwards and leave the payload in place as the packet headers are constant in size and can thus easily and cheaply be copied out. In order to perform the relaying flow explained above, we introduce maps that are shared with user-space. These maps go from a tuple of (client-socket, channel-number) to a tuple of (allocation-port, peer-socket) and thus give us all the data necessary to rewrite the packet. ## Integration with our relay Last but not least, to actually integrate the eBPF kernel with our relay, we need to extend the `Server` with two more events so we can learn, when channel bindings are created and when they expire. Using these events, we can then update the eBPF maps accordingly and therefore influence the routing behaviour in the kernel. ## Scope What is implemented here is only one of several possible data paths. Implementing the others isn't conceptually difficult but it does increase the scope. Landing something that already works allows us to gain experience running it in staging (and possibly production). Additionally, I've hit some issues with the eBPF verifier when adding more codepaths to the kernel. I expect those to be possible to resolve given sufficient debugging but I'd like to do so after merging this. --- Depends-On: #8506 Depends-On: #8507 Depends-On: #8500 Resolves: #8501 [0]: https://dl.acm.org/doi/pdf/10.1145/3609021.3609296 |
||
|
|
fb64c8b971 |
ci: correctly configure lychee checker to only run on website/ (#8527)
Unfortunately, the cwd I set for the action didn't seem to apply so it checked the links for the entire repo instead which - together with the `--base` setting, produces a lot of errors for relative links. In addition, lychee doesn't currently support having the `.lycheeignore` file in a subdirectory (see related link), meaning we unfortunately have to put yet another dot file in the root of our repository. Related: https://github.com/lycheeverse/lychee-action/issues/205 |
||
|
|
82a52ef497 |
feat: add edgeshark to local docker compose (#8526)
EdgeShark is extremely useful if you want to attach WireShark to a TUN device within a container. So far, I've just run this ad-hoc next to our setup whenever I needed to debug something but I think it is actually worthwhile adding permanently so it is just there when you need it. |
||
|
|
19c5bc530a |
feat(gateway): deprecate the NAT64 module (#8383)
At present, the Gateway implements a NAT64 conversion that can convert IPv4 packets to IPv6 and vice versa. Doing this efficiently creates a fair amount of complexity within our `ip-packet` crate. In addition, routing ICMP errors back through our NAT is also complicated by this because we may have to translate the packet embedded in the ICMP error as well. The NAT64 module was originally conceived as a result of the new stub resolver-based DNS architecture. When the Client resolves IPs for a domain, it doesn't know whether the domain will actually resolve to IPv4 AND IPv6 addresses so it simply assigns 4 of each to every domain. Thus, when receiving an IPv6 packet for such a DNS resource, the Gateway may only have IPv4 addresses available and can therefore not route the packet (unless it translates it). This problem is not novel. In fact, an IP being unroutable or a particular route disappearing happens all the time on the Internet. ICMP was conceived to handle this problem and it is doing a pretty good job at it. We can make use of that and simply return an ICMP unreachable error back to the client whenever it picks an IP that we cannot map to one that we resolved. In this PR, we leave all of the NAT64 code intact and only add a feature-flag that - when active - sends aforementioned ICMP error. While offline (and thus also for our tests), the feature-flag evaluates to false. It is however set to `true` in the backend, meaning on staging and later in production, we will send these ICMP errors. Once this is rolled out and indeed proving to be working as intended, we can simplify our codebase and rip out the NAT64 module. At that point, we will also have to adapt the test-suite. |
||
|
|
aa957be538 |
fix(connlib): only disable not-yet-disabled resources (#8525)
Didn't test this but I think the logic checks out (and our proptests should catch any bugs here). Fixes: #8523 |
||
|
|
f13234955a |
refactor(gui-client): simplify error handling (#8519)
As a follow-up from #7959, we can now simplify the error handling a fair bit as all codepaths that can fail in the client are threaded back to the main function. |
||
|
|
95d3f765f4 |
feat(portal): Show Internet Resource in resources/index (#8495)
After removing some of the functionality for viewing the Internet
Resource, customer was confused where to find it again.
This places an `Internet` section in the Resources index page (similar
to Sites page) with a short help text and an action button to view the
Internet Resource.
This also adds a convenient helper that allows us to route to
`/#{account}/resources/internet` for a nicer-looking URL that users can
bookmark if needed.
<img width="1423" alt="Screenshot 2025-03-19 at 11 52 31 PM"
src="https://github.com/user-attachments/assets/f2da1c31-92b2-429e-832f-73ddd0524155"
/>
Fixes #8479
|
||
|
|
58fe527b0e |
feat(connlib): mirror ECN bits on TUN device (#8511)
From the perspective of any application, Firezone is a layer-3 network and will thus use the host's networking stack to form IP packets for whichever application protocol is in use (UDP, TCP, etc). These packets then get encapsulated into UDP packets by Firezone and sent to a Gateway. As a result of this design, the IP header seen by the networking stacks of the Client and the receiving service are not visible to any intermediary along the network path of the Client and Gateway. In case this network path is congested and middleboxes such as routers need to drop packets, they will look at the ECN bits in the IP header (of the UDP packet generated by a Client or Gateway) and flip a bit in case the previous value indicated support for ECN (`0x01` or `0x10`). When received by a network stack that supports ECN, seeing `0x11` means that the network path is congested and that it must reduce its send/receive windows (or otherwise throttle the connection). At present, this doesn't work with Firezone because of the aforementioned encapsulation of IP packets. To support ECN, we need to therefore: - Copy ECN bits from a received IP packet to the datagram that encapsulates it: This ensures that if the Client's network stack support ECN, we mirror that support on the wire. - Copy ECN bits from a received datagram to the IP packet the is sent to the TUN device: This ensures that if the "Congestion Experienced" bit get set along the network path between Client and Gateway, we reflect that accordingly on the IP packet emitted by the TUN device. Resolves: #3758 --------- Signed-off-by: Thomas Eizinger <thomas@eizinger.io> Co-authored-by: Jamil Bou Kheir <jamilbk@users.noreply.github.com> |
||
|
|
41d89f4c12 |
fix(connlib): don't clear DnsResourceNatState::Pending (#8521)
When we receive a DNS query for a resource, we refresh the DNS resource
NAT on the Gateway by clearing the local state. This ensures that if any
of the DNS records have changed, those will be reflected in the new NAT
table on the Gateway.
I cannot fully confirm my theory but I have a hunch that under certain
circumstances, this would lead to loss of buffered packets which lead to
connections getting reset. I couldn't confirm that in my testing though.
The issues I experienced with github.com suddenly stopped
🙃
|
||
|
|
64e0f62b2c |
build(deps): bump next from 14.2.21 to 14.2.25 in /website in the npm_and_yarn group (#8513)
Bumps the npm_and_yarn group in /website with 1 update: [next](https://github.com/vercel/next.js). Updates `next` from 14.2.21 to 14.2.25 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vercel/next.js/releases">next's releases</a>.</em></p> <blockquote> <h2>v14.2.25</h2> <blockquote> <p>[!NOTE]<br /> This release is backporting bug fixes. It does <strong>not</strong> include all pending features/changes on canary. This release contains a security patch for <a href="https://github.com/vercel/next.js/security/advisories/GHSA-f82v-jwr5-mffw">CVE-2025-29927</a>.</p> </blockquote> <h3>Core Changes</h3> <ul> <li>Update middleware request header (<a href="https://redirect.github.com/vercel/next.js/issues/77202">#77202</a>)</li> </ul> <h3>Credits</h3> <p>Huge thanks to <a href="https://github.com/ijjk"><code>@ijjk</code></a> for helping!</p> <h2>v14.2.24</h2> <blockquote> <p>[!NOTE]<br /> This release is backporting bug fixes. It does <strong>not</strong> include all pending features/changes on canary.</p> </blockquote> <h3>Core Changes</h3> <ul> <li>fix: ensure lint worker errors aren't silenced (<a href="https://redirect.github.com/vercel/next.js/issues/75779">#75779</a>)</li> <li>add additional x-middleware-set-cookie filtering (<a href="https://redirect.github.com/vercel/next.js/issues/75561">#75561</a> & <a href="https://redirect.github.com/vercel/next.js/issues/73482">#73482</a>)</li> </ul> <h3>Credits</h3> <p>Huge thanks to <a href="https://github.com/ztanner"><code>@ztanner</code></a> for helping!</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
75da4806ea |
build(deps-dev): bump vite from 6.2.0 to 6.2.3 in /rust/gui-client in the npm_and_yarn group (#8517)
Bumps the npm_and_yarn group in /rust/gui-client with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). Updates `vite` from 6.2.0 to 6.2.3 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/releases">vite's releases</a>.</em></p> <blockquote> <h2>v6.2.3</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v6.2.2</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.2.2/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>create-vite@6.2.1</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/create-vite@6.2.1/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v6.2.1</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.2.1/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md">vite's changelog</a>.</em></p> <blockquote> <h2><!-- raw HTML omitted -->6.2.3 (2025-03-24)<!-- raw HTML omitted --></h2> <ul> <li>fix: fs raw query with query separators (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19702">#19702</a>) (<a href=" |
||
|
|
d1d0874699 |
refactor(rust): introduce etherparse-ext crate (#8500)
Within Firezone's Rust codebase, we use the `etherparse` crate extensively to parse network packets. To provide a more ergonomic API, this is all encapsulated in our `ip-packet` crate. For #7518, we need to write an eBPF kernel that parses and manipulates network packets. Etherparse itself doesn't provide any facilities to manipulate network packets. That is an open feature request: https://github.com/JulianSchmid/etherparse/issues/9. For the packet manipulation that we are doing in `connlib`, we already wrote certain extensions to the `etherparse` crate but today, those are all within the `ip-packet` crate. In order to reuse that within the eBPF kernel, we cannot just depend on `ip-packet` directly because eBPF is a no-std and no-alloc environment, thus no crate in the dependency tree is allowed to depend on Rust's std-lib. `etherparse` itself actually has an `std` feature flag that we can turn off. Introducing the same in `ip-packet` would require a lot of conditional-compilation gates using `#[cfg]`. it is much easier to just introduce a new crate that houses all our in-house extensions to `etherparse`. Eventually, we can hopefully upstream those which is another motivator to separate this out. |
||
|
|
c2cc8e09db |
ci: add new link checker workflow for website (#8516)
Turns out we have several broken links on our website currently. Broken links don't make a good impression so we should catch them as early as possible. Due to how our website is laid out, that isn't always possible to catch these dead links in CI. The next best thing we can do is run a cron-job in our CI that checks our sourcecode and makes sure all links (including relative ones) are reachable. --------- Signed-off-by: Thomas Eizinger <thomas@eizinger.io> |
||
|
|
cbea27cb57 |
fix(website): Update broken website links (#8518)
Updates broken links found as a result of https://github.com/firezone/firezone/pull/8516 |
||
|
|
9ab4507182 |
ci(rust): install nightly toolchain (#8507)
For #8501, we need to install a nightly toolchain in our CI system in order to compile to eBPF kernel. We already use a nightly toolchain for one of the static analysis tools. In this PR, we extend our `setup-rust` action to install the nightly toolchain for us which allows us to reuse that later. |
||
|
|
346f88008f |
chore(infra): Bump environments to deploy gateways on staging (#8486)
See firezone/environments#6 |
||
|
|
a9864e5bd0 |
refactor(rust): tell Tauri to use our existing runtime (#8514)
Tauri needs a tokio runtime in order to spawn tasks. If we don't supply one, it will start its own runtime. Given that we already start a runtime, this is unnecessary. |
||
|
|
3e8eb12e16 |
ci(rust): cross-compile without cross (#8506)
For #7518, we need an additional toolchain (nightly) to compile the relay and installing that within `cross` is quite complicated. Our cross-compiling needs are actually quite simple to satisfy. All we need is to download the corresponding musl toolchain and set some environment variables. The rest is handled by cargo. |
||
|
|
58086bf1e4 | docs(website): fix broken links to terraform modules (#8515) | ||
|
|
bc1b788781 |
fix(rust): remove exceptions of duplicated dependencies (#8505)
These are no longer duplicates in our dependency tree. |
||
|
|
c31c2ef56d |
refactor(gui-client): gracefully exit Tauri app (#7959)
At present, the Windows and Linux GUI client launch the Tauri application via the `App::run` method. This function never returns again. Instead, whenever we request the Tauri app to exit, Tauri will internally call `std::process::exit`, thus preventing ordinary clean-up from happening. Whilst we somehow managed to work around this particular part, having the app exit the process internally also makes error handling and reporting to the user difficult as there are now two parts in the code where we need to handle errors: - Before we start up the Tauri app - Before we end the Tauri app (i.e. signal to it that we want to exit) It would be much easier to understand, if we could call into Tauri, let it do its thing and upon a requested exit by the user, the called function (i.e. `App::run`) simply returns again. After diving into the inner workings of Tauri, we have achieved just that by adding a new function to `App`: `App::run_return` (https://github.com/tauri-apps/tauri/pull/12668). Using `App::run_return` we can now orchestrate a `gui::run` function that simply returns after Tauri has shutdown. Most importantly, it will also exit upon any fatal errors that we encounter in the controller and thus unify the error handling path into a single one. These errors are now all handled at the call-site of `gui::run`. Building on top of this, we will be able to further simplify the error handling within the GUI client. I am hoping to gradually replace our monolithic `Error` enums with individual errors that we can extract from an `anyhow::Error`. This would make it easier to reason about where certain errors get generated and thus overall improve the UX of the application by displaying better error messages, not failing the entire app in certain cases, etc. |
||
|
|
edb9534f1f |
ci: remove unsupported type attribute (#8504)
Action inputs don't support specifying a type. See https://docs.github.com/en/actions/sharing-automations/creating-actions/metadata-syntax-for-github-actions#inputs. |
||
|
|
d4338883a6 |
build(deps): bump semver from 1.0.25 to 1.0.26 in /rust (#8509)
Bumps [semver](https://github.com/dtolnay/semver) from 1.0.25 to 1.0.26. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/dtolnay/semver/releases">semver's releases</a>.</em></p> <blockquote> <h2>1.0.26</h2> <ul> <li>Documentation improvements</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
9307e173f5 |
build(deps): bump uuid from 1.14.0 to 1.16.0 in /rust (#8510)
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.14.0 to 1.16.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/uuid-rs/uuid/releases">uuid's releases</a>.</em></p> <blockquote> <h2>v1.16.0</h2> <h2>What's Changed</h2> <ul> <li>Mark <code>Uuid::new_v8</code> const by <a href="https://github.com/tguichaoua"><code>@tguichaoua</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/815">uuid-rs/uuid#815</a></li> <li>Prepare for 1.16.0 release by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/817">uuid-rs/uuid#817</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/tguichaoua"><code>@tguichaoua</code></a> made their first contribution in <a href="https://redirect.github.com/uuid-rs/uuid/pull/815">uuid-rs/uuid#815</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/uuid-rs/uuid/compare/v1.15.1...v1.16.0">https://github.com/uuid-rs/uuid/compare/v1.15.1...v1.16.0</a></p> <h2>v1.15.1</h2> <h2>What's Changed</h2> <ul> <li>Guarantee v7 timestamp will never overflow by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/811">uuid-rs/uuid#811</a></li> <li>Prepare for 1.15.1 release by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/812">uuid-rs/uuid#812</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/uuid-rs/uuid/compare/v1.15.0...v1.15.1">https://github.com/uuid-rs/uuid/compare/v1.15.0...v1.15.1</a></p> <h2>v1.15.0</h2> <h2>What's Changed</h2> <ul> <li>Add a manual <code>Debug</code> implementation for NonNilUUid by <a href="https://github.com/rick-de-water"><code>@rick-de-water</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/808">uuid-rs/uuid#808</a></li> <li>Support higher precision, shiftable timestamps in V7 UUIDs by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/809">uuid-rs/uuid#809</a></li> <li>Prepare for 1.15.0 release by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/810">uuid-rs/uuid#810</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/rick-de-water"><code>@rick-de-water</code></a> made their first contribution in <a href="https://redirect.github.com/uuid-rs/uuid/pull/808">uuid-rs/uuid#808</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/uuid-rs/uuid/compare/v1.14.0...v1.15.0">https://github.com/uuid-rs/uuid/compare/v1.14.0...v1.15.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
effe169414 |
chore: release apple 1.4.8 (#8499)
Introduces the autoconnect and session end fixes. |
||
|
|
e0c373ef2b |
chore(infra): Move google gateway to dedicated module (#8489)
Removes the google gateway module in this repo because: - We already reference this module from our `environments` repo. - Customers are already using the dedicated module - Any actually pointing to the module in this repo will have issues because Terraform [automatically tries to clone submodules](https://github.com/hashicorp/terraform/issues/34917). |