Skip to content

Commit f4f8241

Browse files
Merge pull request #68 from aligent/feature/DO-1984-reduce-cost-for-magento
feat DO-1984: reduce cost for magento deploy
2 parents b4c3cb9 + 3b54362 commit f4f8241

2 files changed

Lines changed: 62 additions & 109 deletions

File tree

.github/workflows/magento-cloud-deploy.yml

Lines changed: 61 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -60,38 +60,49 @@ on:
6060
value: ${{ jobs.deploy.outputs.deployment-id }}
6161

6262
jobs:
63-
# Simple validation job
64-
validate:
65-
name: 🔍 Validate Inputs
63+
deploy:
64+
name: 🚀 Deploy to Magento Cloud
6665
runs-on: ubuntu-latest
66+
environment: ${{ inputs.environment }}
67+
env:
68+
MAGENTO_CLOUD_CLI_TOKEN: ${{ secrets.magento-cloud-cli-token }}
69+
outputs:
70+
deployment-url: ${{ steps.deploy-info.outputs.url }}
71+
deployment-id: ${{ steps.deploy-info.outputs.id }}
6772
steps:
6873
- name: Validate required inputs
6974
run: |
7075
if [ -z "${{ inputs.magento-cloud-project-id }}" ]; then
7176
echo "❌ Error: magento-cloud-project-id is required"
7277
exit 1
7378
fi
74-
79+
7580
if [ "${{ inputs.environment }}" != "integration" ] && [ "${{ inputs.environment }}" != "staging" ] && [ "${{ inputs.environment }}" != "production" ]; then
7681
echo "❌ Error: environment must be one of: integration, staging, production"
7782
exit 1
7883
fi
7984
8085
echo "✅ All required inputs validated"
8186
82-
# Simple deploy to Magento Cloud
83-
deploy:
84-
name: 🚀 Deploy to Magento Cloud
85-
runs-on: ubuntu-latest
86-
needs: [validate, newrelic-start]
87-
if: always() && needs.validate.result == 'success'
88-
environment: ${{ inputs.environment }}
89-
env:
90-
MAGENTO_CLOUD_CLI_TOKEN: ${{ secrets.magento-cloud-cli-token }}
91-
outputs:
92-
deployment-url: ${{ steps.deploy-info.outputs.url }}
93-
deployment-id: ${{ steps.deploy-info.outputs.id }}
94-
steps:
87+
- name: Create NewRelic deployment marker (start)
88+
if: inputs.newrelic-app-id != '' && secrets.newrelic-api-key != ''
89+
run: |
90+
echo "📊 Creating NewRelic deployment marker (start)..."
91+
92+
curl -X POST "https://api.newrelic.com/v2/applications/${{ inputs.newrelic-app-id }}/deployments.json" \
93+
-H "X-Api-Key: ${{ secrets.newrelic-api-key }}" \
94+
-H "Content-Type: application/json" \
95+
-d '{
96+
"deployment": {
97+
"revision": "${{ github.sha }}",
98+
"changelog": "Magento Cloud deployment started",
99+
"description": "Deployment to ${{ inputs.environment }} environment",
100+
"user": "${{ github.actor }}"
101+
}
102+
}'
103+
104+
echo "✅ NewRelic deployment start marker created"
105+
95106
- name: Checkout code with full git history
96107
uses: actions/checkout@v4
97108
with:
@@ -103,7 +114,7 @@ jobs:
103114
curl -fsS https://accounts.magento.cloud/cli/installer | php
104115
export PATH=$HOME/.magento-cloud/bin:$PATH
105116
echo "$HOME/.magento-cloud/bin" >> $GITHUB_PATH
106-
117+
107118
# Verify installation
108119
magento-cloud --version
109120
echo "✅ Magento Cloud CLI installed successfully"
@@ -112,15 +123,15 @@ jobs:
112123
id: deployment
113124
run: |
114125
echo "🚀 Starting deployment to ${{ inputs.environment }}..."
115-
126+
116127
debug=""
117128
if [ "${{ inputs.debug }}" = "true" ]; then
118129
debug="--verbose"
119130
fi
120-
131+
121132
# Set project context
122133
magento-cloud project:set-remote "${{ inputs.magento-cloud-project-id }}"
123-
134+
124135
# Deploy based on environment type
125136
case "${{ inputs.environment }}" in
126137
"integration")
@@ -134,30 +145,23 @@ jobs:
134145
magento-cloud push --environment "${{ inputs.environment }}" --force --wait $debug
135146
;;
136147
esac
137-
148+
138149
echo "✅ Deployment completed successfully"
150+
echo "deployment-success=true" >> $GITHUB_OUTPUT
139151
140152
- name: Get deployment information
141153
id: deploy-info
142154
run: |
143155
echo "📋 Retrieving deployment information..."
144-
156+
145157
# Get environment URL
146158
URL=$(magento-cloud url --environment "${{ inputs.environment }}" --project "${{ inputs.magento-cloud-project-id }}" --pipe | tr -d '[:space:]')
147-
{
148-
echo "url<<EOF"
149-
echo "url=$URL"
150-
echo "EOF"
151-
} >> "$GITHUB_OUTPUT"
152-
159+
echo "url=$URL" >> "$GITHUB_OUTPUT"
160+
153161
# Get deployment ID
154162
DEPLOYMENT_ID=$(magento-cloud activity:list --environment "${{ inputs.environment }}" --type push --limit 1 --format csv --columns id --no-header | head -1)
155-
{
156-
echo "url<<EOF"
157-
echo "id=$DEPLOYMENT_ID"
158-
echo "EOF"
159-
} >> "$GITHUB_OUTPUT"
160-
163+
echo "id=$DEPLOYMENT_ID" >> "$GITHUB_OUTPUT"
164+
161165
if [ "${{ inputs.debug }}" = "true" ]; then
162166
echo "🔍 Deployment information:"
163167
echo " URL: ${URL}"
@@ -177,7 +181,7 @@ jobs:
177181
echo "| **Git Commit** | ${{ github.sha }} |" >> $GITHUB_STEP_SUMMARY
178182
echo "| **Deployed By** | ${{ github.actor }} |" >> $GITHUB_STEP_SUMMARY
179183
echo "" >> $GITHUB_STEP_SUMMARY
180-
184+
181185
case "${{ inputs.environment }}" in
182186
"production")
183187
echo "### 🌍 Production Deployment" >> $GITHUB_STEP_SUMMARY
@@ -196,71 +200,30 @@ jobs:
196200
;;
197201
esac
198202
199-
# NewRelic Start Marker Job - runs before deployment
200-
newrelic-start:
201-
name: 📊 NewRelic Start
202-
runs-on: ubuntu-latest
203-
needs: [validate]
204-
if: inputs.newrelic-app-id != ''
205-
steps:
206-
- name: Create NewRelic deployment marker (start)
207-
run: |
208-
if [ -z "${{ secrets.newrelic-api-key }}" ]; then
209-
echo "⚠️ NewRelic API key not provided, skipping deployment marker"
210-
exit 0
211-
fi
212-
213-
echo "📊 Creating NewRelic deployment marker (start)..."
214-
215-
curl -X POST "https://api.newrelic.com/v2/applications/${{ inputs.newrelic-app-id }}/deployments.json" \
216-
-H "X-Api-Key: ${{ secrets.newrelic-api-key }}" \
217-
-H "Content-Type: application/json" \
218-
-d '{
219-
"deployment": {
220-
"revision": "${{ github.sha }}",
221-
"changelog": "Magento Cloud deployment started",
222-
"description": "Deployment to ${{ inputs.environment }} environment",
223-
"user": "${{ github.actor }}"
224-
}
225-
}'
226-
227-
echo "✅ NewRelic deployment start marker created"
228-
229-
# NewRelic Complete Marker Job - runs after deployment (success or failure)
230-
newrelic-complete:
231-
name: 📊 NewRelic Complete
232-
runs-on: ubuntu-latest
233-
needs: [deploy]
234-
if: always() && inputs.newrelic-app-id != ''
235-
steps:
236203
- name: Create NewRelic deployment marker (complete)
204+
if: always() && inputs.newrelic-app-id != '' && secrets.newrelic-api-key != ''
237205
run: |
238-
if [ -z "${{ secrets.newrelic-api-key }}" ]; then
239-
echo "⚠️ NewRelic API key not provided, skipping deployment marker"
240-
exit 0
241-
fi
242-
243206
echo "📊 Creating NewRelic deployment marker (complete)..."
244-
245-
# Determine deployment status and set appropriate message
246-
if [ "${{ needs.deploy.result }}" == "success" ]; then
207+
208+
# Determine deployment status based on previous step outcomes
209+
if [ "${{ steps.deployment.outcome }}" == "success" ]; then
247210
CHANGELOG="Magento Cloud deployment completed successfully"
248-
DESCRIPTION="Deployment to ${{ inputs.environment }} completed at ${{ needs.deploy.outputs.deployment-url }}"
211+
DESCRIPTION="Deployment to ${{ inputs.environment }} completed at ${{ steps.deploy-info.outputs.url }}"
249212
echo "✅ Deployment was successful"
250-
elif [ "${{ needs.deploy.result }}" == "failure" ]; then
213+
elif [ "${{ steps.deployment.outcome }}" == "failure" ]; then
251214
CHANGELOG="Magento Cloud deployment failed"
252215
DESCRIPTION="Deployment to ${{ inputs.environment }} failed - check workflow logs for details"
253216
echo "❌ Deployment failed"
254-
elif [ "${{ needs.deploy.result }}" == "cancelled" ]; then
217+
elif [ "${{ steps.deployment.outcome }}" == "cancelled" ]; then
255218
CHANGELOG="Magento Cloud deployment cancelled"
256219
DESCRIPTION="Deployment to ${{ inputs.environment }} was cancelled by user"
257220
echo "⚠️ Deployment was cancelled"
258221
else
259-
CHANGELOG="Magento Cloud deployment status: ${{ needs.deploy.result }}"
260-
DESCRIPTION="Deployment to ${{ inputs.environment }} ended with status: ${{ needs.deploy.result }}"
261-
echo "ℹ️ Deployment status: ${{ needs.deploy.result }}"
222+
CHANGELOG="Magento Cloud deployment status: ${{ steps.deployment.outcome }}"
223+
DESCRIPTION="Deployment to ${{ inputs.environment }} ended with status: ${{ steps.deployment.outcome }}"
224+
echo "ℹ️ Deployment status: ${{ steps.deployment.outcome }}"
262225
fi
263-
226+
264227
curl -X POST "https://api.newrelic.com/v2/applications/${{ inputs.newrelic-app-id }}/deployments.json" \
265228
-H "X-Api-Key: ${{ secrets.newrelic-api-key }}" \
266229
-H "Content-Type: application/json" \
@@ -272,39 +235,30 @@ jobs:
272235
\"user\": \"${{ github.actor }}\"
273236
}
274237
}"
275-
276-
echo "✅ NewRelic deployment marker created with status: ${{ needs.deploy.result }}"
277238
278-
# CST Reporting Job - runs in parallel with NewRelic complete after successful deployment
279-
cst-report:
280-
name: 📡 Report to CST
281-
runs-on: ubuntu-latest
282-
needs: [deploy]
283-
if: needs.deploy.result == 'success'
284-
steps:
285-
- name: Checkout code
286-
uses: actions/checkout@v4
239+
echo "✅ NewRelic deployment marker created with status: ${{ steps.deployment.outcome }}"
287240
288-
- name: Report deployment to CST (Confidentiality and Security Team)
241+
- name: Report deployment to CST
242+
if: steps.deployment.outcome == 'success'
289243
run: |
290244
# Determine CST endpoint - input overrides workspace variable
291245
CST_ENDPOINT="${{ inputs.cst-endpoint }}"
292246
if [ -z "$CST_ENDPOINT" ]; then
293247
CST_ENDPOINT="${{ vars.CST_ENDPOINT }}"
294248
fi
295-
249+
296250
# Determine CST project key - input overrides workspace variable
297251
CST_PROJECT_KEY="${{ inputs.cst-project-key }}"
298252
if [ -z "$CST_PROJECT_KEY" ]; then
299253
CST_PROJECT_KEY="${{ vars.CST_PROJECT_KEY }}"
300254
fi
301-
255+
302256
# Determine CST reporting key - input overrides workspace secret
303257
CST_KEY="${{ secrets.cst-reporting-token }}"
304258
if [ -z "$CST_KEY" ]; then
305259
CST_KEY="${{ secrets.CST_REPORTING_TOKEN }}"
306260
fi
307-
261+
308262
# Check if we have all required CST configuration
309263
if [ -z "$CST_ENDPOINT" ] || [ -z "$CST_PROJECT_KEY" ] || [ -z "$CST_KEY" ]; then
310264
echo "ℹ️ CST reporting skipped (missing endpoint, project key, or auth key)"
@@ -313,19 +267,19 @@ jobs:
313267
echo " - Auth Key: $([ -n "$CST_KEY" ] && echo "✅ configured" || echo "❌ missing")"
314268
exit 0
315269
fi
316-
270+
317271
echo "📡 Reporting deployment to CST (Confidentiality and Security Team)..."
318-
272+
319273
# Construct full CST URL: endpoint/project_key/adobe-commerce
320274
CST_FULL_URL="${CST_ENDPOINT}/${CST_PROJECT_KEY}/adobe-commerce"
321-
275+
322276
# Send composer.lock file contents to CST endpoint
323277
if [ -f "composer.lock" ]; then
324278
curl -X POST "${CST_FULL_URL}" \
325279
-H "Authorization: Bearer ${CST_KEY}" \
326280
-H "Content-Type: application/octet-stream" \
327281
--data-binary @composer.lock
328-
282+
329283
echo "✅ Deployment reported to CST systems at ${CST_FULL_URL}"
330284
else
331285
echo "⚠️ composer.lock not found, skipping CST reporting"

docs/magento-cloud-deploy.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ A simple Magento Cloud deployment workflow that pushes code to your Magento Clou
99
- **CST system integration**: Optional composer.lock reporting to Confidentiality and Security Team
1010
- **Environment protection**: Uses GitHub environment protection rules for deployment gates
1111
- **Full git history support**: Required for Magento Cloud deployment requirements
12-
- **Parallel post-deployment**: NewRelic completion and CST reporting run in parallel for efficiency
1312

1413
#### **Inputs**
1514
| Name | Required | Type | Default | Description |
@@ -98,4 +97,4 @@ jobs:
9897
secrets:
9998
magento-cloud-cli-token: ${{ secrets.MAGENTO_CLOUD_CLI_TOKEN }}
10099
cst-reporting-token: ${{ secrets.CST_REPORTING_TOKEN }}
101-
```
100+
```

0 commit comments

Comments
 (0)