Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test change triggered across all env #31

Merged
merged 9 commits into from
Nov 18, 2024
82 changes: 62 additions & 20 deletions .github/workflows/stagging-cicd.yml
Original file line number Diff line number Diff line change
@@ -1,32 +1,37 @@
name: Stagging CI/CD Pipeline

name: Staging CI/CD Pipeline

on:
push:
branches:
- stagging
# pull_request:
# 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:
Expand All @@ -43,20 +48,24 @@ jobs:
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

Expand All @@ -77,31 +86,64 @@ jobs:
echo "${{ secrets.EC2_SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts
echo "Testing SSH connection..."
ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} 'echo "SSH connection successful"'

- name: Deploy to EC2
run: |
echo "Starting deployment..."
ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} "\
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

echo 'Stopping existing container...'
docker ps -q --filter 'name=next-js-app' | grep -q . && docker stop next-js-app && docker rm next-js-app || true

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 ${{ env.IMAGE_NAME }}:dev
docker pull daoudhussaindev/next-js-app:dev

echo 'Starting new container...'
docker run -d \
--name next-js-app-stagging \
--name next-js-app-staging \
-p 3000:3000 \
--restart unless-stopped \
${{ env.IMAGE_NAME }}:dev

daoudhussaindev/next-js-app: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 ${{ env.CONTAINER_NAME }}; then
echo 'Deployment verified successfully'
exit 0
else
echo 'Deployment verification failed'
exit 1
fi
EOF
2 changes: 1 addition & 1 deletion app/page.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ describe("App Router", () => {
render(<Page />);

// Check for specific heading (e.g., <h1> text)
expect(screen.getByRole('heading', { name: /My Next\.js Site/i })).toBeInTheDocument();
expect(screen.getByRole('heading', { name: /Next\.js Site/i })).toBeInTheDocument();

// Alternatively, you can check for other headings or count the number of heading elements
const headings = screen.getAllByRole('heading');
Expand Down
Loading