Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,9 @@ category:
contentType: how-tos
---

> [!NOTE]
> Re-run workflows use the privileges of the actor who initially triggered the workflow, not the privileges of the actor who initiated the re-run. The workflow will also use the same `GITHUB_SHA` (commit SHA) and `GITHUB_REF` (git ref) of the original event that triggered the workflow run.
{% ifversion fpt or ghec %}
>
> A workflow run can be re-run a maximum of 50 times. Re-running only a single job or failed jobs counts towards this limit.
{% endif %}
Re-runs use the privileges of the actor who initially triggered the workflow, not the privileges of the actor who initiated the re-run. The workflow will also use the same `GITHUB_SHA` (commit SHA) and `GITHUB_REF` (git ref) of the original event that triggered the workflow run.

A workflow run can be re-run a maximum of 50 times. This limit includes both full re-runs and re-runs of a subset of jobs.

## Re-running all the jobs in a workflow

Expand Down
3 changes: 2 additions & 1 deletion content/actions/reference/limits.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ These limits are subject to change.
| :---- | :---- | :---- | :---- | :---- |
| Workflow execution limit | Workflow run time | 35 days / workflow run | If a workflow run reaches this limit, the workflow run is cancelled. This period includes execution duration, and time spent on waiting and approval. | {% octicon "x" aria-label="No" %} |
| Workflow execution limit | Gate approval time | 30 days | A workflow may wait for up to [30 days on environment approvals](/actions/managing-workflow-runs-and-deployments/managing-deployments/managing-environments-for-deployment#wait-timer). | {% octicon "x" aria-label="No" %} |
| Workflow execution limit | Job Matrix | 256 jobs / workflow run | A job matrix can generate a maximum of 256 jobs per workflow run. This limit applies to both {% data variables.product.github %}-hosted and self-hosted runners. | {% octicon "x" aria-label="No" %} |
| Workflow execution limit | Re-run | 50 re-runs | A workflow run can be re-run a maximum of 50 times. This limit includes both full re-runs and re-runs of a subset of jobs. | {% octicon "check" aria-label="Yes" %} Support ticket |
| Workflows queuing | Workflow trigger event rate limit | 1500 events / 10 seconds / repository | Each repository is limited to events triggering a workflow run. | {% octicon "check" aria-label="Yes" %} Support ticket |
| Workflows queuing | Workflow run queued | 500 workflow runs / 10 seconds | When the limit is reached, the workflow runs that were supposed to be triggered by the webhook events will be blocked and will not be queued. Reusable workflows are viewed as a single entity. For example, a run with 30 reusable workflows counts as 1 in this instance. | {% octicon "x" aria-label="No" %} |
| Workflow execution | Job Matrix | 256 jobs / workflow run | A job matrix can generate a maximum of jobs per workflow run. This limit applies to both {% data variables.product.github %}-hosted and self-hosted runners. | {% octicon "x" aria-label="No" %} |
| Self-hosted | Runner registrations | 1500 runners / 5 minutes / repository/org/enterprise | Runners can be registered per repository/organization/enterprise. | {% octicon "check" aria-label="Yes" %} Support ticket |
| Self-hosted | Runners per runner group | 10,000 runners | Runners registered at the same time per runner group. | {% octicon "x" aria-label="No" %} |
| Self-hosted | Job execution time | 5 days | Each job in a workflow can run for up to 5 days of execution time. If a job reaches this limit, the job is terminated and fails. | {% octicon "x" aria-label="No" %} |
Expand Down
44 changes: 40 additions & 4 deletions src/frame/lib/warm-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,55 @@ let promisedWarmServer: Promise<WarmServerResult> | undefined
async function warmServer(languagesOnly: string[] = []): Promise<WarmServerResult> {
const startTime = Date.now()

logger.debug(
`Priming context information...${languagesOnly && languagesOnly.length ? ` ${languagesOnly.join(',')} only` : ''}`,
)
const langSuffix =
languagesOnly && languagesOnly.length ? ` (${languagesOnly.join(',')})` : ' (all languages)'

logger.info(`warm-server: starting${langSuffix}`)

let stepStart = Date.now()
const unversionedTree = await dog.loadUnversionedTree(languagesOnly)
logger.info('warm-server: loadUnversionedTree complete', {
durationMs: Date.now() - stepStart,
heapUsedMb: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
})

stepStart = Date.now()
const siteTree = await dog.loadSiteTree(unversionedTree, languagesOnly)
logger.info('warm-server: loadSiteTree complete', {
durationMs: Date.now() - stepStart,
heapUsedMb: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
})

stepStart = Date.now()
const pageList = await dog.loadPages(unversionedTree, languagesOnly)
logger.info('warm-server: loadPages complete', {
durationMs: Date.now() - stepStart,
pageCount: pageList.length,
heapUsedMb: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
})

stepStart = Date.now()
const pageMap = await dog.loadPageMap(pageList)
logger.info('warm-server: loadPageMap complete', {
durationMs: Date.now() - stepStart,
permalinkCount: Object.keys(pageMap).length,
heapUsedMb: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
})

stepStart = Date.now()
const redirects = await dog.loadRedirects(pageList)
logger.info('warm-server: loadRedirects complete', {
durationMs: Date.now() - stepStart,
redirectCount: Object.keys(redirects).length,
heapUsedMb: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
})

statsd.gauge('memory_heap_used', process.memoryUsage().heapUsed, ['event:warm-server'])

logger.debug(`Context primed in ${Date.now() - startTime} ms`)
logger.info('warm-server: complete', {
totalDurationMs: Date.now() - startTime,
heapUsedMb: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
})

return {
pages: pageMap,
Expand Down
Loading