Skip to content
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

fix: do better validation for existing tokens #7358

Merged
merged 1 commit into from Feb 14, 2024
Merged

Conversation

Zertsov
Copy link
Contributor

@Zertsov Zertsov commented Feb 12, 2024

Description

Found a path in which a token can be invalid but we claim it isn't. The user would have to run turbo logout and then login to get a new token.

Testing Instructions

  1. Login
  2. Go to Vercel account or whatever API issues tokens and delete the token (invalidate it)
  3. run turbo login again
  4. Ensure that login process proceeds as normal

Closes TURBO-2334

@Zertsov Zertsov requested a review from a team as a code owner February 12, 2024 21:54
Copy link

vercel bot commented Feb 12, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
examples-basic-web 🔄 Building (Inspect) Visit Preview 💬 Add feedback Feb 14, 2024 9:13pm
examples-designsystem-docs 🔄 Building (Inspect) Visit Preview 💬 Add feedback Feb 14, 2024 9:13pm
examples-nonmonorepo 🔄 Building (Inspect) Visit Preview 💬 Add feedback Feb 14, 2024 9:13pm
examples-vite-web 🔄 Building (Inspect) Visit Preview 💬 Add feedback Feb 14, 2024 9:13pm
rust-docs ❌ Failed (Inspect) Feb 14, 2024 9:13pm
6 Ignored Deployments
Name Status Preview Comments Updated (UTC)
examples-gatsby-web ⬜️ Ignored (Inspect) Visit Preview Feb 14, 2024 9:13pm
examples-kitchensink-blog ⬜️ Ignored (Inspect) Visit Preview Feb 14, 2024 9:13pm
examples-native-web ⬜️ Ignored (Inspect) Visit Preview Feb 14, 2024 9:13pm
examples-svelte-web ⬜️ Ignored (Inspect) Visit Preview Feb 14, 2024 9:13pm
examples-tailwind-web ⬜️ Ignored (Inspect) Visit Preview Feb 14, 2024 9:13pm
turbo-site ⬜️ Ignored (Inspect) Visit Preview Feb 14, 2024 9:13pm

Copy link
Contributor Author

Zertsov commented Feb 12, 2024

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @Zertsov and the rest of your teammates on Graphite Graphite

Copy link
Contributor

github-actions bot commented Feb 12, 2024

🟢 Turbopack Benchmark CI successful 🟢

Thanks

Copy link
Contributor

github-actions bot commented Feb 12, 2024

🟢 CI successful 🟢

Thanks

Copy link
Contributor

@chris-olszewski chris-olszewski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trying to login with a valid existing token gives a pretty cryptic error:
Screenshot 2024-02-12 at 4 32 58 PM

crates/turborepo-auth/src/lib.rs Outdated Show resolved Hide resolved
Comment on lines 421 to 423
.error_for_status()?;

Ok(response.json().await?)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Between these two conversions, I think it might be beneficial to handle errors from Vercel API. Like we do with 403 errors

