From ca305c0c86975430fbc504a94e7c66957341df6e Mon Sep 17 00:00:00 2001 From: "Jyotirmoy Bandyopadhyaya [Bravo68]" Date: Thu, 12 Jan 2023 13:07:09 +0530 Subject: [PATCH] Added GH actions + Reouting required for Portfolio reqs --- .github/workflows/deploy_api.yaml | 33 +++++++++++++++++++++ packages/api/.env.example | 6 +++- packages/api/configs/index.ts | 2 +- packages/api/index.ts | 2 ++ packages/api/package.json | 4 +-- packages/api/routes/me/gaming/osu.routes.ts | 19 +++++------- packages/api/routes/me/hashnode.routes.ts | 1 - packages/api/services/github.service.ts | 17 ++++++----- 8 files changed, 60 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/deploy_api.yaml diff --git a/.github/workflows/deploy_api.yaml b/.github/workflows/deploy_api.yaml new file mode 100644 index 0000000..f60a91a --- /dev/null +++ b/.github/workflows/deploy_api.yaml @@ -0,0 +1,33 @@ +name: Deploy to Server + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up SSH key + uses: actions/ssh-auth@v1 + with: + ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }} + + - name: Copy code to server + run: scp -r -o StrictHostKeyChecking=no -P ${{ secrets.SERVER_SSH_PORT }} . ${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_IP }}:/path/to/app/ + + - name: Build and Update Container + run: ssh -o StrictHostKeyChecking=no -p ${{ secrets.SERVER_SSH_PORT }} ${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_IP }} "cd /path/to/app && docker build -t my-image ." + + - name: stop and remove previous container + run: ssh -o StrictHostKeyChecking=no -p ${{ secrets.SERVER_SSH_PORT }} ${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_IP }} "export CONTAINER_ID=$(docker ps -q --filter ancestor='my-image:latest')" + + - name: start new container + run: ssh -o StrictHostKeyChecking=no -p ${{ secrets.SERVER_SSH_PORT }} ${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_IP }} "if [ -n "$CONTAINER_ID" ]; then docker stop "$CONTAINER_ID";docker rm "$CONTAINER_ID"; fi" + + - name: start new container + run: ssh -o StrictHostKeyChecking=no -p ${{ secrets.SERVER_SSH_PORT }} ${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_IP }} "docker run -d --name my-container my-image" diff --git a/packages/api/.env.example b/packages/api/.env.example index a27faac..e44c603 100644 --- a/packages/api/.env.example +++ b/packages/api/.env.example @@ -12,8 +12,11 @@ OSU_PASSWORD= YT_API_KEY= TWITTER_API_KEY= TWITTER_API_SECRET= +TWITTER_BEARER_TOKEN= SPOTIFY_CLIENT_ID= SPOTIFY_CLIENT_SECRET= +SPOTIFY_REDIRECT_URI= +SPOTIFY_REFRESH_TOKEN= S3_CLIENT_ID= S3_CLIENT_SECRET= S3_BUCKET_NAME= @@ -25,4 +28,5 @@ MAL_CLIENT_ID= MAL_CLIENT_SECRET= AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= -AWS_REGION= \ No newline at end of file +AWS_REGION= +WAKATIME_API_KEY= \ No newline at end of file diff --git a/packages/api/configs/index.ts b/packages/api/configs/index.ts index 22a73dd..efe6943 100644 --- a/packages/api/configs/index.ts +++ b/packages/api/configs/index.ts @@ -34,7 +34,7 @@ interface IConfigKeys { AWS_REGION: string } -export default class configStoreFactory { +export default class ConfigStoreFactory { public configStoreType: IconfigStore constructor(isProd: boolean = false) { diff --git a/packages/api/index.ts b/packages/api/index.ts index 767b2e1..4b8378f 100644 --- a/packages/api/index.ts +++ b/packages/api/index.ts @@ -14,6 +14,8 @@ export const app: express.Application = express() hgqlInit() +console.log('🚀', '@b68/api', 'v' + pkg.version) + const isDev: boolean = process.env.NODE_ENV == 'production' console.log(isDev ? '🚀 Production Mode' : '🚀 Development Mode') const configs = new configStore(isDev) diff --git a/packages/api/package.json b/packages/api/package.json index 9e77ed5..a9a7e34 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -34,9 +34,9 @@ "scripts": { "dev": "concurrently \"npm run dev:express\" \"npm run dev:hasura\"", "dev:hasura": "cd hasura && hasura --skip-update-check --envfile ../.env console", - "dev:express": "cross-env NODE_ENV=development nodemon -x node --no-warnings --experimental-specifier-resolution=node --loader ts-node/esm index.ts --signal SIGKILL", + "dev:express": "cross-env NODE_ENV=production nodemon -x node --no-warnings --experimental-specifier-resolution=node --loader ts-node/esm index.ts --signal SIGKILL", "build": "tsc", - "start": "node --es-module-specifier-resolution=node ./dist/index.js", + "start": "node --es-module-specifier-resolution=node ./build/index.js", "prettier": "prettier --write \"**/*.{ts,tsx,js,jsx,json,css,scss,md}\"" }, "devDependencies": { diff --git a/packages/api/routes/me/gaming/osu.routes.ts b/packages/api/routes/me/gaming/osu.routes.ts index a082d1c..9a79e8b 100644 --- a/packages/api/routes/me/gaming/osu.routes.ts +++ b/packages/api/routes/me/gaming/osu.routes.ts @@ -1,18 +1,13 @@ import { Router } from 'express' -import { makeResponse } from '../../../libs' +import OsuController from '../../../controllers/osu.controller' const router = Router() +const { fetchBestScores, fetchFavBeatmaps, fetchRecentScores, fetchUser } = + new OsuController() -router.get('/', (req, res) => { - res.send(makeResponse({ message: 'Hello World!' })) -}) - -router.all('/err', async (req, res, next) => { - try { - throw new Error('This is an error') - } catch (err) { - next(err) - } -}) +router.get('/user', fetchUser) +router.get('/best', fetchBestScores) +router.get('/recent', fetchRecentScores) +router.get('/fav', fetchFavBeatmaps) export default router diff --git a/packages/api/routes/me/hashnode.routes.ts b/packages/api/routes/me/hashnode.routes.ts index 7e02ce1..1b80743 100644 --- a/packages/api/routes/me/hashnode.routes.ts +++ b/packages/api/routes/me/hashnode.routes.ts @@ -1,5 +1,4 @@ import { Router } from 'express' -import { makeResponse } from '../../libs' import HashnodeController from '../../controllers/hashnode.controller' const router = Router() diff --git a/packages/api/services/github.service.ts b/packages/api/services/github.service.ts index 87733cc..f246eb4 100644 --- a/packages/api/services/github.service.ts +++ b/packages/api/services/github.service.ts @@ -1,10 +1,13 @@ import axios from '../helpers/axios_client' +import { configKeys } from '../' + +const config = configKeys export default class Github { public getGithubUser = async () => { const { data } = await axios.get(`https://api.github.com/user`, { headers: { - Autherization: `token ${process.env.GH_TOKEN}`, + Authorization: `token ${config.GH_TOKEN}`, }, }) return data @@ -15,7 +18,7 @@ export default class Github { `https://api.github.com/users/${username}/repos`, { headers: { - Autherization: `token ${process.env.GH_TOKEN}`, + Authorization: `token ${process.env.GH_TOKEN}`, }, } ) @@ -27,7 +30,7 @@ export default class Github { `https://api.github.com/users/${username}/gists`, { headers: { - Autherization: `token ${process.env.GH_TOKEN}`, + Authorization: `token ${process.env.GH_TOKEN}`, }, } ) @@ -39,7 +42,7 @@ export default class Github { `https://api.github.com/users/${username}/followers`, { headers: { - Autherization: `token ${process.env.GH_TOKEN}`, + Authorization: `token ${process.env.GH_TOKEN}`, }, } ) @@ -51,7 +54,7 @@ export default class Github { `https://api.github.com/users/${username}/following`, { headers: { - Autherization: `token ${process.env.GH_TOKEN}`, + Authorization: `token ${process.env.GH_TOKEN}`, }, } ) @@ -63,7 +66,7 @@ export default class Github { `https://api.github.com/users/${username}/starred`, { headers: { - Autherization: `token ${process.env.GH_TOKEN}`, + Authorization: `token ${process.env.GH_TOKEN}`, }, } ) @@ -75,7 +78,7 @@ export default class Github { `https://api.github.com/users/${username}/events`, { headers: { - Autherization: `token ${process.env.GH_TOKEN}`, + Authorization: `token ${process.env.GH_TOKEN}`, }, } )