Skip to content

Add Dockerfile and docker build step #82

Add Dockerfile and docker build step

Add Dockerfile and docker build step #82

Workflow file for this run

name: Deployment Pipeline
on:
push:
branches:
- main
- dev
- workflow-testing
pull_request:
branches: [main]
types: [opened, synchronize]
jobs:
test_lint_backend:
runs-on: ubuntu-20.04
defaults:
run:
working-directory: backend
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v2
with:
node-version: '16'
- name: create .env file
run: |
touch .env
echo DEV_MONGODB_URI=${{ secrets.DEV_MONGODB_URI }} >> .env
echo CLOUDINARY_NAME=${{ secrets.CLOUDINARY_NAME }} >> .env
echo CLOUDINARY_API_KEY=${{ secrets.CLOUDINARY_API_KEY }} >> .env
echo CLOUDINARY_API_SECRET=${{ secrets.CLOUDINARY_API_SECRET }} >> .env
echo JWT_SECRET=${{ secrets.JWT_SECRET }} >> .env
- name: npm install
run: npm install
- name: lint
run: npm run lint
- name: test
run: npm test
test_lint_frontend:
runs-on: ubuntu-20.04
defaults:
run:
working-directory: frontend
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v2
with:
node-version: '16'
- name: npm install
run: npm install
- name: lint
run: npm run lint
- name: test
run: npm test
- name: install backend dependencies, create .env (for cypress to run)
run: |
cd ../backend
touch .env
echo DEV_MONGODB_URI=${{ secrets.DEV_MONGODB_URI }} >> .env
echo CLOUDINARY_NAME=${{ secrets.CLOUDINARY_NAME }} >> .env
echo CLOUDINARY_API_KEY=${{ secrets.CLOUDINARY_API_KEY }} >> .env
echo CLOUDINARY_API_SECRET=${{ secrets.CLOUDINARY_API_SECRET }} >> .env
echo JWT_SECRET=${{ secrets.JWT_SECRET }} >> .env
npm install
- name: cypress tests
uses: cypress-io/github-action@v2
with:
start: npm run server:test, npm start
wait-on: 'http://localhost:3001/health, http://localhost:3000'
working-directory: ./frontend
build:
runs-on: ubuntu-20.04
defaults:
run:
working-directory: backend
needs: [test_lint_backend, test_lint_frontend]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v2
with:
node-version: '16'
- name: npm install
run: npm install
- name: install frontend dependencies
run: cd ../frontend && npm install
- name: build ui
run: npm run build:ui
build-and-push-docker:
runs-on: ubuntu-20.04
needs: [build]
steps:
-
name: Checkout
uses: actions/checkout@v4
-
name: Set up QEMU
uses: docker/setup-qemu-action@v3
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
-
name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
-
name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: user/instaclone:latest
deploy:
if: ${{ github.ref == 'refs/head/main' }}
runs-on: ubuntu-20.04
needs: [build-and-push-docker]
steps:
- uses: actions/checkout@v2
- uses: akhileshns/heroku-deploy@v3.12.12
with:
heroku_api_key: ${{secrets.HEROKU_API_KEY}}
heroku_app_name: "instaclone-sc"
heroku_email: "stiven.cabrera3@gmail.com"
appdir: "backend"
healthcheck: ""
checkstring: "ok"
rollbackonhealthcheckfailed: true
tag_release:
if: ${{ github.ref == 'refs/head/main' }}
needs: [deploy]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
fetch-depth: '0'
- name: Bump version and push tag
uses: anothrNick/github-tag-action@1.36.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# for deploying, make sure to have all final dependencies installed before deploying at all. aka, don't deploy, realize you need a new dep and then deploy again
# todo: research how i can add new packages after deployment and then redeploy