Skip to content

Commit a46c313

Browse files
authored
Merge branch 'ArmDeveloperEcosystem:main' into main
2 parents 1ebad1b + 7bc12f1 commit a46c313

68 files changed

Lines changed: 1821 additions & 73 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 153 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,191 @@
1-
name: Update Project Fields on Label and Status Change
1+
name: Update Roadmap Dates
22

33
on:
44
pull_request:
5-
types:
6-
- labeled
7-
workflow_dispatch:
5+
types: [labeled]
86

97
jobs:
10-
update-project-dates:
8+
update-roadmap-dates:
119
runs-on: ubuntu-latest
10+
if: |
11+
github.event.label.name == 'awaiting_tech_review' ||
12+
github.event.label.name == 'publish'
13+
14+
permissions:
15+
contents: read
16+
pull-requests: read
17+
repository-projects: write
18+
1219
steps:
13-
- name: Check out code
20+
- name: Checkout repository
1421
uses: actions/checkout@v3
1522

16-
- name: Run GitHub Script
17-
uses: actions/github-script@v7
23+
- name: Setup Node.js
24+
uses: actions/setup-node@v3
25+
with:
26+
node-version: '18.x'
27+
28+
- name: Install Octokit
29+
run: npm install @octokit/rest
30+
31+
- name: Debug Token
32+
run: echo "Token is set"
33+
env:
34+
PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}
35+
36+
- name: Update Project Board Dates
37+
uses: actions/github-script@v6
1838
with:
19-
github-token: ${{ secrets.GITHUB_TOKEN }} # replace with your token secret name
39+
PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}
2040
script: |
21-
const projectId = "PVT_kwDOBVR2-M4A2QVf"; // Replace with your actual project node ID
22-
const fieldStartId = "PVTF_lADOBVR2-M4A2QVfzgrvSF4"; // Replace with Start Date field node ID
23-
const fieldPublishId = "PVTF_lADOBVR2-M4A2QVfzgrvSMA"; // Replace with Publish Date field node ID
41+
const { Octokit } = require('@octokit/rest');
42+
const octokit = new Octokit({ auth:process.env.GITHUB_TOKEN });
2443
25-
const label = context.payload.label ? context.payload.label.name : null;
44+
const projectNumber = 4; // Your project number
45+
const orgName = 'ArmDeveloperEcosystem';
46+
const prNumber = context.payload.pull_request.number;
47+
const labelName = context.payload.label.name;
2648
27-
if (!label) {
28-
console.log("No label found in the payload.");
29-
return;
30-
}
31-
const prNodeId = context.payload.pull_request.node_id;
32-
33-
// Get the project item for this PR
34-
const { repository } = await github.graphql(`
35-
query($owner: String!, $repo: String!, $prNumber: Int!) {
36-
repository(owner: $owner, name: $repo) {
37-
pullRequest(number: $prNumber) {
38-
projectItems(first: 10) {
39-
nodes {
49+
async function getProjectItemForPR() {
50+
// Get the project ID
51+
const projectQuery = `
52+
query {
53+
organization(login:"${orgName}") {
54+
projectV2(number:${projectNumber}) {
4055
id
41-
fieldValues(first: 10) {
56+
}
57+
}
58+
}
59+
`;
60+
61+
const projectResponse = await octokit.graphql(projectQuery);
62+
const projectId = projectResponse.organization.projectV2.id;
63+
64+
// Find the PR in the project
65+
const prQuery = `
66+
query {
67+
organization(login:"${orgName}") {
68+
projectV2(number:${projectNumber}) {
69+
items(first:100) {
70+
nodes {
71+
id
72+
content {
73+
... on PullRequest {
74+
number
75+
repository {
76+
name
77+
}
78+
}
79+
}
80+
}
81+
}
82+
}
83+
}
84+
}
85+
`;
86+
87+
const prResponse = await octokit.graphql(prQuery);
88+
const items = prResponse.organization.projectV2.items.nodes;
89+
90+
// Find the item that corresponds to this PR
91+
const item = items.find(item =>
92+
item.content &&
93+
item.content.number === prNumber &&
94+
item.content.repository.name === context.repo.repo
95+
);
96+
97+
return { projectId, itemId:item ? item.id:null };
98+
}
99+
100+
async function getFieldId(projectId, fieldName) {
101+
const fieldsQuery = `
102+
query {
103+
node(id:"${projectId}") {
104+
... on ProjectV2 {
105+
fields(first:20) {
42106
nodes {
43-
field {
107+
... on ProjectV2Field {
108+
id
44109
name
45110
}
46-
... on ProjectV2ItemFieldDateValue {
47-
date
111+
... on ProjectV2IterationField {
112+
id
113+
name
48114
}
49-
... on ProjectV2ItemFieldTextValue {
50-
text
115+
... on ProjectV2SingleSelectField {
116+
id
117+
name
51118
}
52-
... on ProjectV2ItemFieldSingleSelectValue {
119+
... on ProjectV2DateField {
120+
id
53121
name
54122
}
55123
}
56124
}
57125
}
58-
}
59-
60-
`, {
61-
owner: context.repo.owner,
62-
repo: context.repo.repo,
63-
prNumber: context.issue.number,
64-
});
65-
66-
const item = repository.pullRequest.projectItems.nodes[0];
67-
if (!item) {
68-
console.log("No project item found for this PR.");
69-
return;
70-
}
126+
}
127+
}
128+
`;
71129
72-
const itemId = item.id;
130+
const fieldsResponse = await octokit.graphql(fieldsQuery);
131+
const fields = fieldsResponse.node.fields.nodes;
132+
const field = fields.find(f => f.name === fieldName);
73133
74-
const today = new Date().toISOString().split("T")[0]; // e.g., "2025-04-10"
134+
return field ? field.id :null;
135+
}
75136
76-
if (label === "awaiting_tech_review") {
77-
console.log("Setting Start Date...");
78-
await github.graphql(`
137+
async function updateDateField(projectId, itemId, fieldId, date) {
138+
const mutation = `
79139
mutation {
80-
updateProjectV2ItemFieldValue(input: {
81-
projectId: "${projectId}",
82-
itemId: "${itemId}",
83-
fieldId: "${fieldStartId}",
84-
value: { date: "${today}" }
85-
}) {
140+
updateProjectV2ItemFieldValue(
141+
input:{
142+
projectId:"${projectId}"
143+
itemId:"${itemId}"
144+
fieldId:"${fieldId}"
145+
value:{
146+
date:"${date}"
147+
}
148+
}
149+
) {
86150
projectV2Item {
87151
id
88152
}
89153
}
90154
}
91-
`);
155+
`;
156+
157+
return await octokit.graphql(mutation);
92158
}
93159
94-
if (label === "publish") {
95-
console.log("Setting Publish Date...");
96-
await github.graphql(`
97-
mutation {
98-
updateProjectV2ItemFieldValue(input: {
99-
projectId: "${projectId}",
100-
itemId: "${itemId}",
101-
fieldId: "${fieldPublishId}",
102-
value: { date: "${today}" }
103-
}) {
104-
projectV2Item {
105-
id
106-
}
160+
async function main() {
161+
try {
162+
const { projectId, itemId } = await getProjectItemForPR();
163+
if (!itemId) {
164+
console.log('PR not found in project board');
165+
return;
166+
}
167+
168+
const today = new Date().toISOString().split('T')[0]; // YYYY-MM-DD format
169+
170+
if (labelName === 'awaiting_tech_review') {
171+
const startDateFieldId = await getFieldId(projectId, 'Start Date');
172+
if (startDateFieldId) {
173+
await updateDateField(projectId, itemId, startDateFieldId, today);
174+
console.log('Updated Start Date to', today);
175+
} else {
176+
console.log('Start Date field not found');
177+
}
178+
} else if (labelName === 'publish') {
179+
const publishDateFieldId = await getFieldId(projectId, 'Publish Date');
180+
if (publishDateFieldId) {
181+
await updateDateField(projectId, itemId, publishDateFieldId, today);
182+
console.log('Updated Publish Date to', today);
183+
} else {
184+
console.log('Publish Date field not found');
107185
}
108186
}
109-
`);
187+
} catch (error) {
188+
console.error('Error updating project board:', error);
189+
core.setFailed(`Error updating project board:${error.message}`);
190+
}
110191
}

content/install-guides/topdown-tool.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ Install `topdown-tool` in `/usr/local/bin`:
9595

9696
```bash
9797
cd telemetry-solution/tools/topdown_tool
98-
sudo pip install -e .
98+
pip install -e .
9999
```
100100

101101
3. Confirm you can run `top-down` using the `version` command:
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
title: Boost C++ performance by optimizing loops with boundary information
3+
4+
draft: true
5+
cascade:
6+
draft: true
7+
8+
minutes_to_complete: 15
9+
10+
who_is_this_for: This is an introductory topic for C++ developers who want to improve the runtime of loops using existing knowledge of the loop size.
11+
12+
learning_objectives:
13+
- Learn how to communicate loop size constraints to the compiler for better optimization.
14+
- Understand how providing compile-time context can improve runtime performance.
15+
- Implement techniques to express loop boundaries that enable better code generation.
16+
- Compare and analyze the performance impact of providing loop size context.
17+
18+
prerequisites:
19+
- An Arm computer running Linux. You can also use a virtual machine from a [cloud service provider](/learning-paths/servers-and-cloud-computing/csp/).
20+
21+
author: Kieran Hejmadi
22+
23+
### Tags
24+
skilllevels: Introductory
25+
subjects: Performance and Architecture
26+
armips:
27+
- Neoverse
28+
- Cortex-A
29+
tools_software_languages:
30+
- C++
31+
- Runbook
32+
operatingsystems:
33+
- Linux
34+
35+
### Cross-platform metadata only
36+
shared_path: true
37+
shared_between:
38+
- servers-and-cloud-computing
39+
- laptops-and-desktops
40+
41+
further_reading:
42+
- resource:
43+
title: GCC Optimization Options Documentation
44+
link: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
45+
type: documentation
46+
- resource:
47+
title: LLVM Loop Vectorization Guide
48+
link: https://llvm.org/docs/Vectorizers.html
49+
type: documentation
50+
51+
52+
### FIXED, DO NOT MODIFY
53+
# ================================================================================
54+
weight: 1 # _index.md always has weight of 1 to order correctly
55+
layout: "learningpathall" # All files under learning paths have this same wrapper
56+
learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content.
57+
---
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
# ================================================================================
3+
# FIXED, DO NOT MODIFY THIS FILE
4+
# ================================================================================
5+
weight: 21 # Set to always be larger than the content in this path to be at the end of the navigation.
6+
title: "Next Steps" # Always the same, html page title.
7+
layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing.
8+
---

0 commit comments

Comments
 (0)