[{"data":1,"prerenderedAt":1740},["ShallowReactive",2],{"navigation_docs":3,"-engineering-github-workflows":369,"-engineering-github-workflows-surround":1735},[4,8,72,102,220,266,280,301,365],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","0.introduction",{"title":9,"icon":10,"path":11,"stem":12,"children":13,"page":67},"Company","i-lucide-building-2","\u002Fcompany","1.company",[14,18,22,26,30,34,38,42,46,50,54,68],{"title":15,"path":16,"stem":17},"About","\u002Fcompany\u002Fabout","1.company\u002F0.about",{"title":19,"path":20,"stem":21},"Values","\u002Fcompany\u002Fvalues","1.company\u002F1.values",{"title":23,"path":24,"stem":25},"Communication","\u002Fcompany\u002Fcommunication","1.company\u002Fcommunication",{"title":27,"path":28,"stem":29},"Competition","\u002Fcompany\u002Fcompetition","1.company\u002Fcompetition",{"title":31,"path":32,"stem":33},"Hybrid Working","\u002Fcompany\u002Fhybrid-working","1.company\u002Fhybrid-working",{"title":35,"path":36,"stem":37},"Manchester Office","\u002Fcompany\u002Foffice","1.company\u002Foffice",{"title":39,"path":40,"stem":41},"Operations","\u002Fcompany\u002Foperations","1.company\u002Foperations",{"title":43,"path":44,"stem":45},"Policies","\u002Fcompany\u002Fpolicies","1.company\u002Fpolicies",{"title":47,"path":48,"stem":49},"Problem Statement","\u002Fcompany\u002Fproblem-statement","1.company\u002Fproblem-statement",{"title":51,"path":52,"stem":53},"Product Strategy","\u002Fcompany\u002Fproduct-strategy","1.company\u002Fproduct-strategy",{"title":55,"path":56,"stem":57,"children":58,"page":67},"Products","\u002Fcompany\u002Fproducts","1.company\u002Fproducts",[59,63],{"title":60,"path":61,"stem":62},"Capability Exchange","\u002Fcompany\u002Fproducts\u002Fcapability-exchange","1.company\u002Fproducts\u002Fcapability-exchange",{"title":64,"path":65,"stem":66},"ESProfiler Platform","\u002Fcompany\u002Fproducts\u002Fesprofiler","1.company\u002Fproducts\u002Fesprofiler",false,{"title":69,"path":70,"stem":71},"Security","\u002Fcompany\u002Fsecurity","1.company\u002Fsecurity",{"title":73,"icon":74,"path":75,"stem":76,"children":77,"page":67},"People Ops","i-lucide-users","\u002Fpeople-ops","2.people-ops",[78,82,86,90,94,98],{"title":79,"path":80,"stem":81},"Compensation","\u002Fpeople-ops\u002Fcompensation","2.people-ops\u002Fcompensation",{"title":83,"path":84,"stem":85},"Education","\u002Fpeople-ops\u002Feducation","2.people-ops\u002Feducation",{"title":87,"path":88,"stem":89},"Expenses","\u002Fpeople-ops\u002Fexpenses","2.people-ops\u002Fexpenses",{"title":91,"path":92,"stem":93},"Holiday & Leave","\u002Fpeople-ops\u002Fleave","2.people-ops\u002Fleave",{"title":95,"path":96,"stem":97},"Onboarding","\u002Fpeople-ops\u002Fonboarding","2.people-ops\u002Fonboarding",{"title":99,"path":100,"stem":101},"Recruitment","\u002Fpeople-ops\u002Frecruitment","2.people-ops\u002Frecruitment",{"title":103,"icon":104,"path":105,"stem":106,"children":107,"page":67},"Engineering","i-lucide-rocket","\u002Fengineering","3.engineering",[108,151,155,175,196,200,208,212,216],{"title":109,"path":110,"stem":111,"children":112,"page":67},"Contributing","\u002Fengineering\u002Fcontributing","3.engineering\u002Fcontributing",[113,117,121,125,129,142],{"title":114,"path":115,"stem":116},"Development Setup","\u002Fengineering\u002Fcontributing\u002Fdevelopment-setup","3.engineering\u002Fcontributing\u002F1.development-setup",{"title":118,"path":119,"stem":120},"Engineering Operations","\u002Fengineering\u002Fcontributing\u002Fengineering-operations","3.engineering\u002Fcontributing\u002F2.engineering-operations",{"title":122,"path":123,"stem":124},"Documentation","\u002Fengineering\u002Fcontributing\u002Fdocumentation","3.engineering\u002Fcontributing\u002F3.documentation",{"title":126,"path":127,"stem":128},"Agentic Coding","\u002Fengineering\u002Fcontributing\u002Fagentic-coding","3.engineering\u002Fcontributing\u002Fagentic-coding",{"title":130,"path":131,"stem":132,"children":133,"page":67},"Back End","\u002Fengineering\u002Fcontributing\u002Fback-end","3.engineering\u002Fcontributing\u002Fback-end",[134,138],{"title":135,"path":136,"stem":137},"API Guidelines","\u002Fengineering\u002Fcontributing\u002Fback-end\u002Fapi-guidelines","3.engineering\u002Fcontributing\u002Fback-end\u002Fapi-guidelines",{"title":139,"path":140,"stem":141},"LLM Prompts & Langfuse Integration","\u002Fengineering\u002Fcontributing\u002Fback-end\u002Fllm-prompts","3.engineering\u002Fcontributing\u002Fback-end\u002Fllm-prompts",{"title":143,"path":144,"stem":145,"children":146,"page":67},"Front End","\u002Fengineering\u002Fcontributing\u002Ffront-end","3.engineering\u002Fcontributing\u002Ffront-end",[147],{"title":148,"path":149,"stem":150},"Testing","\u002Fengineering\u002Fcontributing\u002Ffront-end\u002Ftesting","3.engineering\u002Fcontributing\u002Ffront-end\u002Ftesting",{"title":152,"path":153,"stem":154},"Production Database","\u002Fengineering\u002Fdatabase-connection","3.engineering\u002Fdatabase-connection",{"title":156,"path":157,"stem":158,"children":159},"Deployment","\u002Fengineering\u002Fdeployment","3.engineering\u002Fdeployment",[160,163,167,171],{"title":60,"path":161,"stem":162},"\u002Fengineering\u002Fdeployment\u002Fcapability-exchange","3.engineering\u002Fdeployment\u002Fcapability-exchange",{"title":164,"path":165,"stem":166},"Langfuse Deployment","\u002Fengineering\u002Fdeployment\u002Fecs-langfuse-deployment","3.engineering\u002Fdeployment\u002Fecs-langfuse-deployment",{"title":168,"path":169,"stem":170},"ESP Platform Configuration","\u002Fengineering\u002Fdeployment\u002Fesp-platform-configuration","3.engineering\u002Fdeployment\u002Fesp-platform-configuration",{"title":172,"path":173,"stem":174},"Platform","\u002Fengineering\u002Fdeployment\u002Fplatform","3.engineering\u002Fdeployment\u002Fplatform",{"title":176,"path":177,"stem":178,"children":179,"page":67},"Github","\u002Fengineering\u002Fgithub","3.engineering\u002Fgithub",[180,184,188,192],{"title":181,"path":182,"stem":183},"Packages","\u002Fengineering\u002Fgithub\u002Fpackages","3.engineering\u002Fgithub\u002Fpackages",{"title":185,"path":186,"stem":187},"Personal Access Token","\u002Fengineering\u002Fgithub\u002Fpersonal-access-token","3.engineering\u002Fgithub\u002Fpersonal-access-token",{"title":189,"path":190,"stem":191},"Troubleshooting","\u002Fengineering\u002Fgithub\u002Ftroubleshooting","3.engineering\u002Fgithub\u002Ftroubleshooting",{"title":193,"path":194,"stem":195},"Workflows","\u002Fengineering\u002Fgithub\u002Fworkflows","3.engineering\u002Fgithub\u002Fworkflows",{"title":197,"path":198,"stem":199},"Platform Ops","\u002Fengineering\u002Fplatform-ops","3.engineering\u002Fplatform-ops",{"title":172,"path":201,"stem":202,"children":203,"page":67},"\u002Fengineering\u002Fplatform","3.engineering\u002Fplatform",[204],{"title":205,"path":206,"stem":207},"useAPI","\u002Fengineering\u002Fplatform\u002Fuse-api","3.engineering\u002Fplatform\u002Fuse-api",{"title":209,"path":210,"stem":211},"Project Management","\u002Fengineering\u002Fproject-management","3.engineering\u002Fproject-management",{"title":213,"path":214,"stem":215},"Releases","\u002Fengineering\u002Frelease","3.engineering\u002Frelease",{"title":217,"path":218,"stem":219},"Tools","\u002Fengineering\u002Ftools","3.engineering\u002Ftools",{"title":221,"icon":222,"path":223,"stem":224,"children":225,"page":67},"Design","i-lucide-palette","\u002Fdesign","4.design",[226,247,251,255,259,262],{"title":227,"path":228,"stem":229,"children":230,"page":67},"Personas","\u002Fdesign\u002Fpersonas","4.design\u002F0.personas",[231,235,239,243],{"title":232,"path":233,"stem":234},"CISO - Simon","\u002Fdesign\u002Fpersonas\u002F01-ciso-simon","4.design\u002F0.personas\u002F01-ciso-simon",{"title":236,"path":237,"stem":238},"Head of Cyber - Harry","\u002Fdesign\u002Fpersonas\u002F02-head-of-cyber-harry","4.design\u002F0.personas\u002F02-head-of-cyber-harry",{"title":240,"path":241,"stem":242},"Security Architect - Sasha","\u002Fdesign\u002Fpersonas\u002F03-security-architect-sasha","4.design\u002F0.personas\u002F03-security-architect-sasha",{"title":244,"path":245,"stem":246},"Procurement Officer - Paige","\u002Fdesign\u002Fpersonas\u002F04-procurement-officer-paige","4.design\u002F0.personas\u002F04-procurement-officer-paige",{"title":248,"path":249,"stem":250},"Design Thinking","\u002Fdesign\u002Fdesign-thinking","4.design\u002F1.design-thinking",{"title":252,"path":253,"stem":254},"Design & Development","\u002Fdesign\u002Fdesign-and-development","4.design\u002F3.design-and-development",{"title":256,"path":257,"stem":258},"Branding","\u002Fdesign\u002Fbranding","4.design\u002F4.branding",{"title":217,"path":260,"stem":261},"\u002Fdesign\u002Ftools","4.design\u002F5.tools",{"title":263,"path":264,"stem":265},"Customer Success","\u002Fdesign\u002Fworking-with-customers","4.design\u002F6.working-with-customers",{"title":267,"icon":268,"path":269,"stem":270,"children":271,"page":67},"Sales","i-lucide-dollar-sign","\u002Fsales","4.sales",[272,276],{"title":273,"path":274,"stem":275},"Customer Onboarding","\u002Fsales\u002Fonboarding","4.sales\u002Fonboarding",{"title":277,"path":278,"stem":279},"Sales Tools","\u002Fsales\u002Ftools","4.sales\u002Ftools",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":67},"Marketing","i-lucide-book-image","\u002Fmarketing","5.marketing",[286,290,294,297],{"title":287,"path":288,"stem":289},"Content","\u002Fmarketing\u002Fcontent","5.marketing\u002Fcontent",{"title":291,"path":292,"stem":293},"Messaging","\u002Fmarketing\u002Fmessaging","5.marketing\u002Fmessaging",{"title":217,"path":295,"stem":296},"\u002Fmarketing\u002Ftools","5.marketing\u002Ftools",{"title":298,"path":299,"stem":300},"Website","\u002Fmarketing\u002Fwebsite","5.marketing\u002Fwebsite",{"title":302,"icon":303,"path":304,"stem":305,"children":306,"page":67},"AI & Data Ops","i-lucide-database","\u002Fdata-ops","6.data-ops",[307,315,319,344,361],{"title":60,"path":308,"stem":309,"children":310,"page":67},"\u002Fdata-ops\u002Fcapability-exchange","6.data-ops\u002FCapability Exchange",[311],{"title":312,"path":313,"stem":314},"Leaderboard Calculation","\u002Fdata-ops\u002Fcapability-exchange\u002Fleaderboard-calculation","6.data-ops\u002FCapability Exchange\u002Fleaderboard-calculation",{"title":316,"path":317,"stem":318},"Account Portal (CAS)","\u002Fdata-ops\u002Faccount-portal","6.data-ops\u002Faccount-portal",{"title":320,"path":321,"stem":322,"children":323,"page":67},"Data Management","\u002Fdata-ops\u002Fdata-management","6.data-ops\u002Fdata-management",[324,328,332,336,340],{"title":325,"path":326,"stem":327},"Adding Products","\u002Fdata-ops\u002Fdata-management\u002Fadding-products","6.data-ops\u002Fdata-management\u002Fadding-products",{"title":329,"path":330,"stem":331},"Adding Vendors","\u002Fdata-ops\u002Fdata-management\u002Fadding-vendors","6.data-ops\u002Fdata-management\u002Fadding-vendors",{"title":333,"path":334,"stem":335},"Framework Mapping","\u002Fdata-ops\u002Fdata-management\u002Fframework-mapping","6.data-ops\u002Fdata-management\u002Fframework-mapping",{"title":337,"path":338,"stem":339},"Refreshing Vendors","\u002Fdata-ops\u002Fdata-management\u002Frefreshing-vendors","6.data-ops\u002Fdata-management\u002Frefreshing-vendors",{"title":341,"path":342,"stem":343},"Reviewing Draft Vendors","\u002Fdata-ops\u002Fdata-management\u002Freviewing-draft-vendors","6.data-ops\u002Fdata-management\u002Freviewing-draft-vendors",{"title":345,"path":346,"stem":347,"children":348,"page":67},"LLM Ops","\u002Fdata-ops\u002Fllm-ops","6.data-ops\u002Fllm-ops",[349,353,357],{"title":350,"path":351,"stem":352},"Agents","\u002Fdata-ops\u002Fllm-ops\u002Fagents","6.data-ops\u002Fllm-ops\u002F1.agents",{"title":354,"path":355,"stem":356},"ESPi Architecture & Query Flow","\u002Fdata-ops\u002Fllm-ops\u002Fespi-architecture","6.data-ops\u002Fllm-ops\u002F2.espi-architecture",{"title":358,"path":359,"stem":360},"Evaluating Agents","\u002Fdata-ops\u002Fllm-ops\u002Fevaluations","6.data-ops\u002Fllm-ops\u002F3.evaluations",{"title":362,"path":363,"stem":364},"Message Queues","\u002Fdata-ops\u002Fmessage-queues","6.data-ops\u002Fmessage-queues",{"title":366,"path":367,"stem":368},"Glossary","\u002Fglossary","glossary",{"id":370,"title":193,"body":371,"description":1729,"extension":1730,"links":1731,"meta":1732,"navigation":441,"path":194,"seo":1733,"stem":195,"__hash__":1734},"docs\u002F3.engineering\u002Fgithub\u002Fworkflows.md",{"type":372,"value":373,"toc":1721},"minimark",[374,379,388,395,400,410,571,574,578,583,591,1478,1482,1489,1686,1688,1690,1694,1709,1717],[375,376,378],"h2",{"id":377},"centralised-workflows","Centralised workflows",[380,381,382,383,387],"p",{},"We can define reusable GitHub Actions workflows in a central repository and call them from multiple repositories using ",[384,385,386],"code",{},"workflow_call",".",[380,389,390,391,394],{},"At ESProfiler, these shared workflows live in ",[384,392,393],{},"ES-Profiler\u002F.github-private"," and are consumed from project repositories to keep automation consistent and avoid duplicated workflow logic.",[396,397,399],"h4",{"id":398},"calling-a-shared-workflow","Calling a Shared Workflow",[380,401,402,403,405,406,409],{},"In any repository within the ESProfiler organisation, you can call a centrally defined workflow. These workflows must be stored in the ",[384,404,393],{}," repository. This example shows how to call the ",[384,407,408],{},"mark-released-items-done"," workflow:",[411,412,417],"pre",{"className":413,"code":414,"language":415,"meta":416,"style":416},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","name: Mark released issues as 'Done'\n\non:\n  release:\n    types: [published]\n\njobs:\n  call-shared-workflow:\n    uses: ES-Profiler\u002F.github-private\u002F.github\u002Fworkflows\u002Fmark-released-items-done.yml@main\n    secrets: inherit\n    permissions:\n      contents: read\n      pull-requests: read\n      issues: write\n      repository-projects: write\n","yaml","",[384,418,419,436,443,453,461,478,483,491,499,510,521,529,540,550,561],{"__ignoreMap":416},[420,421,424,428,432],"span",{"class":422,"line":423},"line",1,[420,425,427],{"class":426},"swJcz","name",[420,429,431],{"class":430},"sMK4o",":",[420,433,435],{"class":434},"sfazB"," Mark released issues as 'Done'\n",[420,437,439],{"class":422,"line":438},2,[420,440,442],{"emptyLinePlaceholder":441},true,"\n",[420,444,446,450],{"class":422,"line":445},3,[420,447,449],{"class":448},"sfNiH","on",[420,451,452],{"class":430},":\n",[420,454,456,459],{"class":422,"line":455},4,[420,457,458],{"class":426},"  release",[420,460,452],{"class":430},[420,462,464,467,469,472,475],{"class":422,"line":463},5,[420,465,466],{"class":426},"    types",[420,468,431],{"class":430},[420,470,471],{"class":430}," [",[420,473,474],{"class":434},"published",[420,476,477],{"class":430},"]\n",[420,479,481],{"class":422,"line":480},6,[420,482,442],{"emptyLinePlaceholder":441},[420,484,486,489],{"class":422,"line":485},7,[420,487,488],{"class":426},"jobs",[420,490,452],{"class":430},[420,492,494,497],{"class":422,"line":493},8,[420,495,496],{"class":426},"  call-shared-workflow",[420,498,452],{"class":430},[420,500,502,505,507],{"class":422,"line":501},9,[420,503,504],{"class":426},"    uses",[420,506,431],{"class":430},[420,508,509],{"class":434}," ES-Profiler\u002F.github-private\u002F.github\u002Fworkflows\u002Fmark-released-items-done.yml@main\n",[420,511,513,516,518],{"class":422,"line":512},10,[420,514,515],{"class":426},"    secrets",[420,517,431],{"class":430},[420,519,520],{"class":434}," inherit\n",[420,522,524,527],{"class":422,"line":523},11,[420,525,526],{"class":426},"    permissions",[420,528,452],{"class":430},[420,530,532,535,537],{"class":422,"line":531},12,[420,533,534],{"class":426},"      contents",[420,536,431],{"class":430},[420,538,539],{"class":434}," read\n",[420,541,543,546,548],{"class":422,"line":542},13,[420,544,545],{"class":426},"      pull-requests",[420,547,431],{"class":430},[420,549,539],{"class":434},[420,551,553,556,558],{"class":422,"line":552},14,[420,554,555],{"class":426},"      issues",[420,557,431],{"class":430},[420,559,560],{"class":434}," write\n",[420,562,564,567,569],{"class":422,"line":563},15,[420,565,566],{"class":426},"      repository-projects",[420,568,431],{"class":430},[420,570,560],{"class":434},[572,573],"hr",{},[375,575,577],{"id":576},"example-workflows","Example Workflows",[579,580,582],"h3",{"id":581},"marking-released-items-as-done","Marking released items as \"Done\"",[380,584,585,586,590],{},"This workflow finds pull requests referenced in release notes, discovers the issues those PRs close, updates their project status to ",[587,588,589],"strong",{},"Done",", and comments on each issue with a link back to the published release.",[411,592,594],{"className":413,"code":593,"language":415,"meta":416,"style":416},"name: Mark released issues as 'Done'\n\non:\n  workflow_call:\n\njobs:\n  update-issues:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      pull-requests: read\n      issues: write\n      repository-projects: write\n    steps:\n      - name: Update project status for issues in this release\n        uses: actions\u002Fgithub-script@v8\n        with:\n          github-token: ${{ secrets.PROJECT_V2_TOKEN || secrets.GITHUB_TOKEN }}\n          script: |\n            const owner = context.repo.owner;\n            const repo = context.repo.repo;\n            const release = context.payload.release;\n\n            \u002F\u002F Your IDs\n            const PROJECT_ID = '\u003Cinsert ID>';\n            const STATUS_FIELD_ID = '\u003Cinsert ID>';\n            const DONE_OPTION_ID = '\u003Cinsert ID>';\n\n            const releaseUrl = release.html_url;\n            const body = release.body || '';\n\n            \u002F\u002F Collect PR numbers mentioned in the release body: \"#123\" or \"pull\u002F123\"\n            const prNumbers = [...body.matchAll(\u002F(?:#|pull\\\u002F)(\\d+)\u002Fg)]\n              .map(m => parseInt(m[1], 10))\n              .filter((n, i, arr) => arr.indexOf(n) === i);\n\n            console.log('PRs found in release notes:', prNumbers);\n\n            const gql = (query, variables) => github.graphql(query, variables);\n\n            for (const prNumber of prNumbers) {\n              console.log(`Processing PR #${prNumber}`);\n\n              \u002F\u002F 1) Get issues that PR closes\n              const prData = await gql(\n                `\n                query($owner: String!, $repo: String!, $pr: Int!) {\n                  repository(owner: $owner, name: $repo) {\n                    pullRequest(number: $pr) {\n                      closingIssuesReferences(first: 50) {\n                        nodes {\n                          id\n                          number\n                          title\n                        }\n                      }\n                    }\n                  }\n                }\n                `,\n                { owner, repo, pr: prNumber }\n              );\n\n              const issues =\n                prData.repository.pullRequest?.closingIssuesReferences?.nodes || [];\n\n              if (!issues.length) {\n                console.log(`No closing issues for PR #${prNumber}`);\n                continue;\n              }\n\n              for (const issue of issues) {\n                console.log(`Updating project status for issue #${issue.number}`);\n\n                \u002F\u002F 2) Find the ProjectV2 item for this issue on your project\n                const itemData = await gql(\n                  `\n                  query($projectId: ID!, $issueSearch: String!) {\n                    node(id: $projectId) {\n                      ... on ProjectV2 {\n                        items(first: 50, query: $issueSearch) {\n                          nodes {\n                            id\n                            content {\n                              ... on Issue {\n                                id\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                  `,\n                  { projectId: PROJECT_ID, issueSearch: `${issue.number}` }\n                );\n\n                const items = itemData.node?.items?.nodes || [];\n                const projectItem = items.find(\n                  (it) => it.content && it.content.id === issue.id\n                );\n\n                if (!projectItem) {\n                  console.log(`No project item found for issue #${issue.number}`);\n                  continue;\n                }\n\n                const itemId = projectItem.id;\n\n                \u002F\u002F 3) Set Status = Done\n                await gql(\n                  `\n                  mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) {\n                    updateProjectV2ItemFieldValue(\n                      input: {\n                        projectId: $projectId\n                        itemId: $itemId\n                        fieldId: $fieldId\n                        value: { singleSelectOptionId: $optionId }\n                      }\n                    ) {\n                      projectV2Item { id }\n                    }\n                  }\n                  `,\n                  {\n                    projectId: PROJECT_ID,\n                    itemId,\n                    fieldId: STATUS_FIELD_ID,\n                    optionId: DONE_OPTION_ID,\n                  }\n                );\n\n                console.log(\n                  `Issue #${issue.number} status moved to Done (release ${release.tag_name})`\n                );\n\n                \u002F\u002F 4) Add a comment linking back to this release\n                await github.rest.issues.createComment({\n                  owner,\n                  repo,\n                  issue_number: issue.number,\n                  body: `Marked as **Done** when release [${release.tag_name}](${releaseUrl}) was published (includes PR #${prNumber}).`\n                });\n              }\n            }\n",[384,595,596,604,608,614,621,625,631,638,648,654,662,670,678,686,693,706,717,725,736,748,754,760,766,771,777,783,789,795,800,806,812,817,823,829,835,841,846,852,857,863,868,874,880,885,891,897,903,909,915,921,927,933,939,945,951,957,963,969,975,981,987,993,999,1004,1010,1016,1021,1027,1033,1039,1045,1050,1056,1062,1067,1073,1079,1085,1091,1097,1103,1109,1115,1121,1127,1133,1139,1145,1151,1157,1162,1167,1172,1177,1183,1189,1195,1200,1206,1212,1218,1223,1228,1234,1240,1246,1251,1256,1262,1267,1273,1279,1284,1290,1296,1302,1308,1314,1320,1326,1331,1337,1343,1348,1353,1358,1364,1370,1376,1382,1388,1393,1398,1403,1409,1415,1420,1425,1431,1437,1443,1449,1455,1461,1467,1472],{"__ignoreMap":416},[420,597,598,600,602],{"class":422,"line":423},[420,599,427],{"class":426},[420,601,431],{"class":430},[420,603,435],{"class":434},[420,605,606],{"class":422,"line":438},[420,607,442],{"emptyLinePlaceholder":441},[420,609,610,612],{"class":422,"line":445},[420,611,449],{"class":448},[420,613,452],{"class":430},[420,615,616,619],{"class":422,"line":455},[420,617,618],{"class":426},"  workflow_call",[420,620,452],{"class":430},[420,622,623],{"class":422,"line":463},[420,624,442],{"emptyLinePlaceholder":441},[420,626,627,629],{"class":422,"line":480},[420,628,488],{"class":426},[420,630,452],{"class":430},[420,632,633,636],{"class":422,"line":485},[420,634,635],{"class":426},"  update-issues",[420,637,452],{"class":430},[420,639,640,643,645],{"class":422,"line":493},[420,641,642],{"class":426},"    runs-on",[420,644,431],{"class":430},[420,646,647],{"class":434}," ubuntu-latest\n",[420,649,650,652],{"class":422,"line":501},[420,651,526],{"class":426},[420,653,452],{"class":430},[420,655,656,658,660],{"class":422,"line":512},[420,657,534],{"class":426},[420,659,431],{"class":430},[420,661,539],{"class":434},[420,663,664,666,668],{"class":422,"line":523},[420,665,545],{"class":426},[420,667,431],{"class":430},[420,669,539],{"class":434},[420,671,672,674,676],{"class":422,"line":531},[420,673,555],{"class":426},[420,675,431],{"class":430},[420,677,560],{"class":434},[420,679,680,682,684],{"class":422,"line":542},[420,681,566],{"class":426},[420,683,431],{"class":430},[420,685,560],{"class":434},[420,687,688,691],{"class":422,"line":552},[420,689,690],{"class":426},"    steps",[420,692,452],{"class":430},[420,694,695,698,701,703],{"class":422,"line":563},[420,696,697],{"class":430},"      -",[420,699,700],{"class":426}," name",[420,702,431],{"class":430},[420,704,705],{"class":434}," Update project status for issues in this release\n",[420,707,709,712,714],{"class":422,"line":708},16,[420,710,711],{"class":426},"        uses",[420,713,431],{"class":430},[420,715,716],{"class":434}," actions\u002Fgithub-script@v8\n",[420,718,720,723],{"class":422,"line":719},17,[420,721,722],{"class":426},"        with",[420,724,452],{"class":430},[420,726,728,731,733],{"class":422,"line":727},18,[420,729,730],{"class":426},"          github-token",[420,732,431],{"class":430},[420,734,735],{"class":434}," ${{ secrets.PROJECT_V2_TOKEN || secrets.GITHUB_TOKEN }}\n",[420,737,739,742,744],{"class":422,"line":738},19,[420,740,741],{"class":426},"          script",[420,743,431],{"class":430},[420,745,747],{"class":746},"s7zQu"," |\n",[420,749,751],{"class":422,"line":750},20,[420,752,753],{"class":434},"            const owner = context.repo.owner;\n",[420,755,757],{"class":422,"line":756},21,[420,758,759],{"class":434},"            const repo = context.repo.repo;\n",[420,761,763],{"class":422,"line":762},22,[420,764,765],{"class":434},"            const release = context.payload.release;\n",[420,767,769],{"class":422,"line":768},23,[420,770,442],{"emptyLinePlaceholder":441},[420,772,774],{"class":422,"line":773},24,[420,775,776],{"class":434},"            \u002F\u002F Your IDs\n",[420,778,780],{"class":422,"line":779},25,[420,781,782],{"class":434},"            const PROJECT_ID = '\u003Cinsert ID>';\n",[420,784,786],{"class":422,"line":785},26,[420,787,788],{"class":434},"            const STATUS_FIELD_ID = '\u003Cinsert ID>';\n",[420,790,792],{"class":422,"line":791},27,[420,793,794],{"class":434},"            const DONE_OPTION_ID = '\u003Cinsert ID>';\n",[420,796,798],{"class":422,"line":797},28,[420,799,442],{"emptyLinePlaceholder":441},[420,801,803],{"class":422,"line":802},29,[420,804,805],{"class":434},"            const releaseUrl = release.html_url;\n",[420,807,809],{"class":422,"line":808},30,[420,810,811],{"class":434},"            const body = release.body || '';\n",[420,813,815],{"class":422,"line":814},31,[420,816,442],{"emptyLinePlaceholder":441},[420,818,820],{"class":422,"line":819},32,[420,821,822],{"class":434},"            \u002F\u002F Collect PR numbers mentioned in the release body: \"#123\" or \"pull\u002F123\"\n",[420,824,826],{"class":422,"line":825},33,[420,827,828],{"class":434},"            const prNumbers = [...body.matchAll(\u002F(?:#|pull\\\u002F)(\\d+)\u002Fg)]\n",[420,830,832],{"class":422,"line":831},34,[420,833,834],{"class":434},"              .map(m => parseInt(m[1], 10))\n",[420,836,838],{"class":422,"line":837},35,[420,839,840],{"class":434},"              .filter((n, i, arr) => arr.indexOf(n) === i);\n",[420,842,844],{"class":422,"line":843},36,[420,845,442],{"emptyLinePlaceholder":441},[420,847,849],{"class":422,"line":848},37,[420,850,851],{"class":434},"            console.log('PRs found in release notes:', prNumbers);\n",[420,853,855],{"class":422,"line":854},38,[420,856,442],{"emptyLinePlaceholder":441},[420,858,860],{"class":422,"line":859},39,[420,861,862],{"class":434},"            const gql = (query, variables) => github.graphql(query, variables);\n",[420,864,866],{"class":422,"line":865},40,[420,867,442],{"emptyLinePlaceholder":441},[420,869,871],{"class":422,"line":870},41,[420,872,873],{"class":434},"            for (const prNumber of prNumbers) {\n",[420,875,877],{"class":422,"line":876},42,[420,878,879],{"class":434},"              console.log(`Processing PR #${prNumber}`);\n",[420,881,883],{"class":422,"line":882},43,[420,884,442],{"emptyLinePlaceholder":441},[420,886,888],{"class":422,"line":887},44,[420,889,890],{"class":434},"              \u002F\u002F 1) Get issues that PR closes\n",[420,892,894],{"class":422,"line":893},45,[420,895,896],{"class":434},"              const prData = await gql(\n",[420,898,900],{"class":422,"line":899},46,[420,901,902],{"class":434},"                `\n",[420,904,906],{"class":422,"line":905},47,[420,907,908],{"class":434},"                query($owner: String!, $repo: String!, $pr: Int!) {\n",[420,910,912],{"class":422,"line":911},48,[420,913,914],{"class":434},"                  repository(owner: $owner, name: $repo) {\n",[420,916,918],{"class":422,"line":917},49,[420,919,920],{"class":434},"                    pullRequest(number: $pr) {\n",[420,922,924],{"class":422,"line":923},50,[420,925,926],{"class":434},"                      closingIssuesReferences(first: 50) {\n",[420,928,930],{"class":422,"line":929},51,[420,931,932],{"class":434},"                        nodes {\n",[420,934,936],{"class":422,"line":935},52,[420,937,938],{"class":434},"                          id\n",[420,940,942],{"class":422,"line":941},53,[420,943,944],{"class":434},"                          number\n",[420,946,948],{"class":422,"line":947},54,[420,949,950],{"class":434},"                          title\n",[420,952,954],{"class":422,"line":953},55,[420,955,956],{"class":434},"                        }\n",[420,958,960],{"class":422,"line":959},56,[420,961,962],{"class":434},"                      }\n",[420,964,966],{"class":422,"line":965},57,[420,967,968],{"class":434},"                    }\n",[420,970,972],{"class":422,"line":971},58,[420,973,974],{"class":434},"                  }\n",[420,976,978],{"class":422,"line":977},59,[420,979,980],{"class":434},"                }\n",[420,982,984],{"class":422,"line":983},60,[420,985,986],{"class":434},"                `,\n",[420,988,990],{"class":422,"line":989},61,[420,991,992],{"class":434},"                { owner, repo, pr: prNumber }\n",[420,994,996],{"class":422,"line":995},62,[420,997,998],{"class":434},"              );\n",[420,1000,1002],{"class":422,"line":1001},63,[420,1003,442],{"emptyLinePlaceholder":441},[420,1005,1007],{"class":422,"line":1006},64,[420,1008,1009],{"class":434},"              const issues =\n",[420,1011,1013],{"class":422,"line":1012},65,[420,1014,1015],{"class":434},"                prData.repository.pullRequest?.closingIssuesReferences?.nodes || [];\n",[420,1017,1019],{"class":422,"line":1018},66,[420,1020,442],{"emptyLinePlaceholder":441},[420,1022,1024],{"class":422,"line":1023},67,[420,1025,1026],{"class":434},"              if (!issues.length) {\n",[420,1028,1030],{"class":422,"line":1029},68,[420,1031,1032],{"class":434},"                console.log(`No closing issues for PR #${prNumber}`);\n",[420,1034,1036],{"class":422,"line":1035},69,[420,1037,1038],{"class":434},"                continue;\n",[420,1040,1042],{"class":422,"line":1041},70,[420,1043,1044],{"class":434},"              }\n",[420,1046,1048],{"class":422,"line":1047},71,[420,1049,442],{"emptyLinePlaceholder":441},[420,1051,1053],{"class":422,"line":1052},72,[420,1054,1055],{"class":434},"              for (const issue of issues) {\n",[420,1057,1059],{"class":422,"line":1058},73,[420,1060,1061],{"class":434},"                console.log(`Updating project status for issue #${issue.number}`);\n",[420,1063,1065],{"class":422,"line":1064},74,[420,1066,442],{"emptyLinePlaceholder":441},[420,1068,1070],{"class":422,"line":1069},75,[420,1071,1072],{"class":434},"                \u002F\u002F 2) Find the ProjectV2 item for this issue on your project\n",[420,1074,1076],{"class":422,"line":1075},76,[420,1077,1078],{"class":434},"                const itemData = await gql(\n",[420,1080,1082],{"class":422,"line":1081},77,[420,1083,1084],{"class":434},"                  `\n",[420,1086,1088],{"class":422,"line":1087},78,[420,1089,1090],{"class":434},"                  query($projectId: ID!, $issueSearch: String!) {\n",[420,1092,1094],{"class":422,"line":1093},79,[420,1095,1096],{"class":434},"                    node(id: $projectId) {\n",[420,1098,1100],{"class":422,"line":1099},80,[420,1101,1102],{"class":434},"                      ... on ProjectV2 {\n",[420,1104,1106],{"class":422,"line":1105},81,[420,1107,1108],{"class":434},"                        items(first: 50, query: $issueSearch) {\n",[420,1110,1112],{"class":422,"line":1111},82,[420,1113,1114],{"class":434},"                          nodes {\n",[420,1116,1118],{"class":422,"line":1117},83,[420,1119,1120],{"class":434},"                            id\n",[420,1122,1124],{"class":422,"line":1123},84,[420,1125,1126],{"class":434},"                            content {\n",[420,1128,1130],{"class":422,"line":1129},85,[420,1131,1132],{"class":434},"                              ... on Issue {\n",[420,1134,1136],{"class":422,"line":1135},86,[420,1137,1138],{"class":434},"                                id\n",[420,1140,1142],{"class":422,"line":1141},87,[420,1143,1144],{"class":434},"                              }\n",[420,1146,1148],{"class":422,"line":1147},88,[420,1149,1150],{"class":434},"                            }\n",[420,1152,1154],{"class":422,"line":1153},89,[420,1155,1156],{"class":434},"                          }\n",[420,1158,1160],{"class":422,"line":1159},90,[420,1161,956],{"class":434},[420,1163,1165],{"class":422,"line":1164},91,[420,1166,962],{"class":434},[420,1168,1170],{"class":422,"line":1169},92,[420,1171,968],{"class":434},[420,1173,1175],{"class":422,"line":1174},93,[420,1176,974],{"class":434},[420,1178,1180],{"class":422,"line":1179},94,[420,1181,1182],{"class":434},"                  `,\n",[420,1184,1186],{"class":422,"line":1185},95,[420,1187,1188],{"class":434},"                  { projectId: PROJECT_ID, issueSearch: `${issue.number}` }\n",[420,1190,1192],{"class":422,"line":1191},96,[420,1193,1194],{"class":434},"                );\n",[420,1196,1198],{"class":422,"line":1197},97,[420,1199,442],{"emptyLinePlaceholder":441},[420,1201,1203],{"class":422,"line":1202},98,[420,1204,1205],{"class":434},"                const items = itemData.node?.items?.nodes || [];\n",[420,1207,1209],{"class":422,"line":1208},99,[420,1210,1211],{"class":434},"                const projectItem = items.find(\n",[420,1213,1215],{"class":422,"line":1214},100,[420,1216,1217],{"class":434},"                  (it) => it.content && it.content.id === issue.id\n",[420,1219,1221],{"class":422,"line":1220},101,[420,1222,1194],{"class":434},[420,1224,1226],{"class":422,"line":1225},102,[420,1227,442],{"emptyLinePlaceholder":441},[420,1229,1231],{"class":422,"line":1230},103,[420,1232,1233],{"class":434},"                if (!projectItem) {\n",[420,1235,1237],{"class":422,"line":1236},104,[420,1238,1239],{"class":434},"                  console.log(`No project item found for issue #${issue.number}`);\n",[420,1241,1243],{"class":422,"line":1242},105,[420,1244,1245],{"class":434},"                  continue;\n",[420,1247,1249],{"class":422,"line":1248},106,[420,1250,980],{"class":434},[420,1252,1254],{"class":422,"line":1253},107,[420,1255,442],{"emptyLinePlaceholder":441},[420,1257,1259],{"class":422,"line":1258},108,[420,1260,1261],{"class":434},"                const itemId = projectItem.id;\n",[420,1263,1265],{"class":422,"line":1264},109,[420,1266,442],{"emptyLinePlaceholder":441},[420,1268,1270],{"class":422,"line":1269},110,[420,1271,1272],{"class":434},"                \u002F\u002F 3) Set Status = Done\n",[420,1274,1276],{"class":422,"line":1275},111,[420,1277,1278],{"class":434},"                await gql(\n",[420,1280,1282],{"class":422,"line":1281},112,[420,1283,1084],{"class":434},[420,1285,1287],{"class":422,"line":1286},113,[420,1288,1289],{"class":434},"                  mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) {\n",[420,1291,1293],{"class":422,"line":1292},114,[420,1294,1295],{"class":434},"                    updateProjectV2ItemFieldValue(\n",[420,1297,1299],{"class":422,"line":1298},115,[420,1300,1301],{"class":434},"                      input: {\n",[420,1303,1305],{"class":422,"line":1304},116,[420,1306,1307],{"class":434},"                        projectId: $projectId\n",[420,1309,1311],{"class":422,"line":1310},117,[420,1312,1313],{"class":434},"                        itemId: $itemId\n",[420,1315,1317],{"class":422,"line":1316},118,[420,1318,1319],{"class":434},"                        fieldId: $fieldId\n",[420,1321,1323],{"class":422,"line":1322},119,[420,1324,1325],{"class":434},"                        value: { singleSelectOptionId: $optionId }\n",[420,1327,1329],{"class":422,"line":1328},120,[420,1330,962],{"class":434},[420,1332,1334],{"class":422,"line":1333},121,[420,1335,1336],{"class":434},"                    ) {\n",[420,1338,1340],{"class":422,"line":1339},122,[420,1341,1342],{"class":434},"                      projectV2Item { id }\n",[420,1344,1346],{"class":422,"line":1345},123,[420,1347,968],{"class":434},[420,1349,1351],{"class":422,"line":1350},124,[420,1352,974],{"class":434},[420,1354,1356],{"class":422,"line":1355},125,[420,1357,1182],{"class":434},[420,1359,1361],{"class":422,"line":1360},126,[420,1362,1363],{"class":434},"                  {\n",[420,1365,1367],{"class":422,"line":1366},127,[420,1368,1369],{"class":434},"                    projectId: PROJECT_ID,\n",[420,1371,1373],{"class":422,"line":1372},128,[420,1374,1375],{"class":434},"                    itemId,\n",[420,1377,1379],{"class":422,"line":1378},129,[420,1380,1381],{"class":434},"                    fieldId: STATUS_FIELD_ID,\n",[420,1383,1385],{"class":422,"line":1384},130,[420,1386,1387],{"class":434},"                    optionId: DONE_OPTION_ID,\n",[420,1389,1391],{"class":422,"line":1390},131,[420,1392,974],{"class":434},[420,1394,1396],{"class":422,"line":1395},132,[420,1397,1194],{"class":434},[420,1399,1401],{"class":422,"line":1400},133,[420,1402,442],{"emptyLinePlaceholder":441},[420,1404,1406],{"class":422,"line":1405},134,[420,1407,1408],{"class":434},"                console.log(\n",[420,1410,1412],{"class":422,"line":1411},135,[420,1413,1414],{"class":434},"                  `Issue #${issue.number} status moved to Done (release ${release.tag_name})`\n",[420,1416,1418],{"class":422,"line":1417},136,[420,1419,1194],{"class":434},[420,1421,1423],{"class":422,"line":1422},137,[420,1424,442],{"emptyLinePlaceholder":441},[420,1426,1428],{"class":422,"line":1427},138,[420,1429,1430],{"class":434},"                \u002F\u002F 4) Add a comment linking back to this release\n",[420,1432,1434],{"class":422,"line":1433},139,[420,1435,1436],{"class":434},"                await github.rest.issues.createComment({\n",[420,1438,1440],{"class":422,"line":1439},140,[420,1441,1442],{"class":434},"                  owner,\n",[420,1444,1446],{"class":422,"line":1445},141,[420,1447,1448],{"class":434},"                  repo,\n",[420,1450,1452],{"class":422,"line":1451},142,[420,1453,1454],{"class":434},"                  issue_number: issue.number,\n",[420,1456,1458],{"class":422,"line":1457},143,[420,1459,1460],{"class":434},"                  body: `Marked as **Done** when release [${release.tag_name}](${releaseUrl}) was published (includes PR #${prNumber}).`\n",[420,1462,1464],{"class":422,"line":1463},144,[420,1465,1466],{"class":434},"                });\n",[420,1468,1470],{"class":422,"line":1469},145,[420,1471,1044],{"class":434},[420,1473,1475],{"class":422,"line":1474},146,[420,1476,1477],{"class":434},"            }\n",[579,1479,1481],{"id":1480},"handling-new-issues-added-to-a-repo","Handling new issues added to a repo",[380,1483,1484,1485,1488],{},"This workflow applies the ",[384,1486,1487],{},"Needs Triage"," label to newly opened issues and adds them to the Development Board.",[411,1490,1492],{"className":413,"code":1491,"language":415,"meta":416,"style":416},"name: Process New Issues\n\non:\n  workflow_call:\n\njobs:\n  label_issues:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n    steps:\n      - name: Add 'Needs Triage' label\n        run: |\n          curl -X POST \\\n            -H \"Accept: application\u002Fvnd.github+json\" \\\n            -H \"Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}\" \\\n            -H \"X-GitHub-Api-Version: 2022-11-28\" \\\n            https:\u002F\u002Fapi.github.com\u002Frepos\u002F${{ github.repository }}\u002Fissues\u002F${{ github.event.issue.number }}\u002Flabels \\\n            -d '{\"labels\":[\"Needs Triage\"]}'\n  add-to-dev-project:\n    name: Add issue to dev project\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fadd-to-project@244f685bbc3b7adfa8466e08b698b5577571133e # v1.0.2\n        with:\n          project-url: https:\u002F\u002Fgithub.com\u002Forgs\u002FES-Profiler\u002Fprojects\u002F2\n          github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}\n",[384,1493,1494,1503,1507,1513,1519,1523,1529,1536,1544,1550,1558,1564,1575,1584,1589,1594,1599,1604,1609,1614,1621,1631,1639,1645,1661,1667,1677],{"__ignoreMap":416},[420,1495,1496,1498,1500],{"class":422,"line":423},[420,1497,427],{"class":426},[420,1499,431],{"class":430},[420,1501,1502],{"class":434}," Process New Issues\n",[420,1504,1505],{"class":422,"line":438},[420,1506,442],{"emptyLinePlaceholder":441},[420,1508,1509,1511],{"class":422,"line":445},[420,1510,449],{"class":448},[420,1512,452],{"class":430},[420,1514,1515,1517],{"class":422,"line":455},[420,1516,618],{"class":426},[420,1518,452],{"class":430},[420,1520,1521],{"class":422,"line":463},[420,1522,442],{"emptyLinePlaceholder":441},[420,1524,1525,1527],{"class":422,"line":480},[420,1526,488],{"class":426},[420,1528,452],{"class":430},[420,1530,1531,1534],{"class":422,"line":485},[420,1532,1533],{"class":426},"  label_issues",[420,1535,452],{"class":430},[420,1537,1538,1540,1542],{"class":422,"line":493},[420,1539,642],{"class":426},[420,1541,431],{"class":430},[420,1543,647],{"class":434},[420,1545,1546,1548],{"class":422,"line":501},[420,1547,526],{"class":426},[420,1549,452],{"class":430},[420,1551,1552,1554,1556],{"class":422,"line":512},[420,1553,555],{"class":426},[420,1555,431],{"class":430},[420,1557,560],{"class":434},[420,1559,1560,1562],{"class":422,"line":523},[420,1561,690],{"class":426},[420,1563,452],{"class":430},[420,1565,1566,1568,1570,1572],{"class":422,"line":531},[420,1567,697],{"class":430},[420,1569,700],{"class":426},[420,1571,431],{"class":430},[420,1573,1574],{"class":434}," Add 'Needs Triage' label\n",[420,1576,1577,1580,1582],{"class":422,"line":542},[420,1578,1579],{"class":426},"        run",[420,1581,431],{"class":430},[420,1583,747],{"class":746},[420,1585,1586],{"class":422,"line":552},[420,1587,1588],{"class":434},"          curl -X POST \\\n",[420,1590,1591],{"class":422,"line":563},[420,1592,1593],{"class":434},"            -H \"Accept: application\u002Fvnd.github+json\" \\\n",[420,1595,1596],{"class":422,"line":708},[420,1597,1598],{"class":434},"            -H \"Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}\" \\\n",[420,1600,1601],{"class":422,"line":719},[420,1602,1603],{"class":434},"            -H \"X-GitHub-Api-Version: 2022-11-28\" \\\n",[420,1605,1606],{"class":422,"line":727},[420,1607,1608],{"class":434},"            https:\u002F\u002Fapi.github.com\u002Frepos\u002F${{ github.repository }}\u002Fissues\u002F${{ github.event.issue.number }}\u002Flabels \\\n",[420,1610,1611],{"class":422,"line":738},[420,1612,1613],{"class":434},"            -d '{\"labels\":[\"Needs Triage\"]}'\n",[420,1615,1616,1619],{"class":422,"line":750},[420,1617,1618],{"class":426},"  add-to-dev-project",[420,1620,452],{"class":430},[420,1622,1623,1626,1628],{"class":422,"line":756},[420,1624,1625],{"class":426},"    name",[420,1627,431],{"class":430},[420,1629,1630],{"class":434}," Add issue to dev project\n",[420,1632,1633,1635,1637],{"class":422,"line":762},[420,1634,642],{"class":426},[420,1636,431],{"class":430},[420,1638,647],{"class":434},[420,1640,1641,1643],{"class":422,"line":768},[420,1642,690],{"class":426},[420,1644,452],{"class":430},[420,1646,1647,1649,1652,1654,1657],{"class":422,"line":773},[420,1648,697],{"class":430},[420,1650,1651],{"class":426}," uses",[420,1653,431],{"class":430},[420,1655,1656],{"class":434}," actions\u002Fadd-to-project@244f685bbc3b7adfa8466e08b698b5577571133e",[420,1658,1660],{"class":1659},"sHwdD"," # v1.0.2\n",[420,1662,1663,1665],{"class":422,"line":779},[420,1664,722],{"class":426},[420,1666,452],{"class":430},[420,1668,1669,1672,1674],{"class":422,"line":785},[420,1670,1671],{"class":426},"          project-url",[420,1673,431],{"class":430},[420,1675,1676],{"class":434}," https:\u002F\u002Fgithub.com\u002Forgs\u002FES-Profiler\u002Fprojects\u002F2\n",[420,1678,1679,1681,1683],{"class":422,"line":791},[420,1680,730],{"class":426},[420,1682,431],{"class":430},[420,1684,1685],{"class":434}," ${{ secrets.ADD_TO_PROJECT_PAT }}\n",[572,1687],{},[572,1689],{},[375,1691,1693],{"id":1692},"important-token-requirements-for-project-access","Important: token requirements for project access",[380,1695,1696,1697,1700,1701,1704,1705,1708],{},"For GitHub Project operations in centralised workflows, you will typically need a PAT secret (for example, ",[384,1698,1699],{},"PROJECT_V2_TOKEN"," or ",[384,1702,1703],{},"ADD_TO_PROJECT_PAT",") because ",[384,1706,1707],{},"GITHUB_TOKEN"," may not have the required project-level access across repositories.",[380,1710,1711,1712,387],{},"Use a fine-grained PAT with the minimum required permissions and store it in repository or organisation secrets. For setup instructions, see ",[1713,1714,1716],"a",{"href":1715},".\u002Fpersonal-access-token#how-to-create-a-fine-grained-token","How to create a fine-grained token",[1718,1719,1720],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":416,"searchDepth":438,"depth":438,"links":1722},[1723,1724,1728],{"id":377,"depth":438,"text":378},{"id":576,"depth":438,"text":577,"children":1725},[1726,1727],{"id":581,"depth":445,"text":582},{"id":1480,"depth":445,"text":1481},{"id":1692,"depth":438,"text":1693},"Reusable and centralised GitHub Actions workflows used across ESProfiler repositories.","md",null,{},{"title":193,"description":1729},"E4qxEMz5znQKgohVNYt7ZfkC9PSJZxVxMvmOY6GGfT4",[1736,1738],{"title":189,"path":190,"stem":191,"description":1737,"children":-1},"Troubleshooting guide for GitHub issues.",{"title":197,"path":198,"stem":199,"description":1739,"children":-1},"Everything you need to know about observability of ESProfiler, as well as reporting and handling issues as they arise with infrastructure and hosting.",1790076749349]