Update page.tsx in dev branch #25
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: Staging CI/CD Pipeline | |
on: | |
push: | |
branches: | |
- stagging | |
env: | |
IMAGE_NAME: daoudhussaindev/next-js-app | |
NODE_VERSION: 18.x | |
AWS_REGION: ap-south-1 | |
CONTAINER_NAME: next-js-app-staging | |
PORT: 3000 | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up Node.js ${{ env.NODE_VERSION }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
cache: 'npm' | |
- name: Install dependencies | |
run: npm ci | |
- name: Build Next.js application | |
run: npm run build | |
- name: Cache build output | |
uses: actions/cache@v3 | |
with: | |
path: | | |
.next | |
node_modules | |
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} | |
restore-keys: | | |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- | |
test: | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up Node.js ${{ env.NODE_VERSION }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
cache: 'npm' | |
- name: Restore cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
.next | |
node_modules | |
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} | |
- name: Install dependencies | |
run: npm ci | |
- name: Run tests | |
run: npm run test | |
deploy: | |
needs: [build, test] | |
runs-on: ubuntu-latest | |
steps: | |
- 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: ${{ env.AWS_REGION }} | |
- name: Set up SSH | |
run: | | |
mkdir -p ~/.ssh | |
echo "${{ secrets.EC2_SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key | |
chmod 600 ~/.ssh/deploy_key | |
ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts | |
- name: Deploy to EC2 | |
run: | | |
echo "Starting deployment..." | |
ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << EOF | |
set -e | |
echo 'Connected to EC2 instance' | |
echo 'Checking Docker status...' | |
docker ps -a | |
echo 'Ensuring no containers are bound to port 3000...' | |
CONFLICTING_CONTAINER=\$(docker ps -q --filter publish=3000) | |
if [ -n "\$CONFLICTING_CONTAINER" ]; then | |
echo 'Stopping conflicting container...' | |
docker stop \$CONFLICTING_CONTAINER | |
echo 'Removing conflicting container...' | |
docker rm \$CONFLICTING_CONTAINER | |
fi | |
echo 'Stopping and removing existing container named next-js-app-staging (if exists)...' | |
docker stop next-js-app-staging || true | |
docker rm next-js-app-staging || true | |
echo 'Pulling new image...' | |
docker pull daoudhussaindev/next-js-app:dev | |
echo 'Starting new container...' | |
docker run -d \ | |
--name next-js-app-staging \ | |
-p 3000:3000 \ | |
-e PORT=3000 \ | |
--restart unless-stopped \ | |
${{ env.IMAGE_NAME }}:dev | |
echo 'Cleaning up old images...' | |
docker image prune -f | |
echo 'Verifying deployment...' | |
if docker ps | grep -q next-js-app-staging; then | |
echo 'Container is running successfully' | |
else | |
echo 'Container failed to start' | |
exit 1 | |
fi | |
echo 'Deployment completed successfully' | |
EOF | |
- name: Verify Deployment | |
run: | | |
echo "Verifying deployment..." | |
sleep 15 # Give the application time to start | |
ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << EOF | |
if docker ps | grep -q next-js-app-staging; then | |
echo 'Deployment verified successfully' | |
exit 0 | |
else | |
echo 'Deployment verification failed' | |
exit 1 | |
fi | |
EOF |