-
Notifications
You must be signed in to change notification settings - Fork 87
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
ci: add deploy cleanup step for Vercel tests #2699
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -28,7 +28,7 @@ env: | |
DATADOG_TRACE_NEXTJS_TEST: true | ||
DATADOG_API_KEY: foo | ||
TEST_CONCURRENCY: 2 | ||
NEXT_E2E_TEST_TIMEOUT: 300000 | ||
NEXT_E2E_TEST_TIMEOUT: 600000 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Similarly as above - not related to deleting deploys, but some of the test suites seemed to be on the verge of timeouts and would sometimes go over so this might reduce some of the flakiness (not very confident in that part due to troubles with reproducing problems locally or even when running individual tests in github actions and not locally, but I think it's worth a try) |
||
NEXT_TELEMETRY_DISABLED: 1 | ||
NEXT_SKIP_NATIVE_POSTINSTALL: 1 | ||
TURBO_API: ${{ secrets.TURBO_API }} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -35,6 +35,7 @@ export class NextDeployInstance extends NextInstance { | |
private _cliOutput: string | ||
private _buildId: string | ||
private _deployId: string | ||
private _shouldDeleteDeploy: boolean = false | ||
|
||
public get buildId() { | ||
// get deployment ID via fetch since we can't access | ||
|
@@ -50,6 +51,9 @@ export class NextDeployInstance extends NextInstance { | |
this._buildId = process.env.BUILD_ID | ||
return | ||
} | ||
|
||
const setupStartTime = Date.now() | ||
|
||
// create the test site | ||
await super.createTestDir({ parentSpan, skipInstall: true }) | ||
|
||
|
@@ -146,6 +150,7 @@ export class NextDeployInstance extends NextInstance { | |
this._url = url | ||
this._parsedUrl = new URL(this._url) | ||
this._deployId = deployID | ||
this._shouldDeleteDeploy = !process.env.NEXT_TEST_SKIP_CLEANUP | ||
this._cliOutput = deployRes.stdout + deployRes.stderr | ||
require('console').log(`Deployment URL: ${this._url}`) | ||
|
||
|
@@ -169,6 +174,32 @@ export class NextDeployInstance extends NextInstance { | |
).trim() | ||
|
||
require('console').log(`Got buildId: ${this._buildId}`) | ||
require('console').log(`Setup time: ${(Date.now() - setupStartTime) / 1000.0}s`) | ||
} | ||
|
||
public async destroy(): Promise<void> { | ||
if (this._shouldDeleteDeploy) { | ||
require('console').log(`Deleting project with deploy_id ${this._deployId}`) | ||
|
||
const deleteResponse = await execa('npx', [ | ||
'ntl', | ||
'api', | ||
'deleteDeploy', | ||
'--data', | ||
`{ "deploy_id": "${this._deployId}" }`, | ||
]) | ||
|
||
if (deleteResponse.exitCode !== 0) { | ||
require('console').error( | ||
`Failed to delete deploy ${deleteResponse.stdout} ${deleteResponse.stderr} (${deleteResponse.exitCode})`, | ||
) | ||
} else { | ||
require('console').log(`Successfully deleted deploy with deploy_id ${this._deployId}`) | ||
this._shouldDeleteDeploy = false | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. learning - why do we need to set this to false in the end? will it keep attempting and looping if we don't? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It should not, this is just in case - I was looking at base class we extend - it does have some checks that look if something was deleted / destroyed already - there they throw: but I didn't want to play with this as I don't fully know the contract that Vercel tests have with those modules - so this just felt safe way to just avoid wasting time on calling API to delete deploy that was already deleted in case this is called multiple times ( |
||
} | ||
} | ||
|
||
await super.destroy() | ||
} | ||
|
||
public get cliOutput() { | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not really related to deleting deploys, but this allow to generate test results report from runs on pull request (when label is applied) and not just on
workflow_dispatch