Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 69bbd4bd2b | |||
| 900acdaf8f |
@@ -83,22 +83,21 @@ jobs:
|
|||||||
REVIEWS=$(curl -sf \
|
REVIEWS=$(curl -sf \
|
||||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||||
-H "Accept: application/json" \
|
-H "Accept: application/json" \
|
||||||
"https://git.farh.net/api/v1/repos/${REPO}/pulls/${PR_NUMBER}/reviews" \
|
"https://git.farh.net/api/v1/repos/${REPO}/pulls/${PR_NUMBER}/reviews")
|
||||||
| python3 -c 'import sys,json; json.dump(json.load(sys.stdin),sys.stdout)')
|
|
||||||
|
|
||||||
if [ -z "${REVIEWS}" ] || [ "${REVIEWS}" = "null" ]; then
|
if [ -z "${REVIEWS}" ] || [ "${REVIEWS}" = "null" ]; then
|
||||||
echo "::warning::Could not fetch reviews for PR #${PR_NUMBER}."
|
echo "::warning::Could not fetch reviews for PR #${PR_NUMBER}."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
REVIEWER_APPROVED=$(printf '%s' "${REVIEWS}" | jq -r --arg user "${REQUIRED_REVIEWER}" \
|
REVIEWER_APPROVED=$(echo "${REVIEWS}" | jq -r --arg user "${REQUIRED_REVIEWER}" \
|
||||||
'[.[] | select(.user.login == $user)] | last | if .state then .state == "APPROVED" else false end')
|
'[.[] | select(.user.login == $user)] | last | if .state then .state == "APPROVED" else false end')
|
||||||
|
|
||||||
echo "${GATE_NAME} (${REQUIRED_REVIEWER}) approved: ${REVIEWER_APPROVED}"
|
echo "${GATE_NAME} (${REQUIRED_REVIEWER}) approved: ${REVIEWER_APPROVED}"
|
||||||
|
|
||||||
# Fallback: check if CTO approved as alternative for uat→main
|
# Fallback: check if CTO approved as alternative for uat→main
|
||||||
if [ "${REVIEWER_APPROVED}" != "true" ] && [ -n "${ALT_REVIEWER}" ]; then
|
if [ "${REVIEWER_APPROVED}" != "true" ] && [ -n "${ALT_REVIEWER}" ]; then
|
||||||
REVIEWER_APPROVED=$(printf '%s' "${REVIEWS}" | jq -r --arg user "${ALT_REVIEWER}" \
|
REVIEWER_APPROVED=$(echo "${REVIEWS}" | jq -r --arg user "${ALT_REVIEWER}" \
|
||||||
'[.[] | select(.user.login == $user)] | last | if .state then .state == "APPROVED" else false end')
|
'[.[] | select(.user.login == $user)] | last | if .state then .state == "APPROVED" else false end')
|
||||||
if [ "${REVIEWER_APPROVED}" = "true" ]; then
|
if [ "${REVIEWER_APPROVED}" = "true" ]; then
|
||||||
echo "CTO (${ALT_REVIEWER}) approved as fallback for UAT gate."
|
echo "CTO (${ALT_REVIEWER}) approved as fallback for UAT gate."
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# Installation Policy
|
||||||
|
|
||||||
|
## Approved Installation Method
|
||||||
|
|
||||||
|
**The ONLY approved method for installing this plugin is via [Artifact Hub](https://artifacthub.io/) using the Headlamp plugin installer.**
|
||||||
|
|
||||||
|
No other installation method is acceptable. This includes but is not limited to:
|
||||||
|
|
||||||
|
- Direct installation from GitHub release assets
|
||||||
|
- Manual npm pack / tarball extraction
|
||||||
|
- initContainer workarounds that bypass Artifact Hub
|
||||||
|
- Direct file copy or sidecar injection
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
All deployment configurations, CI/CD pipelines, and documentation MUST reference Artifact Hub as the sole plugin distribution channel. Any pull request that introduces an alternative installation method will be rejected.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Artifact Hub provides verified checksums, consistent versioning, and a standard discovery mechanism for the CNCF ecosystem. Bypassing it introduces security and integrity risks.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*This policy is set by the CTO and approved by the CEO of Privileged Escalation.*
|
||||||
@@ -67,8 +67,6 @@ pluginsManager:
|
|||||||
url: https://github.com/privilegedescalation/headlamp-polaris-plugin/releases/download/v0.3.10/polaris-0.3.10.tar.gz
|
url: https://github.com/privilegedescalation/headlamp-polaris-plugin/releases/download/v0.3.10/polaris-0.3.10.tar.gz
|
||||||
```
|
```
|
||||||
|
|
||||||
> See [Plugin Installation Policy](https://git.farh.net/privilegedescalation/privilegedescalation.com/wiki/Plugin-Installation-Policy) for approved installation methods.
|
|
||||||
|
|
||||||
## RBAC / Security Setup
|
## RBAC / Security Setup
|
||||||
|
|
||||||
The plugin fetches audit data through the Kubernetes API server's **service proxy** sub-resource. The identity making the request (Headlamp's service account, or the user's own token in token-auth mode) must be granted:
|
The plugin fetches audit data through the Kubernetes API server's **service proxy** sub-resource. The identity making the request (Headlamp's service account, or the user's own token in token-auth mode) must be granted:
|
||||||
|
|||||||
Reference in New Issue
Block a user