Saltar al contenido
mypipelines
Pipelines Actions Gradle Buscar
React· Reusable workflow ·on: workflow_call

React Deploy Amplify

React - Deploy to Amplify

.github/workflows/react-deploy-amplify.yml

.github/workflows/react-deploy-amplify.yml
name: React - Deploy to Amplify
on:
workflow_call:
inputs:
runner:
description: 'Runner type'
required: false
type: string
default: 'ubuntu-latest'
environment:
description: 'GitHub environment (develop, staging, production)'
required: false
type: string
default: 'develop'
build_output_dir:
description: 'Build output directory name (must match build artifact)'
required: false
type: string
default: 'build'
secrets:
AWS_ACCESS_KEY_ID:
required: true
AWS_SECRET_ACCESS_KEY:
required: true
AWS_REGION:
required: true
AWS_AMPLIFY_APP_ID:
required: true
AWS_AMPLIFY_BRANCH:
required: true
outputs:
deploy_status:
description: 'Deployment status'
value: ${{ jobs.deploy.outputs.status }}
jobs:
deploy:
name: Deploy to Amplify
runs-on: ${{ inputs.runner }}
environment: ${{ inputs.environment }}
timeout-minutes: 15
outputs:
status: ${{ steps.deploy.outputs.status }}
steps:
- name: Download build artifact
uses: actions/download-artifact@v5
with:
name: build-output-${{ github.run_id }}
path: ${{ inputs.build_output_dir }}
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Deploy to Amplify
id: deploy
env:
AMPLIFY_APP_ID: ${{ secrets.AWS_AMPLIFY_APP_ID }}
AMPLIFY_BRANCH: ${{ secrets.AWS_AMPLIFY_BRANCH }}
run: |
echo "Deploying to Amplify app: $AMPLIFY_APP_ID (branch: $AMPLIFY_BRANCH)"
# Create zip of build output
cd ${{ inputs.build_output_dir }}
zip -r ../build-output.zip .
cd ..
# Create deployment
DEPLOYMENT=$(aws amplify create-deployment \
--app-id "$AMPLIFY_APP_ID" \
--branch-name "$AMPLIFY_BRANCH" \
--output json)
JOB_ID=$(echo "$DEPLOYMENT" | jq -r '.jobId')
UPLOAD_URL=$(echo "$DEPLOYMENT" | jq -r '.zipUploadUrl')
echo "Upload URL received, uploading build artifacts..."
# Upload build artifacts
curl --request PUT \
--upload-file build-output.zip \
"$UPLOAD_URL"
# Start deployment
aws amplify start-deployment \
--app-id "$AMPLIFY_APP_ID" \
--branch-name "$AMPLIFY_BRANCH" \
--job-id "$JOB_ID"
echo "Deployment started with job ID: $JOB_ID"
# Wait for deployment to complete
echo "Waiting for deployment to complete..."
aws amplify wait job-completed \
--app-id "$AMPLIFY_APP_ID" \
--branch-name "$AMPLIFY_BRANCH" \
--job-id "$JOB_ID" || true
# Check deployment status
JOB_STATUS=$(aws amplify get-job \
--app-id "$AMPLIFY_APP_ID" \
--branch-name "$AMPLIFY_BRANCH" \
--job-id "$JOB_ID" \
--query 'job.summary.status' \
--output text)
if [ "$JOB_STATUS" = "SUCCEED" ]; then
echo "status=success" >> $GITHUB_OUTPUT
else
echo "Deployment failed with status: $JOB_STATUS"
echo "status=failed" >> $GITHUB_OUTPUT
exit 1
fi
# Summary
echo "### Amplify Deployment Completed" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Property | Value |" >> $GITHUB_STEP_SUMMARY
echo "|----------|-------|" >> $GITHUB_STEP_SUMMARY
echo "| **App ID** | $AMPLIFY_APP_ID |" >> $GITHUB_STEP_SUMMARY
echo "| **Branch** | $AMPLIFY_BRANCH |" >> $GITHUB_STEP_SUMMARY
echo "| **Environment** | ${{ inputs.environment }} |" >> $GITHUB_STEP_SUMMARY
echo "| **Job ID** | $JOB_ID |" >> $GITHUB_STEP_SUMMARY
echo "| **Status** | $JOB_STATUS |" >> $GITHUB_STEP_SUMMARY
echo "| **Source** | ${{ inputs.build_output_dir }} |" >> $GITHUB_STEP_SUMMARY