Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
2 changes: 1 addition & 1 deletion .controlplane/controlplane.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ apps:
# QA Apps are like Heroku review apps, but the use `prefix` so you can run a commmand like
# this to create a QA app for the tutorial app.
# `cpflow setup gvc postgres redis rails -a qa-react-webpack-rails-tutorial-pr-1234`
qa-react-webpack-rails-tutorial:
qa-react-webpack-rails-tutorial-pr:
<<: *common
# Order matters!
setup_app_templates:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ jobs:
debug:
uses: ./.github/workflows/debug-workflow.yml
with:
debug_enabled: false # Will still run if vars.DEBUG_WORKFLOW is true
Process-Deployment-Command:
needs: debug # Add this to ensure debug runs first
debug_enabled: false

process-deployment:
needs: debug
if: |
(github.event_name == 'pull_request') ||
(github.event_name == 'push') ||
Expand All @@ -45,12 +45,13 @@ jobs:
github.event.issue.pull_request &&
contains(github.event.comment.body, '/deploy-review-app'))
runs-on: ubuntu-latest
permissions:
contents: read
deployments: write
pull-requests: write
issues: write

outputs:
pr_number: ${{ env.PR_NUMBER }}
pr_sha: ${{ env.PR_SHA }}
pr_ref: ${{ steps.getRef.outputs.PR_REF }}
do_deploy: ${{ env.DO_DEPLOY }}
comment_id: ${{ steps.create-comment.outputs.comment-id }}
deployment_id: ${{ steps.init-deployment.outputs.result }}
steps:
# Initial checkout only for pull_request and push events
- name: Checkout code
Expand Down Expand Up @@ -157,13 +158,6 @@ jobs:
echo "PR_REF=$(echo $PR_DATA | jq -r .headRefName)" >> $GITHUB_OUTPUT
echo "PR_SHA=$(echo $PR_DATA | jq -r .headRefOid)" >> $GITHUB_ENV

- name: Checkout PR code
if: github.event_name == 'workflow_dispatch' || github.event_name == 'issue_comment'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ steps.getRef.outputs.PR_SHA }}

- name: Setup Environment
uses: ./.github/actions/setup-environment
with:
Expand Down Expand Up @@ -253,26 +247,6 @@ jobs:
});
core.setOutput('comment-id', result.data.id);

- name: Update Comment - Building
if: env.DO_DEPLOY != 'false'
uses: actions/github-script@v7
with:
script: |
const buildingMessage = [
`🏗️ Building Docker image for PR #${process.env.PR_NUMBER}, commit ${process.env.PR_SHA}`,
'',
`📝 [View Build Logs](${process.env.WORKFLOW_URL})`,
'',
process.env.CONSOLE_LINK
].join('\n');

await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: ${{ steps.create-comment.outputs.comment-id }},
body: buildingMessage
});

- name: Set Deployment URLs
id: set-urls
if: env.DO_DEPLOY != 'false'
Expand Down Expand Up @@ -305,30 +279,6 @@ jobs:
'https://console.cpln.io/console/org/' + process.env.CPLN_ORG + '/gvc/' + process.env.APP_NAME + '/-info)'
);

- name: Update Status - Building
if: env.DO_DEPLOY != 'false'
uses: actions/github-script@v7
with:
script: |
const buildingMessage = [
'🏗️ Building Docker image for PR #' + process.env.PR_NUMBER + ', commit ' + '${{ env.PR_SHA }}',
'',
'📝 [View Build Logs](' + process.env.WORKFLOW_URL + ')',
'',
process.env.CONSOLE_LINK
].join('\n');

await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: ${{ steps.create-comment.outputs.comment-id }},
body: buildingMessage
});

- name: Checkout PR Branch
if: env.DO_DEPLOY != 'false'
run: git checkout ${{ steps.getRef.outputs.PR_REF }}

- name: Initialize GitHub Deployment
if: env.DO_DEPLOY != 'false'
uses: actions/github-script@v7
Expand Down Expand Up @@ -359,17 +309,58 @@ jobs:

return deployment.data.id;

build:
needs: process-deployment
if: needs.process-deployment.outputs.do_deploy != 'false'
runs-on: ubuntu-latest
outputs:
image_tag: ${{ steps.build.outputs.image_tag }}
comment_id: ${{ needs.process-deployment.outputs.comment_id }}
Comment on lines +295 to +297
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix missing output value assignment.

The job declares image_tag as an output but the value is never set in the build step. This could cause deployment failures.

Ensure the build step sets the output:

       - name: Build Docker Image
         id: build
         uses: ./.github/actions/build-docker-image
         with:
           app_name: ${{ env.APP_NAME }}
           org: ${{ vars.CPLN_ORG_STAGING }}
           commit: ${{ needs.process-deployment.outputs.pr_sha }}
           PR_NUMBER: ${{ needs.process-deployment.outputs.pr_number }}
