Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PWX-38541 | Add GitHub Actions to Enforce Sync Between StorageCluster CRD and Helm Templates #1640

Closed
wants to merge 5 commits into from
Closed
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
129 changes: 129 additions & 0 deletions .github/workflows/on-pr-helm-stc-sync.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
name: Validate operator and helm storageCluster Sync

on:
pull_request:
types: [opened, edited, synchronize]
paths:
- 'deploy/crds/**'

jobs:
check-crd-changes:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
with:
fetch-depth: 2

- name: Check if StorageCluster CRD has changes
id: crd_check
run: |
echo "Checking CRD changes..."
if git diff --exit-code HEAD^ HEAD -- deploy/crds/core_v1_storagecluster_crd.yaml; then
echo "crd_changed=false" >> $GITHUB_ENV
else
echo "crd_changed=true" >> $GITHUB_ENV
fi

- name: Validate PR Description for Helm Link
id: validate_pr_description
if: env.crd_changed == 'true'
run: |
echo "Extracting PR body..."
PR_BODY=$(jq -r '.pull_request.body' "$GITHUB_EVENT_PATH")
echo "PR_BODY: '$PR_BODY'"

# Extract the HELM_PR_LINK value
HELM_PR_LINK=$(echo "$PR_BODY" | grep -oP 'HELM_PR_LINK[[:space:]]*=[[:space:]]*.*' | awk -F '=' '{print $2}' | xargs)
IS_CONFIGURABLE=$(echo "$PR_BODY" | grep -oP 'IS_USER_CONFIGURABLE_FIELD_ADDED[[:space:]]*=[[:space:]]*.*' | awk -F '=' '{print $2}' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | xargs)

# Check if HELM_PR_LINK is missing
if [[ -z "$HELM_PR_LINK" ]]; then
echo "Changes detected in storageCluster CRD file"
echo "Error: HELM_PR_LINK is missing in the description."
echo "Please make similar changes in the Helm StorageCluster CRD and add the PR link in the description using the format: HELM_PR_LINK=<helm-stc-changes-pr>"
exit 1
else
echo "helm_pr_link=true" >> $GITHUB_ENV
echo "helm_pr_link_url=$HELM_PR_LINK" >> $GITHUB_ENV
fi

# Validate value
if [[ "$IS_CONFIGURABLE" == 'YES' ]]; then
echo "is_configurable=true" >> $GITHUB_ENV
elif [[ "$IS_CONFIGURABLE" == 'NO' ]]; then
echo "is_configurable=false" >> $GITHUB_ENV
else
echo "Changes detected in storageCluster CRD file"
echo "Error: Please specify IS_USER_CONFIGURABLE_FIELD_ADDED as either YES or NO in PR description."
echo "If you are adding a new field in the storageCluster CRD that is configurable or editable by the user, it should be added in the Helm StorageCluster template and values.yaml."
exit 1
fi

- name: Extract Branch Name from Helm PR Link
id: extract_branch
if: env.helm_pr_link == 'true'
run: |
# Extract the PR number from the HELM_PR_LINK URL
PR_NUMBER=$(echo "${{ env.helm_pr_link_url }}" | grep -o '[0-9]\+')
echo "PR_NUMBER: $PR_NUMBER"

# Check if PR_NUMBER extraction was successful
if [ -z "$PR_NUMBER" ]; then
echo "Error: PR_NUMBER could not be extracted."
exit 1
fi

# Fetch the branch name using the GitHub API
HELM_BRANCH=$(curl -s "https://api.github.com/repos/portworx/helm/pulls/$PR_NUMBER" | jq -r '.head.ref')
echo "HELM_BRANCH: $HELM_BRANCH"

# Check if HELM_BRANCH was successfully extracted
if [ -z "$HELM_BRANCH" ]; then
echo "Error: Failed to extract the branch name from the Helm PR."
exit 1
else
echo "helm_branch=$HELM_BRANCH" >> $GITHUB_ENV
fi

- name: Checkout Helm Repo
if: env.crd_changed == 'true' && env.helm_pr_link == 'true'
uses: actions/checkout@v3
with:
fetch-depth: 2
repository: portworx/helm
ref: ${{ env.helm_branch }}

- name: Verify Helm StorageCluster CRD Changes
if: env.crd_changed == 'true' && env.helm_pr_link == 'true'
run: |
echo "Checking Helm template changes..."
if git diff --exit-code HEAD^ HEAD -- charts/portworx/crds/core_v1_storagecluster_crd.yaml; then
echo "Error: No changes detected in Helm storagecluster CRD file."
exit 1
else
echo "Helm storagecluster CRD changes detected."
fi

- name: Verify Helm StorageCluster template and values.yaml file changes
if: env.crd_changed == 'true' && env.helm_pr_link == 'true' && env.is_configurable== 'true'
run: |

echo "Checking Helm storagecluster CRD changes..."
if git diff --exit-code HEAD^ HEAD -- charts/portworx/crds/core_v1_storagecluster_crd.yaml; then
echo "Error: No changes detected in Helm storagecluster template file."
exit 1
else
echo "Helm storagecluster template changes detected."
fi

echo "Checking Helm charts/portworx/values.yaml changes..."
if git diff --exit-code HEAD^ HEAD -- charts/portworx/values.yaml; then
echo "Error: No changes detected in Helm values.yaml file."
exit 1
else
echo "Helm values.yaml file changes detected."
fi

- name: Final Status
run: echo "Validation completed successfully."
Loading