first commit
This commit is contained in:
commit
afa764b678
56
.gitignore
vendored
Normal file
56
.gitignore
vendored
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
|
||||||
|
dist
|
||||||
|
.next
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
package-lock.json
|
||||||
|
|
||||||
|
# envs
|
||||||
|
.env
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
*.pem
|
||||||
|
|
||||||
|
# debug
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
.pnpm-debug.log*
|
||||||
|
|
||||||
|
# local env files
|
||||||
|
.env*.local
|
||||||
|
|
||||||
|
# typescript
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
dist
|
||||||
|
dist-*
|
||||||
|
cabal-dev
|
||||||
|
*.o
|
||||||
|
*.hi
|
||||||
|
*.hie
|
||||||
|
*.chi
|
||||||
|
*.chs.h
|
||||||
|
*.dyn_o
|
||||||
|
*.dyn_hi
|
||||||
|
.hpc
|
||||||
|
.hsenv
|
||||||
|
.cabal-sandbox/
|
||||||
|
cabal.sandbox.config
|
||||||
|
*.prof
|
||||||
|
*.aux
|
||||||
|
*.hp
|
||||||
|
*.eventlog
|
||||||
|
.stack-work/
|
||||||
|
cabal.project.local
|
||||||
|
cabal.project.local~
|
||||||
|
.HTF/
|
||||||
|
.ghc.environment.*
|
||||||
|
id_rsa
|
||||||
|
.cache
|
||||||
|
|
||||||
|
.env.stg
|
40
Dockerfile
Normal file
40
Dockerfile
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Install dependencies only when needed
|
||||||
|
FROM node:19-alpine AS deps
|
||||||
|
|
||||||
|
WORKDIR leCoffre
|
||||||
|
|
||||||
|
RUN npm install -D prisma@4.11.0
|
||||||
|
COPY package.json ./
|
||||||
|
|
||||||
|
RUN apk update && apk add openssh-client git
|
||||||
|
|
||||||
|
#COPY id_rsa /root/.ssh/id_rsa
|
||||||
|
#RUN chmod 600 ~/.ssh/id_rsa
|
||||||
|
#RUN eval "$(ssh-agent -s)" && ssh-add /root/.ssh/id_rsa
|
||||||
|
#RUN ssh-keyscan github.com smart-chain-fr/leCoffre-resources.git >> /root/.ssh/known_hosts
|
||||||
|
|
||||||
|
RUN npm install --frozen-lockfile
|
||||||
|
|
||||||
|
COPY tsconfig.json tsconfig.json
|
||||||
|
COPY src src
|
||||||
|
|
||||||
|
RUN npx prisma generate
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Production image, copy all the files and run next
|
||||||
|
FROM node:19-alpine AS production
|
||||||
|
|
||||||
|
WORKDIR leCoffre
|
||||||
|
|
||||||
|
RUN adduser -D lecoffreuser --uid 10000 && chown -R lecoffreuser .
|
||||||
|
|
||||||
|
COPY --from=deps --chown=lecoffreuser leCoffre/node_modules ./node_modules
|
||||||
|
COPY --from=deps --chown=lecoffreuser leCoffre/dist dist
|
||||||
|
COPY --from=deps --chown=lecoffreuser leCoffre/package.json ./package.json
|
||||||
|
COPY --from=deps --chown=lecoffreuser leCoffre/src/common/databases ./src/common/databases
|
||||||
|
|
||||||
|
RUN apk update && apk add chromium
|
||||||
|
USER lecoffreuser
|
||||||
|
|
||||||
|
CMD ["npm", "run", "api:start"]
|
||||||
|
EXPOSE 3001
|
28
README.md
Normal file
28
README.md
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Mini Serveur Express
|
||||||
|
|
||||||
|
Un mini serveur Express avec une route `/api/ping` qui renvoie "Hello World".
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
## Démarrage du serveur
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou en mode développement avec rechargement automatique :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
## Utilisation
|
||||||
|
|
||||||
|
Une fois le serveur démarré, la route ping est accessible à :
|
||||||
|
- http://localhost:3000/api/ping
|
||||||
|
|
||||||
|
Cette route renvoie un objet JSON avec le message "Hello World".
|
18
package.json
Normal file
18
package.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "lecoffre-back-mini",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Mini serveur avec une route /api/ping",
|
||||||
|
"main": "src/server.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node src/server.js",
|
||||||
|
"dev": "nodemon src/server.js"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"cors": "^2.8.5",
|
||||||
|
"express": "^4.18.2",
|
||||||
|
"node-fetch": "^2.6.7"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"nodemon": "^3.0.1"
|
||||||
|
}
|
||||||
|
}
|
58
src/server.js
Normal file
58
src/server.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
const express = require('express');
|
||||||
|
const cors = require('cors');
|
||||||
|
const fetch = require('node-fetch');
|
||||||
|
|
||||||
|
// Initialisation de l'application Express
|
||||||
|
const app = express();
|
||||||
|
const PORT = process.env.PORT || 8080;
|
||||||
|
|
||||||
|
// Configuration CORS
|
||||||
|
const corsOptions = {
|
||||||
|
origin: ['http://local.lecoffreio.4nkweb:3000', 'http://localhost:3000'],
|
||||||
|
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
||||||
|
allowedHeaders: ['Content-Type', 'Authorization']
|
||||||
|
};
|
||||||
|
|
||||||
|
app.use(cors(corsOptions));
|
||||||
|
app.use(express.json());
|
||||||
|
|
||||||
|
app.get('/api/v1/health', (req, res) => {
|
||||||
|
res.json({ message: 'OK' });
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post('/api/v1/idnot/user/:code', async (req, res) => {
|
||||||
|
const code = req.params.code;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const params = {
|
||||||
|
client_id: 'B3CE56353EDB15A9',
|
||||||
|
client_secret: '3F733549E879878344B6C949B366BB5CDBB2DB5B7F7AB7EBBEBB0F0DD0776D1C',
|
||||||
|
redirect_uri: 'http://local.lecoffreio.4nkweb:3000/authorized-client',
|
||||||
|
grant_type: 'authorization_code',
|
||||||
|
code: code
|
||||||
|
};
|
||||||
|
|
||||||
|
const response = await fetch('https://qual-connexion.idnot.fr/user/IdPOAuth2/token/idnot_idp_v1', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
|
},
|
||||||
|
body: new URLSearchParams(params).toString()
|
||||||
|
});
|
||||||
|
|
||||||
|
const json = await response.json();
|
||||||
|
res.json({
|
||||||
|
accessToken: json.id_token,
|
||||||
|
refreshToken: json.access_token
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({
|
||||||
|
error: 'Internal Server Error',
|
||||||
|
message: error.message
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.listen(PORT, () => {
|
||||||
|
console.log(`Server is running on port ${PORT}`);
|
||||||
|
});
|
118
workflows/ppd.yml
Normal file
118
workflows/ppd.yml
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
name: Preprod - Build & Deploy to Scaleway
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [preprod]
|
||||||
|
|
||||||
|
env:
|
||||||
|
|
||||||
|
PROJECT_ID_LECOFFRE: 72d08499-37c2-412b-877e-f8af0471654a
|
||||||
|
NAMESPACE_ID_LECOFFRE: e975f056-967e-43fe-b237-84bfa8032e64
|
||||||
|
CONTAINER_REGISTRY_ENDPOINT_LECOFFRE: rg.fr-par.scw.cloud/funcscwlecoffreppdmp73pool
|
||||||
|
|
||||||
|
IMAGE_NAME: back
|
||||||
|
CONTAINER_NAME: back
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push-images-lecoffre:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Setup SSH
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.ssh
|
||||||
|
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
|
||||||
|
chmod 600 ~/.ssh/id_rsa
|
||||||
|
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
|
||||||
|
env:
|
||||||
|
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
- name: Copy SSH
|
||||||
|
run: cp ~/.ssh/id_rsa id_rsa
|
||||||
|
- name: Login to Scaleway Container Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: nologin
|
||||||
|
password: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
registry: ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}
|
||||||
|
- name: Build the Back Image
|
||||||
|
run: docker build . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/${{ env.IMAGE_NAME }}
|
||||||
|
- name: Push the Back Image to Scaleway Container Registry
|
||||||
|
run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/${{ env.IMAGE_NAME }}
|
||||||
|
- name: Build the Cron Image
|
||||||
|
run: docker build -f Dockerfile-Cron . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/cron
|
||||||
|
- name: Push the Cron Image to Scaleway Container Registry
|
||||||
|
run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/cron
|
||||||
|
|
||||||
|
deploy-back-lecoffre:
|
||||||
|
needs: build-and-push-images-lecoffre
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment: preprod
|
||||||
|
steps:
|
||||||
|
- name: Install CLI
|
||||||
|
uses: scaleway/action-scw@v0
|
||||||
|
- name: Get container ID
|
||||||
|
run: |
|
||||||
|
echo "CONTAINER_ID=$(scw container container list namespace-id=${{ env.NAMESPACE_ID_LECOFFRE }} -o json | jq -r '.[] | select(.name == "${{ env.CONTAINER_NAME }}") | .id')" >> $GITHUB_ENV
|
||||||
|
env:
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
- name: Deploy the container based on the new image
|
||||||
|
run: |
|
||||||
|
env_string=""
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ "$line" == *"="* ]]; then
|
||||||
|
key=$(echo "$line" | cut -d '=' -f 1)
|
||||||
|
value=$(echo "$line" | cut -d '=' -f 2-)
|
||||||
|
if [[ -n "$key" ]]; then
|
||||||
|
env_string+="environment-variables.$key=$value "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$ENV_VARS"
|
||||||
|
env_string=$(echo $env_string | sed 's/ $//')
|
||||||
|
scw container container update ${{ env.CONTAINER_ID }} $env_string
|
||||||
|
env:
|
||||||
|
ENV_VARS: ${{ secrets.ENV }}
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
|
||||||
|
deploy-cron-lecoffre:
|
||||||
|
needs: build-and-push-images-lecoffre
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment: preprod
|
||||||
|
steps:
|
||||||
|
- name: Install CLI
|
||||||
|
uses: scaleway/action-scw@v0
|
||||||
|
- name: Get container ID
|
||||||
|
run: |
|
||||||
|
echo "CONTAINER_ID=$(scw container container list namespace-id=${{env.NAMESPACE_ID_LECOFFRE}} -o json | jq -r '.[] | select(.name == "cron") | .id')" >> $GITHUB_ENV
|
||||||
|
env:
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
- name: Deploy the container based on the new image
|
||||||
|
run: |
|
||||||
|
env_string=""
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ "$line" == *"="* ]]; then
|
||||||
|
key=$(echo "$line" | cut -d '=' -f 1)
|
||||||
|
value=$(echo "$line" | cut -d '=' -f 2-)
|
||||||
|
if [[ -n "$key" ]]; then
|
||||||
|
env_string+="environment-variables.$key=$value "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$ENV_VARS"
|
||||||
|
env_string=$(echo $env_string | sed 's/ $//')
|
||||||
|
scw container container update ${{ env.CONTAINER_ID }} $env_string
|
||||||
|
env:
|
||||||
|
ENV_VARS: ${{ secrets.ENV }}
|
||||||
|
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
|
118
workflows/prd.yml
Normal file
118
workflows/prd.yml
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
name: Prod - Build & Deploy to Scaleway
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
env:
|
||||||
|
|
||||||
|
PROJECT_ID_LECOFFRE: 72d08499-37c2-412b-877e-f8af0471654a
|
||||||
|
NAMESPACE_ID_LECOFFRE: 8fbbce9d-31d1-4368-94c4-445e79f10834
|
||||||
|
CONTAINER_REGISTRY_ENDPOINT_LECOFFRE: rg.fr-par.scw.cloud/funcscwlecoffreprdjulp9mam
|
||||||
|
|
||||||
|
IMAGE_NAME: back
|
||||||
|
CONTAINER_NAME: back
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push-images-lecoffre:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
#- name: Setup SSH
|
||||||
|
# run: |
|
||||||
|
# mkdir -p ~/.ssh
|
||||||
|
# echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
|
||||||
|
# chmod 600 ~/.ssh/id_rsa
|
||||||
|
# ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
|
||||||
|
# env:
|
||||||
|
# SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
#- name: Copy SSH
|
||||||
|
# run: cp ~/.ssh/id_rsa id_rsa
|
||||||
|
- name: Login to Scaleway Container Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: nologin
|
||||||
|
password: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
registry: ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}
|
||||||
|
- name: Build the Back Image
|
||||||
|
run: docker build . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/${{ env.IMAGE_NAME }}
|
||||||
|
- name: Push the Back Image to Scaleway Container Registry
|
||||||
|
run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/${{ env.IMAGE_NAME }}
|
||||||
|
- name: Build the Cron Image
|
||||||
|
run: docker build -f Dockerfile-Cron . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/cron
|
||||||
|
- name: Push the Cron Image to Scaleway Container Registry
|
||||||
|
run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/cron
|
||||||
|
|
||||||
|
deploy-back-lecoffre:
|
||||||
|
needs: build-and-push-images-lecoffre
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment: prod
|
||||||
|
steps:
|
||||||
|
- name: Install CLI
|
||||||
|
uses: scaleway/action-scw@v0
|
||||||
|
- name: Get container ID
|
||||||
|
run: |
|
||||||
|
echo "CONTAINER_ID=$(scw container container list namespace-id=${{ env.NAMESPACE_ID_LECOFFRE }} -o json | jq -r '.[] | select(.name == "${{ env.CONTAINER_NAME }}") | .id')" >> $GITHUB_ENV
|
||||||
|
env:
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
- name: Deploy the container based on the new image
|
||||||
|
run: |
|
||||||
|
env_string=""
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ "$line" == *"="* ]]; then
|
||||||
|
key=$(echo "$line" | cut -d '=' -f 1)
|
||||||
|
value=$(echo "$line" | cut -d '=' -f 2-)
|
||||||
|
if [[ -n "$key" ]]; then
|
||||||
|
env_string+="environment-variables.$key=$value "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$ENV_VARS"
|
||||||
|
env_string=$(echo $env_string | sed 's/ $//')
|
||||||
|
scw container container update ${{ env.CONTAINER_ID }} $env_string
|
||||||
|
env:
|
||||||
|
ENV_VARS: ${{ secrets.ENV }}
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
|
||||||
|
deploy-cron-lecoffre:
|
||||||
|
needs: build-and-push-images-lecoffre
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment: prod
|
||||||
|
steps:
|
||||||
|
- name: Install CLI
|
||||||
|
uses: scaleway/action-scw@v0
|
||||||
|
- name: Get container ID
|
||||||
|
run: |
|
||||||
|
echo "CONTAINER_ID=$(scw container container list namespace-id=${{env.NAMESPACE_ID_LECOFFRE}} -o json | jq -r '.[] | select(.name == "cron") | .id')" >> $GITHUB_ENV
|
||||||
|
env:
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
- name: Deploy the container based on the new image
|
||||||
|
run: |
|
||||||
|
env_string=""
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ "$line" == *"="* ]]; then
|
||||||
|
key=$(echo "$line" | cut -d '=' -f 1)
|
||||||
|
value=$(echo "$line" | cut -d '=' -f 2-)
|
||||||
|
if [[ -n "$key" ]]; then
|
||||||
|
env_string+="environment-variables.$key=$value "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$ENV_VARS"
|
||||||
|
env_string=$(echo $env_string | sed 's/ $//')
|
||||||
|
scw container container update ${{ env.CONTAINER_ID }} $env_string
|
||||||
|
env:
|
||||||
|
ENV_VARS: ${{ secrets.ENV }}
|
||||||
|
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
|
114
workflows/stg.yml
Normal file
114
workflows/stg.yml
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
name: Staging - Build & Deploy to Scaleway
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [staging]
|
||||||
|
|
||||||
|
env:
|
||||||
|
PROJECT_ID_LECOFFRE: 72d08499-37c2-412b-877e-f8af0471654a
|
||||||
|
NAMESPACE_ID_LECOFFRE: f8137e85-47ad-46a5-9e2e-18af5de829c5
|
||||||
|
CONTAINER_REGISTRY_ENDPOINT_LECOFFRE: rg.fr-par.scw.cloud/funcscwlecoffrestgbqbfhtv6
|
||||||
|
|
||||||
|
IMAGE_NAME: back
|
||||||
|
CONTAINER_NAME: back
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push-images-lecoffre:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Setup SSH
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.ssh
|
||||||
|
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
|
||||||
|
chmod 600 ~/.ssh/id_rsa
|
||||||
|
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
|
||||||
|
env:
|
||||||
|
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
- name: Copy SSH
|
||||||
|
run: cp ~/.ssh/id_rsa id_rsa
|
||||||
|
- name: Login to Scaleway Container Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: nologin
|
||||||
|
password: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
registry: ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}
|
||||||
|
- name: Build the Back Image
|
||||||
|
run: docker build . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/${{ env.IMAGE_NAME }}
|
||||||
|
- name: Push the Back Image to Scaleway Container Registry
|
||||||
|
run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/${{ env.IMAGE_NAME }}
|
||||||
|
- name: Build the Cron Image
|
||||||
|
run: docker build -f Dockerfile-Cron . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/cron
|
||||||
|
- name: Push the Cron Image to Scaleway Container Registry
|
||||||
|
run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/cron
|
||||||
|
deploy-back-lecoffre:
|
||||||
|
needs: build-and-push-images-lecoffre
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment: staging
|
||||||
|
steps:
|
||||||
|
- name: Install CLI
|
||||||
|
uses: scaleway/action-scw@v0
|
||||||
|
- name: Get container ID
|
||||||
|
run: |
|
||||||
|
echo "CONTAINER_ID=$(scw container container list namespace-id=${{ env.NAMESPACE_ID_LECOFFRE }} -o json | jq -r '.[] | select(.name == "${{ env.CONTAINER_NAME }}") | .id')" >> $GITHUB_ENV
|
||||||
|
env:
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
- name: Deploy the container based on the new image
|
||||||
|
run: |
|
||||||
|
env_string=""
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ "$line" == *"="* ]]; then
|
||||||
|
key=$(echo "$line" | cut -d '=' -f 1)
|
||||||
|
value=$(echo "$line" | cut -d '=' -f 2-)
|
||||||
|
if [[ -n "$key" ]]; then
|
||||||
|
env_string+="environment-variables.$key=$value "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$ENV_VARS"
|
||||||
|
env_string=$(echo $env_string | sed 's/ $//')
|
||||||
|
scw container container update ${{ env.CONTAINER_ID }} $env_string
|
||||||
|
env:
|
||||||
|
ENV_VARS: ${{ secrets.ENV }}
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
deploy-cron-lecoffre:
|
||||||
|
needs: build-and-push-images-lecoffre
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment: staging
|
||||||
|
steps:
|
||||||
|
- name: Install CLI
|
||||||
|
uses: scaleway/action-scw@v0
|
||||||
|
- name: Get container ID
|
||||||
|
run: |
|
||||||
|
echo "CONTAINER_ID=$(scw container container list namespace-id=${{env.NAMESPACE_ID_LECOFFRE}} -o json | jq -r '.[] | select(.name == "cron") | .id')" >> $GITHUB_ENV
|
||||||
|
env:
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
- name: Deploy the container based on the new image
|
||||||
|
run: |
|
||||||
|
env_string=""
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ "$line" == *"="* ]]; then
|
||||||
|
key=$(echo "$line" | cut -d '=' -f 1)
|
||||||
|
value=$(echo "$line" | cut -d '=' -f 2-)
|
||||||
|
if [[ -n "$key" ]]; then
|
||||||
|
env_string+="environment-variables.$key=$value "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$ENV_VARS"
|
||||||
|
env_string=$(echo $env_string | sed 's/ $//')
|
||||||
|
scw container container update ${{ env.CONTAINER_ID }} $env_string
|
||||||
|
env:
|
||||||
|
ENV_VARS: ${{ secrets.ENV }}
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }}
|
||||||
|
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user