feat: add github actions #31
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy Next.js to AWS Amplify | |
on: | |
pull_request: | |
branches: [ "main" ] | |
paths: | |
- .github/workflows/aws-amplify.yml | |
- client/** | |
- assistant/** | |
env: | |
AWS_REGION: ${{ vars.AWS_REGION }} | |
NEXT_PUBLIC_API_DOMAIN: ${{ vars.NEXT_PUBLIC_API_DOMAIN }} | |
AMPLIFY_APP_ID: ${{ vars.AMPLIFY_APP_ID }} | |
S3_BUCKET: ${{ vars.S3_BUCKET }} | |
NEXT_STANDALONE: "true" | |
permissions: | |
id-token: write | |
contents: read | |
jobs: | |
deploy: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
node-version: [18.x] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Cache node modules | |
uses: actions/cache@v2 | |
with: | |
path: client/node_modules | |
key: ${{ runner.os }}-node-${{ hashFiles('client/**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
- name: Node ${{ matrix.node-version }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: arn:aws:iam::654654285942:role/Github-OIDC | |
audience: sts.amazonaws.com | |
aws-region: ${{ env.AWS_REGION }} | |
- name: Configure Amplify CLI | |
run: npm install -g @aws-amplify/cli | |
- name: Install Dependencies | |
run: npm install | |
working-directory: ./client # 仅在 ./client 目录下安装 Next.js 项目的依赖项 | |
- name: Build Amplify App | |
run: npm run build | |
working-directory: ./client # 仅在 ./client 目录下构建 Next.js 应用程序 | |
- name: Zip Build Folder | |
run: zip -r build.zip ./.next | |
working-directory: ./client | |
- name: Upload Build to S3 | |
run: | | |
aws s3 cp ./client/build.zip s3://${{ env.S3_BUCKET }}/builds/${{ github.sha }}.zip | |
- name: Check if branch exists in Amplify | |
id: check_branch | |
run: | | |
branch_name="${{ github.head_ref }}" | |
app_id="${{ vars.AMPLIFY_APP_ID }}" | |
branch_exists=$(aws amplify list-branches --app-id $app_id --query "branches[?branchName=='$branch_name'].branchName" --output text) | |
if [ -z "$branch_exists" ]; then | |
echo "Branch $branch_name does not exist. Creating branch..." | |
aws amplify create-branch --app-id $app_id --branch-name $branch_name | |
else | |
echo "Branch $branch_name already exists." | |
fi | |
- name: Start Amplify deployment | |
run: | | |
branch_name="${{ github.head_ref }}" | |
app_id="${{ vars.AMPLIFY_APP_ID }}" | |
source_url="s3://${{ env.S3_BUCKET }}/builds/${{ github.sha }}.zip" | |
aws amplify start-deployment --app-id $app_id --branch-name $branch_name --source-url $source_url --output json > deployment.json | |
- name: Output deployment details | |
run: | | |
cat deployment.json | |