crates/turborepo-auth/src/lib.rs Outdated Show resolved Hide resolved
crates/turborepo-auth/src/lib.rs Outdated Show resolved Hide resolved
crates/turborepo-auth/src/lib.rs Show resolved Hide resolved
#[test]
fn test_is_token_active() {
let current_time = current_unix_time();
let quick_scope = |expiry| Scope {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MW2 had it right all along: quick scopes on Rust are the way 😤

Copy link
Contributor

@chris-olszewski chris-olszewski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some minor suggestions

Comment on lines 76 to 80
let all_scopes_active = metadata.scopes.iter().all(|scope| {
scope
.expires_at
.map_or(true, |expires_at| expires_at > current_time)
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Complete bikeshed. My brain understands this a lil faster, something about an all that contains map_or confuses me.

Feel free to ignore if you disagree

Suggested change
let all_scopes_active = metadata.scopes.iter().all(|scope| {
scope
.expires_at
.map_or(true, |expires_at| expires_at > current_time)
});
let earliest_expiration = metadata
.scopes
.iter()
.filter_map(|scope| scope.expires_at)
.max();
let all_scopes_active =
earliest_expiration.map_or(true, |expiration| current_time < expiration);

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no problem here, I'll take your suggestion since I have no strong preference either way.

),
];

for (active_at, scopes, expected) in cases {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do think using test_case instead of manual table tests has some benefits, primarily it'll run all of the test cases on failure and not bail after the first failure.

Not blocking, just sharing my 2 cents

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah I've been experimenting with different ways to write tests, and originally this was a tokio::test which I wasn't sure of how it'd interact with test_case, so I went back to my old Go route. I'll probably make this use test_case in a future PR

),
// Case: Token inactive (future `active_at`)
(
current_time + 10,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I realize that this is unlikely, but I think we should proactively bump this threshold since there's a chance this could fail if it takes 10ms or more to perform the previous 4 test cases.

Also, I don't think this affects us, but the big "SystemTime is not monotonic" warning on the docs makes a little concerned about some possible drift that causes these tests fail.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll just do like, 1000 since this is a test that's supposed to be inactive.

The monotonic issue is valid, and I'm purely going off of vibes and instinct in saying that I don't think it'll be an issue. If it does become an issue I can hard code something, but that feels a little more flakey / less exhaustive as a test

Comment on lines 71 to 72
fn is_token_active(metadata: &ResponseTokenMetadata) -> bool {
let current_time = current_unix_time();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passing in the current time makes this a pure function which might make testing a little more reliable.

Suggested change
fn is_token_active(metadata: &ResponseTokenMetadata) -> bool {
let current_time = current_unix_time();
fn is_token_active(metadata: &ResponseTokenMetadata, current_time: u128) -> bool {

@Zertsov Zertsov merged commit e4aeda1 into main Feb 14, 2024
57 of 58 checks passed
@Zertsov Zertsov deleted the voz/fix-existing-tokens branch February 14, 2024 21:51
Copy link
Contributor Author

Zertsov commented Feb 14, 2024

Merge activity

kodiakhq bot added a commit to weareinreach/TransMascFutures that referenced this pull request Mar 6, 2024
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`20.11.24` -> `20.11.25`](https://renovatebot.com/diffs/npm/@types%2fnode/20.11.24/20.11.25) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.11.25?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.11.25?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.11.24/20.11.25?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.11.24/20.11.25?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@types/react](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | [`18.2.63` -> `18.2.64`](https://renovatebot.com/diffs/npm/@types%2freact/18.2.63/18.2.64) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/18.2.64?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/18.2.64?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/18.2.63/18.2.64?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/18.2.63/18.2.64?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [chromatic](https://www.chromatic.com) ([source](https://togithub.com/chromaui/chromatic-cli)) | [`11.0.1` -> `11.0.4`](https://renovatebot.com/diffs/npm/chromatic/11.0.1/11.0.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/chromatic/11.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/chromatic/11.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/chromatic/11.0.1/11.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/chromatic/11.0.1/11.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [eslint-plugin-turbo](https://togithub.com/vercel/turbo) ([source](https://togithub.com/vercel/turbo/tree/HEAD/packages/eslint-plugin-turbo)) | [`1.12.4` -> `1.12.5`](https://renovatebot.com/diffs/npm/eslint-plugin-turbo/1.12.4/1.12.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-plugin-turbo/1.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint-plugin-turbo/1.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint-plugin-turbo/1.12.4/1.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-plugin-turbo/1.12.4/1.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [react-i18next](https://togithub.com/i18next/react-i18next) | [`14.0.5` -> `14.0.8`](https://renovatebot.com/diffs/npm/react-i18next/14.0.5/14.0.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-i18next/14.0.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-i18next/14.0.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-i18next/14.0.5/14.0.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-i18next/14.0.5/14.0.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [turbo](https://turbo.build/repo) ([source](https://togithub.com/vercel/turbo)) | [`1.12.4` -> `1.12.5`](https://renovatebot.com/diffs/npm/turbo/1.12.4/1.12.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/turbo/1.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/turbo/1.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/turbo/1.12.4/1.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/turbo/1.12.4/1.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [typescript](https://www.typescriptlang.org/) ([source](https://togithub.com/Microsoft/TypeScript)) | [`5.3.3` -> `5.4.2`](https://renovatebot.com/diffs/npm/typescript/5.3.3/5.4.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript/5.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript/5.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript/5.3.3/5.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript/5.3.3/5.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>chromaui/chromatic-cli (chromatic)</summary>

### [`v11.0.4`](https://togithub.com/chromaui/chromatic-cli/blob/HEAD/CHANGELOG.md#v1104-Wed-Mar-06-2024)

[Compare Source](https://togithub.com/chromaui/chromatic-cli/compare/v11.0.3...v11.0.4)

##### 🐛 Bug Fix

-   Do not prompt to install chromatic script during E2E builds [#&#8203;941](https://togithub.com/chromaui/chromatic-cli/pull/941) ([@&#8203;tevanoff](https://togithub.com/tevanoff))

##### Authors: 1

-   Todd Evanoff ([@&#8203;tevanoff](https://togithub.com/tevanoff))

***

### [`v11.0.3`](https://togithub.com/chromaui/chromatic-cli/blob/HEAD/CHANGELOG.md#v1103-Wed-Mar-06-2024)

[Compare Source](https://togithub.com/chromaui/chromatic-cli/compare/v11.0.2...v11.0.3)

##### 🐛 Bug Fix

-   Display full error message when storybookBaseDir is invalid [#&#8203;932](https://togithub.com/chromaui/chromatic-cli/pull/932) ([@&#8203;andrewortwein](https://togithub.com/andrewortwein))

##### Authors: 1

-   Andrew Ortwein ([@&#8203;andrewortwein](https://togithub.com/andrewortwein))

***

### [`v11.0.2`](https://togithub.com/chromaui/chromatic-cli/blob/HEAD/CHANGELOG.md#v1102-Tue-Mar-05-2024)

[Compare Source](https://togithub.com/chromaui/chromatic-cli/compare/v11.0.1...v11.0.2)

##### 🐛 Bug Fix

-   Fix support for boolean value to `junitReport` option [#&#8203;937](https://togithub.com/chromaui/chromatic-cli/pull/937) ([@&#8203;thafryer](https://togithub.com/thafryer))

##### Authors: 1

-   Jarel Fryer ([@&#8203;thafryer](https://togithub.com/thafryer))

***

</details>

<details>
<summary>vercel/turbo (eslint-plugin-turbo)</summary>

### [`v1.12.5`](https://togithub.com/vercel/turbo/releases/tag/v1.12.5): Turborepo v1.12.5

[Compare Source](https://togithub.com/vercel/turbo/compare/v1.12.4...v1.12.5)



#### What's Changed

##### Docs

-   Name the file in Prisma doc. by [@&#8203;anthonyshew](https://togithub.com/anthonyshew) in [vercel/turbo#7426
-   chore(docs): update github actions versions to support node 20 by [@&#8203;robinsmith-source](https://togithub.com/robinsmith-source) in [vercel/turbo#7434
-   chore: update docs to no longer suggest verbosity for `--profile` by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7521
-   Add version to package in internal packages docs for yarn by [@&#8203;loctn](https://togithub.com/loctn) in [vercel/turbo#7626

##### create-turbo

-   release(turborepo): 1.12.4 by [@&#8203;github-actions](https://togithub.com/github-actions) in [vercel/turbo#7383

##### [@&#8203;turbo/repository](https://togithub.com/turbo/repository)

-   chore(Turborepo): bump versions in prep for a release by [@&#8203;gsoltis](https://togithub.com/gsoltis) in [vercel/turbo#7385
-   refactor(turborepo): Package Detection by [@&#8203;NicholasLYang](https://togithub.com/NicholasLYang) in [vercel/turbo#7549
-   feat([@&#8203;turbo/repository](https://togithub.com/turbo/repository)): return dependencies in graph by [@&#8203;mehulkar](https://togithub.com/mehulkar) in [vercel/turbo#7616
-   chore([@&#8203;turbo/repository](https://togithub.com/turbo/repository)): bump version to 0.0.1-canary.8 by [@&#8203;mehulkar](https://togithub.com/mehulkar) in [vercel/turbo#7636

##### Examples

-   fix(examples): basic generator by [@&#8203;dangbt](https://togithub.com/dangbt) in [vercel/turbo#7400
-   Remove barrel file from design-system-example by [@&#8203;anthonyshew](https://togithub.com/anthonyshew) in [vercel/turbo#7580
-   Dependabot updates for examples. by [@&#8203;anthonyshew](https://togithub.com/anthonyshew) in [vercel/turbo#7615
-   Bug fix on with-npm by [@&#8203;zsh77](https://togithub.com/zsh77) in [vercel/turbo#7587
-   dev script of ui package in example with rollup by [@&#8203;zsh77](https://togithub.com/zsh77) in [vercel/turbo#7550
-   Cleanup of with-vite example by [@&#8203;zsh77](https://togithub.com/zsh77) in [vercel/turbo#7585
-   Cleanup of with-yarn example by [@&#8203;zsh77](https://togithub.com/zsh77) in [vercel/turbo#7589
-   Guarantee typescript-eslint parser resolving. by [@&#8203;anthonyshew](https://togithub.com/anthonyshew) in [vercel/turbo#7634

##### Changelog

-   perf: parse and walk globs in parallel by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7244
-   fix: do better validation for existing tokens by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7358
-   chore(ci): remove Makefile targets to build Go binaries by [@&#8203;mehulkar](https://togithub.com/mehulkar) in [vercel/turbo#7389
-   add error enum to `turborepo-dirs` by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7277
-   fix: Clippy errors by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7392
-   docs: Refresh daemon documentation by [@&#8203;NicholasLYang](https://togithub.com/NicholasLYang) in [vercel/turbo#7386
-   Break up Client trait by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7387
-   chore(turbo): delete unused goreleaser configs by [@&#8203;mehulkar](https://togithub.com/mehulkar) in [vercel/turbo#7393
-   Improve daemon startup times by [@&#8203;arlyon](https://togithub.com/arlyon) in [vercel/turbo#7322
-   fix: reading output from orphan process by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7402
-   Add optionalwatch cookie support by [@&#8203;arlyon](https://togithub.com/arlyon) in [vercel/turbo#7379
-   chore: add force flag to login command by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7378
-   Audit daemon error paths and ensure we are doing everything we can to handle by [@&#8203;arlyon](https://togithub.com/arlyon) in [vercel/turbo#7334
-   chore: lower log level for noisy crates by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7439
-   chore: Rename daemon code by [@&#8203;NicholasLYang](https://togithub.com/NicholasLYang) in [vercel/turbo#7440
-   fix: support yarn4 semver resolutions by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7442
-   fix: More robust token validation by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7407
-   chore: Change daemon log location to be in repo by [@&#8203;NicholasLYang](https://togithub.com/NicholasLYang) in [vercel/turbo#7468
-   chore: remove unnecessary result on join_unix_path by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7506
-   chore: remove unused features from config crate by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7531
-   feat: task table widget by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7470
-   fix: Remove extra login popup for Vercel by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7469
-   feat(turborepo): Convert even more errors by [@&#8203;NicholasLYang](https://togithub.com/NicholasLYang) in [vercel/turbo#7513
-   fix: correctly call teams api by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7533
-   chore: add read_existing_to_string by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7532
-   feat: allow for faux comments at top level of turbo.json by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7546
-   fix: Load vercel token into command base by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7545
-   fix: support pnpm workspace path aliasing by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7512
-   chore: remove unused import from dep_splitter by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7555
-   fix: Respect globalDependencies when determining changed packages by [@&#8203;NicholasLYang](https://togithub.com/NicholasLYang) in [vercel/turbo#7557
-   feat(Turborepo): Renaming, additional cookiewriter constructor by [@&#8203;gsoltis](https://togithub.com/gsoltis) in [vercel/turbo#7553
-   fix: vercel auth file borks login by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7556
-   fix: login success page redirect by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7558
-   chore: move logout functionality into auth crate by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7443
-   chore: Change  to use borrowed path by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7569
-   Handle logging story better on daemon by [@&#8203;arlyon](https://togithub.com/arlyon) in [vercel/turbo#7526
-   fix: sso login duplicate popup by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7575
-   chore(Turborepo): refactor telemetry to use turbopath by [@&#8203;gsoltis](https://togithub.com/gsoltis) in [vercel/turbo#7567
-   chore(Turborepo): move test filesystem setup into test code by [@&#8203;gsoltis](https://togithub.com/gsoltis) in [vercel/turbo#7568
-   chore(Turborepo): Switch tests to use filesystem, remove unused generics by [@&#8203;gsoltis](https://togithub.com/gsoltis) in [vercel/turbo#7610
-   fix(cache): fix restoration issues of directories with very long paths by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7628
-   chore: vendor vt100 crate by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7591
-   fix(cache): restoration symlink by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7633
-   fix: reject empty cache dir path by [@&#8203;chris-olszewski](https://togithub.com/chris-olszewski) in [vercel/turbo#7630
-   fix: add more caching status tests by [@&#8203;Zertsov](https://togithub.com/Zertsov) in [vercel/turbo#7574

#### New Contributors

-   [@&#8203;dangbt](https://togithub.com/dangbt) made their first contribution in [vercel/turbo#7400
-   [@&#8203;robinsmith-source](https://togithub.com/robinsmith-source) made their first contribution in [vercel/turbo#7434
-   [@&#8203;nnmax](https://togithub.com/nnmax) made their first contribution in [vercel/turbo#6651
-   [@&#8203;bgw](https://togithub.com/bgw) made their first contribution in [vercel/turbo#7206
-   [@&#8203;loctn](https://togithub.com/loctn) made their first contribution in [vercel/turbo#7626
-   [@&#8203;zsh77](https://togithub.com/zsh77) made their first contribution in [vercel/turbo#7587

**Full Changelog**: vercel/turbo@v1.12.4...v1.12.5

</details>

<details>
<summary>i18next/react-i18next (react-i18next)</summary>

### [`v14.0.8`](https://togithub.com/i18next/react-i18next/blob/HEAD/CHANGELOG.md#1408)

[Compare Source](https://togithub.com/i18next/react-i18next/compare/v14.0.7...v14.0.8)

-   fix: issue [1728](https://togithub.com/i18next/react-i18next/issues/1728) when useSuspense is false and default ns [1731](https://togithub.com/i18next/react-i18next/pull/1731)

### [`v14.0.7`](https://togithub.com/i18next/react-i18next/blob/HEAD/CHANGELOG.md#1407)

[Compare Source](https://togithub.com/i18next/react-i18next/compare/v14.0.6...v14.0.7)

-   try to get rid of internal interpolationOverride handling for Trans component, fixes [1729](https://togithub.com/i18next/react-i18next/issues/1729)

### [`v14.0.6`](https://togithub.com/i18next/react-i18next/blob/HEAD/CHANGELOG.md#1406)

[Compare Source](https://togithub.com/i18next/react-i18next/compare/v14.0.5...v14.0.6)

-   align context handling of Trans component with t function, fixes [1729](https://togithub.com/i18next/react-i18next/issues/1729)

</details>

<details>
<summary>vercel/turbo (turbo)</summary>

### [`v1.12.5`](https://togithub.com/vercel/turbo/compare/v1.12.4...v1.12.5)

[Compare Source](https://togithub.com/vercel/turbo/compare/v1.12.4...v1.12.5)

</details>

<details>
<summary>Microsoft/TypeScript (typescript)</summary>

### [`v5.4.2`](https://togithub.com/microsoft/TypeScript/releases/tag/v5.4.2): TypeScript 5.4

[Compare Source](https://togithub.com/Microsoft/TypeScript/compare/v5.3.3...v5.4.2)

For release notes, check out the [release announcement](https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/).

For the complete list of fixed issues, check out the

-   [fixed issues query for Typescript 5.4.0 (Beta)](https://togithub.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+5.4.0%22+is%3Aclosed+).
-   [fixed issues query for Typescript 5.4.1 (RC)](https://togithub.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+5.4.1%22+is%3Aclosed+).
-   [fixed issues query for Typescript 5.4.2 (Stable)](https://togithub.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+5.4.2%22+is%3Aclosed+).

Downloads are available on:

-   [NuGet package](https://www.nuget.org/packages/Microsoft.TypeScript.MSBuild)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday,before 4am on Thursday" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/weareinreach/GLAAD).



PR-URL: #356
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants