Skip to content

Commit 5bb0856

Browse files
authored
Merge branch 'main' into sbom
2 parents 17f5943 + d6390bd commit 5bb0856

2,960 files changed

Lines changed: 2328731 additions & 22801 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.asf.yaml‎

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
# under the License.
1717

1818
# https://cwiki.apache.org/confluence/display/INFRA/git+-+.asf.yaml+features
19-
---
2019
github:
2120
description: "Apache CloudStack is an opensource Infrastructure as a Service (IaaS) cloud computing platform"
2221
homepage: https://cloudstack.apache.org/
@@ -50,18 +49,33 @@ github:
5049
rebase: false
5150

5251
collaborators:
53-
- acs-robot
54-
- gpordeus
55-
- hsato03
56-
- FelipeM525
57-
- lucas-a-martins
58-
- nicoschmdt
59-
- abh1sar
60-
- rosi-shapeblue
61-
- sudo87
52+
- ingox
53+
- gp-santos
6254
- erikbocks
55+
- Imvedansh
56+
- Damans227
57+
- jmsperu
58+
- GaOrtiga
59+
- bhouse-nexthop
60+
- Dogface2k
61+
- prashanthr2
6362

64-
protected_branches: ~
63+
rulesets:
64+
- name: "Default Branch Protection"
65+
type: branch
66+
branches:
67+
includes:
68+
- "~DEFAULT_BRANCH"
69+
excludes: []
70+
bypass_teams:
71+
- root
72+
restrict_deletion: true
73+
restrict_force_push: true
74+
75+
copilot_code_review:
76+
enabled: true
77+
review_drafts: false
78+
review_on_push: true
6579

6680
notifications:
6781
commits: commits@cloudstack.apache.org