+        # Add this step to set the output
+      - name: Set image tag output
+        if: success()
+        run: echo "image_tag=${{ env.APP_NAME }}:${{ needs.process-deployment.outputs.pr_sha }}" >> $GITHUB_OUTPUT
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
outputs:
image_tag: ${{ steps.build.outputs.image_tag }}
comment_id: ${{ needs.process-deployment.outputs.comment_id }}
outputs:
image_tag: ${{ steps.build.outputs.image_tag }}
comment_id: ${{ needs.process-deployment.outputs.comment_id }}
🧰 Tools
🪛 actionlint (1.7.4)

317-317: property "image_tag" is not defined in object type {}

(expression)

pr_number: ${{ needs.process-deployment.outputs.pr_number }}
do_deploy: ${{ needs.process-deployment.outputs.do_deploy }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ needs.process-deployment.outputs.pr_ref }}

- name: Update Status - Building
uses: actions/github-script@v7
with:
script: |
const buildingMessage = [
'🏗️ Building Docker image for PR #${{ needs.process-deployment.outputs.pr_number }}, commit ${{ needs.process-deployment.outputs.pr_sha }}',
'',
'📝 [View Build Logs](${{ env.WORKFLOW_URL }})',
'',
process.env.CONSOLE_LINK
].join('\n');

await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: ${{ needs.process-deployment.outputs.comment_id }},
body: buildingMessage
});

- name: Build Docker Image
if: env.DO_DEPLOY != 'false'
id: build
uses: ./.github/actions/build-docker-image
with:
app_name: ${{ env.APP_NAME }}
org: ${{ vars.CPLN_ORG_STAGING }}
commit: ${{ env.PR_SHA }}
PR_NUMBER: ${{ env.PR_NUMBER }}
commit: ${{ needs.process-deployment.outputs.pr_sha }}
PR_NUMBER: ${{ needs.process-deployment.outputs.pr_number }}

deploy:
needs: build
if: needs.build.outputs.do_deploy != 'false'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Update Status - Deploying
if: env.DO_DEPLOY != 'false'
uses: actions/github-script@v7
with:
script: |
Expand All @@ -378,7 +369,7 @@ jobs:
'',
'⏳ Waiting for deployment to be ready...',
'',
'📝 [View Deploy Logs](' + process.env.WORKFLOW_URL + ')',
'📝 [View Deploy Logs](${{ env.WORKFLOW_URL }})',
'',
process.env.CONSOLE_LINK
].join('\n');
Expand Down
84 changes: 73 additions & 11 deletions .github/workflows/deploy-to-control-plane-staging.yml
Original file line number Diff line number Diff line change
@@ -1,32 +1,94 @@
# Control Plane GitHub Action

name: Deploy Main Branch to Control Plane Staging
name: Deploy to Control Plane Staging
run-name: Deploy Control Plane Staging App

# Controls when the workflow will run
on:
# Uncomment the lines you want actions that will cause the workflow to Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [master]

# Allows you to run this workflow manually from the Actions tab
branches:
- 'main'
- 'master'
- ${{ github.vars.STAGING_APP_BRANCH }}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix branch validation configuration.

The github.vars.STAGING_APP_BRANCH reference is incorrect as vars is not a valid property of the github context.

Apply this fix:

    branches:
      - 'main'
      - 'master'
-      - ${{ github.vars.STAGING_APP_BRANCH }}
+      - ${{ vars.STAGING_APP_BRANCH }}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
branches:
- 'main'
- 'master'
- ${{ github.vars.STAGING_APP_BRANCH }}
branches:
- 'main'
- 'master'
- ${{ vars.STAGING_APP_BRANCH }}
🧰 Tools
🪛 actionlint (1.7.4)

12-12: character ' ' is invalid for branch and tag names. ref name cannot contain spaces, ~, ^, :, [, ?, *. see man git-check-ref-format for more details. note that regular expression is unavailable. note: filter pattern syntax is explained at https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet

(glob)


12-12: property "vars" is not defined in object type {action: string; action_path: string; action_ref: string; action_repository: string; action_status: string; actor: string; actor_id: string; api_url: string; base_ref: string; env: string; event: object; event_name: string; event_path: string; graphql_url: string; head_ref: string; job: string; job_workflow_sha: string; path: string; ref: string; ref_name: string; ref_protected: string; ref_type: string; repository: string; repository_id: string; repository_owner: string; repository_owner_id: string; repositoryurl: string; retention_days: number; run_attempt: string; run_id: string; run_number: string; secret_source: string; server_url: string; sha: string; token: string; triggering_actor: string; workflow: string; workflow_ref: string; workflow_sha: string; workspace: string}

(expression)


12-12: character ' ' is invalid for branch and tag names. ref name cannot contain spaces, ~, ^, :, [, ?, *. see man git-check-ref-format for more details. note that regular expression is unavailable. note: filter pattern syntax is explained at https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet

(glob)

workflow_dispatch:

# Convert the GitHub secret variables to environment variables for use by the Control Plane CLI
env:
CPLN_ORG: ${{ vars.CPLN_ORG_STAGING }}
APP_NAME: ${{ vars.STAGING_APP_NAME }}
CPLN_TOKEN: ${{ secrets.CPLN_TOKEN_STAGING }}
CPLN_ORG: ${{ vars.CPLN_ORG_STAGING }}
STAGING_APP_BRANCH: ${{ vars.STAGING_APP_BRANCH }}

concurrency:
group: deploy-staging
cancel-in-progress: true

jobs:
deploy-to-control-plane-staging:
debug:
uses: ./.github/workflows/debug-workflow.yml
with:
debug_enabled: false

validate-branch:
runs-on: ubuntu-latest
steps:
- name: Check if allowed branch
run: |
if [[ -n "${STAGING_APP_BRANCH}" ]]; then
if [[ "${GITHUB_REF#refs/heads/}" != "${STAGING_APP_BRANCH}" ]]; then
echo "This workflow only runs on configured branch: ${STAGING_APP_BRANCH}"
echo "Current branch: ${GITHUB_REF#refs/heads/}"
exit 1
fi
elif [[ "${GITHUB_REF}" != "refs/heads/main" && "${GITHUB_REF}" != "refs/heads/master" ]]; then
echo "This workflow only runs on main or master branch (no STAGING_APP_BRANCH configured)"
echo "Current branch: ${GITHUB_REF#refs/heads/}"
exit 1
fi
build:
needs: validate-branch
runs-on: ubuntu-latest
outputs:
image_tag: ${{ steps.build.outputs.image_tag }}
steps:
- uses: actions/checkout@v4
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for proper SHA handling
ref: master # Explicitly checkout master branch
fetch-depth: 0

- name: Setup Environment
uses: ./.github/actions/setup-environment
with:
token: ${{ secrets.CPLN_TOKEN_STAGING }}
org: ${{ vars.CPLN_ORG_STAGING }}

- name: Build Docker Image
id: build
uses: ./.github/actions/build-docker-image
with:
app_name: ${{ env.APP_NAME }}
org: ${{ vars.CPLN_ORG_STAGING }}
commit: ${{ github.sha }}

Comment on lines +68 to +75
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add missing required input for Build Docker Image action.

The action requires a PR_NUMBER input that is not provided.

Add the missing input:

      - name: Build Docker Image
        id: build
        uses: ./.github/actions/build-docker-image
        with:
          app_name: ${{ env.APP_NAME }}
          org: ${{ vars.CPLN_ORG_STAGING }}
          commit: ${{ github.sha }}
+         PR_NUMBER: ''  # Add appropriate value or make it optional in the action
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Build Docker Image
id: build
uses: ./.github/actions/build-docker-image
with:
app_name: ${{ env.APP_NAME }}
org: ${{ vars.CPLN_ORG_STAGING }}
commit: ${{ github.sha }}
- name: Build Docker Image
id: build
uses: ./.github/actions/build-docker-image
with:
app_name: ${{ env.APP_NAME }}
org: ${{ vars.CPLN_ORG_STAGING }}
commit: ${{ github.sha }}
PR_NUMBER: '' # Add appropriate value or make it optional in the action
🧰 Tools
🪛 actionlint (1.7.4)

68-68: missing input "PR_NUMBER" which is required by action "Build Docker Image" defined at "./.github/actions/build-docker-image". all required inputs are "PR_NUMBER", "app_name", "commit", "org"

(action)

deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Environment
uses: ./.github/actions/setup-environment
with:
token: ${{ secrets.CPLN_TOKEN_STAGING }}
org: ${{ vars.CPLN_ORG_STAGING }}

- uses: ./.github/actions/deploy-to-control-plane
- name: Deploy to Control Plane
uses: ./.github/actions/deploy-to-control-plane
with:
app_name: ${{ vars.STAGING_APP_NAME }}
org: ${{ vars.CPLN_ORG_STAGING }}
github_token: ${{ secrets.GITHUB_TOKEN }}
wait_timeout: ${{ vars.WAIT_TIMEOUT || 900 }}
cpln_token: ${{ secrets.CPLN_TOKEN_STAGING }}
Comment on lines +89 to +96
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add missing required input for Deploy to Control Plane action.

The action requires a pr_number input that is not provided.

Add the missing input:

      - name: Deploy to Control Plane
        uses: ./.github/actions/deploy-to-control-plane
        with:
          app_name: ${{ vars.STAGING_APP_NAME }}
          org: ${{ vars.CPLN_ORG_STAGING }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          wait_timeout: ${{ vars.WAIT_TIMEOUT || 900 }}
          cpln_token: ${{ secrets.CPLN_TOKEN_STAGING }}
+         pr_number: ''  # Add appropriate value or make it optional in the action

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 actionlint (1.7.4)

88-88: missing input "pr_number" which is required by action "Deploy to Control Plane" defined at "./.github/actions/deploy-to-control-plane". all required inputs are "app_name", "cpln_token", "github_token", "org", "pr_number"

(action)

Loading