‎.codespellrc‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Licensed to the Apache Software Foundation (ASF) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The ASF licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
18+
[codespell]
19+
ignore-words = .github/linters/codespell.txt
20+
skip = systemvm/agent/noVNC/*,ui/package.json,ui/package-lock.json,ui/public/js/less.min.js,ui/public/locales/*.json,server/src/test/java/org/apache/cloudstack/network/ssl/CertServiceTest.java,test/integration/smoke/test_ssl_offloading.py,tools/apidoc-versions-diff/*

‎.editorconfig‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Licensed to the Apache Software Foundation (ASF) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The ASF licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
root = true
18+
19+
[*]
20+
charset = utf-8
21+
end_of_line = lf
22+
# indent_size = 4
23+
indent_style = space
24+
insert_final_newline = true
25+
# max_line_length = 120
26+
# tab_width = 4

‎.gitattributes‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.github/workflows/*.lock.yml linguist-generated=true

‎.github/CODEOWNERS‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717

1818
/plugins/storage/volume/linstor @rp-
1919
/plugins/storage/volume/storpool @slavkap
20+
/plugins/storage/volume/ontap @rajiv-jain-netapp @sandeeplocharla @piyush5netapp @suryag1201
2021

2122
.pre-commit-config.yaml @jbampton
2223
/.github/linters/ @jbampton
24+
25+
/plugins/network-elements/nsx/ @Pearl1594 @nvazquez

‎.github/COPILOT_TOKENS.md‎

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<!--
2+
Licensed to the Apache Software Foundation (ASF) under one
3+
or more contributor license agreements. See the NOTICE file
4+
distributed with this work for additional information
5+
regarding copyright ownership. The ASF licenses this file
6+
to you under the Apache License, Version 2.0 (the
7+
"License"); you may not use this file except in compliance
8+
with the License. You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing,
13+
software distributed under the License is distributed on an
14+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
KIND, either express or implied. See the License for the
16+
specific language governing permissions and limitations
17+
under the License.
18+
-->
19+
20+
# Contributing a Copilot token for the agentic workflows
21+
22+
This repo runs scheduled [GitHub Agentic Workflows](https://github.github.com/gh-aw/) (the
23+
`*.lock.yml` files compiled from `*.md` in `.github/workflows/`) that drive the GitHub Copilot
24+
CLI. Each run needs a GitHub token from an account with an active Copilot license. So that no
25+
single person's Copilot quota gets burned through, runs rotate day by day across a pool of
26+
volunteer tokens.
27+
28+
If you have a Copilot license and want to help share the load, add your token to the pool.
29+
30+
## What kind of token
31+
32+
- A fine-grained personal access token. Classic PATs don't work with the Copilot CLI.
33+
- Resource owner: your own personal account.
34+
- Permission: Account permissions > "Copilot Requests" > Read. That's the only permission it
35+
needs, no repo access.
36+
- Your account must have an active Copilot seat.
37+
38+
Create it at <https://github.com/settings/personal-access-tokens/new>. Give it a sensible
39+
expiration; when it lapses the health check (below) will flag it and you can re-add it.
40+
41+
## How to add it
42+
43+
1. Pick a short alias for yourself, e.g. `t1`, `t2`, `vol3`. The alias shows up in workflow logs,
44+
so keep it non-identifying if you prefer.
45+
2. Add your token as a repository secret named `COPILOT_GITHUB_TOKEN_<alias>`
46+
(e.g. `COPILOT_GITHUB_TOKEN_t1`). Repo admins do this via
47+
*Settings > Secrets and variables > Actions > New repository secret*, or:
48+
```
49+
gh secret set COPILOT_GITHUB_TOKEN_t1 --body "github_pat_xxx"
50+
```
51+
3. Ask a repo admin to register the alias by appending it to the repository variable
52+
`GH_AW_COPILOT_TOKEN_NAMES`, which is a JSON array:
53+
```
54+
gh variable set GH_AW_COPILOT_TOKEN_NAMES --body '["t1","t2","t3"]'
55+
```
56+
The workflows can't enumerate secrets, so this variable is the source of truth for the pool.
57+
A token isn't used until its alias is listed there.
58+
59+
## How rotation works (for maintainers)
60+
61+
Each agent workflow (`weekly-repo-status`, `daily-issue-triage`) defines a `pick_copilot_token`
62+
job in its `.md` source. The job has to run outside the agent job because strict mode forbids
63+
reading secrets there. It picks today's alias by day-of-year mod N, checks the token is live
64+
(`GET /user` returns 200, otherwise it moves on to the next candidate) and outputs the chosen
65+
alias. The token value itself never crosses jobs. The two workflows use different
66+
`ROTATION_SLOT`s, which start them half the pool apart so they don't land on the same
67+
volunteer on the same day (with at least two tokens in the pool).
68+
69+
The agent job resolves the secret itself via
70+
`secrets[format('COPILOT_GITHUB_TOKEN_{0}', needs.pick_copilot_token.outputs.name)]` and falls
71+
back to the base `COPILOT_GITHUB_TOKEN` when the pick job outputs an empty name. Keep the base
72+
secret set to one reliable token.
73+
74+
`gh aw compile` doesn't know about this wiring, so after editing the `.md` sources run:
75+
76+
```
77+
gh aw compile && bash .github/scripts/post-compile.sh
78+
```
79+
80+
See the header of `.github/scripts/post-compile.sh` for what it patches.
81+
82+
To check the pool, trigger the "Copilot token health" workflow
83+
(`.github/workflows/copilot-token-health.yml`) from the Actions tab. It prints an HTTP status
84+
code per alias and nothing else, so no account identities end up in logs. Note it can't tell
85+
when a token is live but has used up its monthly Copilot requests.
86+
87+
## Removing a token
88+
89+
Delete the `COPILOT_GITHUB_TOKEN_<alias>` secret and remove `<alias>` from
90+
`GH_AW_COPILOT_TOKEN_NAMES`.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Licensed to the Apache Software Foundation (ASF) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The ASF licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
18+
name: 'Install CloudStack Non-OSS'
19+
description: 'Clones and installs the shapeblue/cloudstack-nonoss repository.'
20+
21+
runs:
22+
using: "composite"
23+
steps:
24+
- name: Install cloudstack-nonoss
25+
shell: bash
26+
run: |
27+
git clone --depth 1 https://github.com/shapeblue/cloudstack-nonoss.git nonoss
28+
cd nonoss
29+
bash -x install-non-oss.sh
30+
cd ..
31+
rm -fr nonoss
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Licensed to the Apache Software Foundation (ASF) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The ASF licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
18+
name: 'Setup CloudStack Environment'
19+
description: 'Sets up JDK (with Maven cache), optionally Python, and optionally APT build dependencies for CloudStack.'
20+
21+
inputs:
22+
java-version:
23+
description: 'The JDK version to use'
24+
required: false
25+
default: '17'
26+
install-python:
27+
description: 'Whether to install Python 3.10'
28+
required: false
29+
default: 'false'
30+
install-apt-deps:
31+
description: 'Whether to install CloudStack APT build dependencies'
32+
required: false
33+
default: 'false'
34+
35+
runs:
36+
using: "composite"
37+
steps:
38+
- name: Set up JDK ${{ inputs.java-version }}
39+
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
40+
with:
41+
java-version: ${{ inputs.java-version }}
42+
distribution: 'adopt'
43+
architecture: x64
44+
cache: 'maven'
45+
46+
- name: Set up Python
47+
if: ${{ inputs.install-python == 'true' }}
48+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
49+
with:
50+
python-version: '3.10'
51+
architecture: x64
52+
53+
- name: Install Build Dependencies
54+
if: ${{ inputs.install-apt-deps == 'true' }}
55+
shell: bash
56+
run: |
57+
sudo apt-get update
58+
sudo apt-get install -y git uuid-runtime genisoimage netcat-openbsd ipmitool build-essential libgcrypt20 libgpg-error-dev libgpg-error0 libopenipmi0 libpython3-dev libssl-dev libffi-dev python3-openssl python3-dev python3-setuptools

‎.github/aw/actions-lock.json‎

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
{
2+
"entries": {
3+
"actions/github-script@v9.0.0": {
4+
"repo": "actions/github-script",
5+
"version": "v9.0.0",
6+
"sha": "3a2844b7e9c422d3c10d287c895573f7108da1b3"
7+
},
8+
"github/gh-aw-actions/setup@v1.0.1": {
9+
"repo": "github/gh-aw-actions/setup",
10+
"version": "v1.0.1",
11+
"sha": "221ba4f4319de6b8e809d1a15528b3ae6a818aa5"
12+
}
13+
},
14+
"containers": {
15+
"ghcr.io/github/gh-aw-firewall/agent:0.18.0": {
16+
"image": "ghcr.io/github/gh-aw-firewall/agent:0.18.0",
17+
"digest": "sha256:ab84dfc7f5998cb8cd0c596526dd573b7e7d06c6a740266a1e6df879fa16c866",
18+
"pinned_image": "ghcr.io/github/gh-aw-firewall/agent:0.18.0@sha256:ab84dfc7f5998cb8cd0c596526dd573b7e7d06c6a740266a1e6df879fa16c866"
19+
},
20+
"ghcr.io/github/gh-aw-firewall/agent:0.25.55": {
21+
"image": "ghcr.io/github/gh-aw-firewall/agent:0.25.55",
22+
"digest": "sha256:138c363411decc9a61a5af9b95e8d64c76648b00add0ba06fc7ba786f0e72731",
23+
"pinned_image": "ghcr.io/github/gh-aw-firewall/agent:0.25.55@sha256:138c363411decc9a61a5af9b95e8d64c76648b00add0ba06fc7ba786f0e72731"
24+
},
25+
"ghcr.io/github/gh-aw-firewall/agent:0.29.0": {
26+
"image": "ghcr.io/github/gh-aw-firewall/agent:0.29.0",
27+
"digest": "sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96",
28+
"pinned_image": "ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"
29+
},
30+
"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.55": {
31+
"image": "ghcr.io/github/gh-aw-firewall/api-proxy:0.25.55",
32+
"digest": "sha256:4142b873b678cd3279b98dcbe464857d56ea2f2348719b00379cdf35dd843ff3",
33+
"pinned_image": "ghcr.io/github/gh-aw-firewall/api-proxy:0.25.55@sha256:4142b873b678cd3279b98dcbe464857d56ea2f2348719b00379cdf35dd843ff3"
34+
},
35+
"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0": {
36+
"image": "ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0",
37+
"digest": "sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b",
38+
"pinned_image": "ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"
39+
},
40+
"ghcr.io/github/gh-aw-firewall/squid:0.18.0": {
41+
"image": "ghcr.io/github/gh-aw-firewall/squid:0.18.0",
42+
"digest": "sha256:82a5d062a5612a57a43a171a5b79ddbb690a86a8ddda02339cc1675131ae9f8b",
43+
"pinned_image": "ghcr.io/github/gh-aw-firewall/squid:0.18.0@sha256:82a5d062a5612a57a43a171a5b79ddbb690a86a8ddda02339cc1675131ae9f8b"
44+
},
45+
"ghcr.io/github/gh-aw-firewall/squid:0.25.55": {
46+
"image": "ghcr.io/github/gh-aw-firewall/squid:0.25.55",
47+
"digest": "sha256:74084b704d8d3664a363655986664d70bd9cdb4830532d0b35cd784d867aabca",
48+
"pinned_image": "ghcr.io/github/gh-aw-firewall/squid:0.25.55@sha256:74084b704d8d3664a363655986664d70bd9cdb4830532d0b35cd784d867aabca"
49+
},
50+
"ghcr.io/github/gh-aw-firewall/squid:0.29.0": {
51+
"image": "ghcr.io/github/gh-aw-firewall/squid:0.29.0",
52+
"digest": "sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50",
53+
"pinned_image": "ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"
54+
},
55+
"ghcr.io/github/gh-aw-mcpg:v0.5.0": {
56+
"image": "ghcr.io/github/gh-aw-mcpg:v0.5.0",
57+
"digest": "sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc",
58+
"pinned_image": "ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"
59+
},
60+
"ghcr.io/github/gh-aw-node": {
61+
"image": "ghcr.io/github/gh-aw-node",
62+
"digest": "sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f",
63+
"pinned_image": "ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"
64+
},
65+
"ghcr.io/github/github-mcp-server:v2.0.3": {
66+
"image": "ghcr.io/github/github-mcp-server:v2.0.3",
67+
"digest": "sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132",
68+
"pinned_image": "ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"
69+
}
70+
}
71+
}

‎.github/aw/imports/.gitattributes‎

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)