Skip to content

Commit

Permalink
Merge branch 'master' into fix/1048
Browse files Browse the repository at this point in the history
  • Loading branch information
RochDLY committed Oct 31, 2024
2 parents 1dc5241 + bbc2c40 commit 93e6300
Show file tree
Hide file tree
Showing 73 changed files with 3,792 additions and 8,291 deletions.
50 changes: 49 additions & 1 deletion .github/workflows/deploy-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,44 @@ on:
description: Release version to deploy
required: true

env:
SNOWPACK_PUBLIC_BACKEND_ENDPOINT: https://stylo.huma-num.fr
SNOWPACK_PUBLIC_GRAPHQL_ENDPOINT: https://stylo.huma-num.fr/graphql
SNOWPACK_PUBLIC_EXPORT_ENDPOINT: https://stylo.ecrituresnumeriques.ca
SNOWPACK_PUBLIC_PROCESS_ENDPOINT: https://stylo-export.ecrituresnumeriques.ca
SNOWPACK_PUBLIC_PANDOC_EXPORT_ENDPOINT: https://export.stylo.huma-num.fr
SNOWPACK_PUBLIC_HUMAN_ID_REGISTER_ENDPOINT: https://humanid.huma-num.fr/register?service=https://stylo.huma-num.fr/authorization-code/callback
SNOWPACK_MATOMO_URL: https://analyseweb.huma-num.fr/
SNOWPACK_MATOMO_SITE_ID: 286

jobs:
build-assets:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm

- name: Build front assets
run: |
npm clean-install --prefix=front
npm run build --prefix=front
- name: Store build artifacts for the deploy stage
uses: actions/upload-artifact@v4
with:
name: front-assets
path: ./front/build
if-no-files-found: error
include-hidden-files: true

deployment:
runs-on: ubuntu-latest
needs: [build-assets]
environment:
name: production
url: https://stylo.huma-num.fr
Expand All @@ -25,6 +60,12 @@ jobs:
with:
ref: ${{ format('v{0}', inputs.release-version) }}

- uses: actions/download-artifact@v4
id: assets
with:
name: front-assets
path: /tmp/front-assets

- name: Set up Python 3.10 (w/ cache)
uses: actions/setup-python@v5
with:
Expand All @@ -48,4 +89,11 @@ jobs:
- name: Run playbook
working-directory: ./infrastructure
run: ansible-playbook -i inventories/prod --extra-vars "@vault-prod.yml" --extra-vars "app_version=${{ inputs.release-version }}" --private-key ~/.ssh/id_ed25519 --vault-password-file ./.ansible-vault-password playbook.yml -v
run: |
ansible-playbook -v -i inventories/prod \
--extra-vars "@vault-prod.yml" \
--extra-vars "app_version=${{ inputs.release-version }}" \
--extra-vars "assets_path=/tmp/front-assets/" \
--private-key ~/.ssh/id_ed25519 \
--vault-password-file ./.ansible-vault-password \
playbook.yml
49 changes: 48 additions & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,44 @@ on:
- completed
workflow_dispatch:

env:
SNOWPACK_PUBLIC_BACKEND_ENDPOINT: https://stylo-dev.huma-num.fr
SNOWPACK_PUBLIC_GRAPHQL_ENDPOINT: https://stylo-dev.huma-num.fr/graphql
SNOWPACK_PUBLIC_EXPORT_ENDPOINT: https://stylo-dev.huma-num.fr
SNOWPACK_PUBLIC_PROCESS_ENDPOINT: https://stylo-export.ecrituresnumeriques.ca
SNOWPACK_PUBLIC_PANDOC_EXPORT_ENDPOINT: https://export.stylo-dev.huma-num.fr
SNOWPACK_PUBLIC_HUMAN_ID_REGISTER_ENDPOINT: https://auth-test.huma-num.fr/register?service=https://stylo-dev.huma-num.fr/authorization-code/callback
SNOWPACK_MATOMO_URL: https://analyseweb.huma-num.fr/
SNOWPACK_MATOMO_SITE_ID: 286

jobs:
build-assets:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm

- name: Build front assets
run: |
npm clean-install --prefix=front
npm run build --prefix=front -- --mode=development
- name: Store build artifacts for the deploy stage
uses: actions/upload-artifact@v4
with:
name: front-assets
path: ./front/build
if-no-files-found: error
include-hidden-files: true

deployment:
runs-on: ubuntu-latest
needs: [build-assets]
environment:
name: staging
url: https://stylo-dev.huma-num.fr
Expand All @@ -23,6 +58,12 @@ jobs:
steps:
- uses: actions/checkout@v4

- uses: actions/download-artifact@v4
id: assets
with:
name: front-assets
path: /tmp/front-assets

- name: Set up Python 3.10 (w/ cache)
uses: actions/setup-python@v5
with:
Expand All @@ -46,4 +87,10 @@ jobs:
- name: Run playbook
working-directory: ./infrastructure
run: ansible-playbook -i inventories/dev --extra-vars "@vault-dev.yml" --private-key ~/.ssh/id_ed25519 --vault-password-file ./.ansible-vault-password playbook.yml -vvv
run: |
ansible-playbook -v -i inventories/dev \
--extra-vars "@vault-dev.yml" \
--extra-vars "assets_path=/tmp/front-assets/" \
--private-key ~/.ssh/id_ed25519 \
--vault-password-file ./.ansible-vault-password \
playbook.yml
17 changes: 12 additions & 5 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
name: Build and deploy Docker images

on:
workflow_dispatch:
inputs:
release-version:
description: Release version to deploy
required: true
type: string
workflow_call:
inputs:
release-version:
required: true
type: string
push:
tags:
- 'v*' # Push events to matching v*, i.e. v1.0, v2.1.3
branches:
- master
paths:
Expand All @@ -18,9 +26,9 @@ on:
- 'stylo-example.env'
pull_request:
paths:
- 'graphql/**'
- 'front/**'
- 'export/**'
- 'graphql/dockerfile'
- 'front/dockerfile'
- 'export/dockerfile'
- '.github/workflows/docker.yml'
- 'docker-compose.yaml'
- 'stylo-example.env'
Expand Down Expand Up @@ -52,9 +60,8 @@ jobs:
- uses: actions/checkout@v4
with:
ref: ${{ (inputs.release-version && format('v{0}', inputs.release-version)) || github.ref }}
submodules: true
- uses: docker/setup-buildx-action@v3
- run: cp stylo-example.env stylo.env
- run: cp stylo-example.env .env

# Needed to expose ACTIONS_CACHE_URL and ACTIONS_RUNTIME_URL variables
# Which are unreachable outside of an action context
Expand Down
8 changes: 3 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,20 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- run: |
node -e "const pkg = require('./package.json'); pkg.version = '$RELEASE_VERSION'; require('fs').writeFileSync('./package.json', JSON.stringify(pkg, null, ' '), 'utf8')"
node -e "const pkg = require('./front/package.json'); pkg.version = '$RELEASE_VERSION'; require('fs').writeFileSync('./front/package.json', JSON.stringify(pkg, null, ' '), 'utf8')"
node -e "const pkg = require('./graphql/package.json'); pkg.version = '$RELEASE_VERSION'; require('fs').writeFileSync('./graphql/package.json', JSON.stringify(pkg, null, ' '), 'utf8')"
npm i --package-lock-only
npm i --prefix=graphql --package-lock-only
npm i --prefix=front --package-lock-only
RELEASE_GIT_NAME=$(curl -s https://api.github.com/users/$GITHUB_ACTOR | jq -r .name)
[email protected]
git config --local user.name "$RELEASE_GIT_NAME"
git config --local user.email "$RELEASE_GIT_EMAIL"
git commit -a -m "Release $RELEASE_VERSION"
git tag "v$RELEASE_VERSION"
git push origin master
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ node_modules/
graphql/nodemon.dev.json
sails/.tmp
/stylo.env
/.env
/.env.local
nodemon.dev.json
/.idea/
/.run/
Expand Down
4 changes: 0 additions & 4 deletions .gitmodules

This file was deleted.

12 changes: 2 additions & 10 deletions HOWTO.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,13 @@ First step is to clone the project, you can use either the HTTPS or SSH version
$ git clone [email protected]:EcrituresNumeriques/stylo.git


Stylo uses submodules to pull templates (and those templates are hosted on framagit).
If you have an account with ssh enabled on framagit, you can pull all submodules using the following commands:


$ git submodule init
$ git submodule update


## Run with Docker

Useful to run a fully fledged Stylo in no time.

Run the following command:

$ cp stylo-example.env stylo.env
$ cp stylo-example.env .env
$ docker-compose up

**NOTE:** The first time, this command can take a few dozen minutes depending on your network speed and machine capabilities. Subsequent calls will be faster.
Expand All @@ -58,7 +50,7 @@ We provide a working configuration example below for the Nginx server.

After _cloning_ the repo, build the service and its dependencies:

$ cp stylo-example.env stylo.env
$ cp stylo-example.env .env
$ npm clean-install
$ npm start

Expand Down
11 changes: 5 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,13 @@ Plus d'informations sur [la documentation](http://stylo-doc.ecrituresnumeriques.

- Node.js v18+
- MongoDB
- (optionnel) Pandoc, pour le [service d'export](./export)

## Sous MacOS

```bash
brew tap mongodb/brew

brew install pandoc mongodb-community nvm
brew install mongodb-community nvm
brew install --cask docker

nvm install v18 --default
Expand All @@ -39,7 +38,7 @@ L'application se lance en combinant une base de données MongoDB, et des applica
**La première fois que vous installez le projet**, lancez ces commandes :

```bash
cp stylo-example.env stylo.env
cp stylo-example.env .env
npm clean-install
npm --prefix front clean-install
npm --prefix export clean-install
Expand All @@ -49,10 +48,10 @@ npm --prefix graphql clean-install

## Sans Docker

Avant un premier lancement, la variable `SE_GRAPHQL_TOKEN` doit être renseignée dans `stylo.env` à l'aide de la valeur produite par cette commande :
Avant un premier lancement, la variable `SE_GRAPHQL_TOKEN` doit être renseignée dans `.env` à l'aide de la valeur produite par cette commande :

```bash
DOTENV_CONFIG_PATH=stylo.env NODE_OPTIONS="--require dotenv/config" npm run --prefix graphql generate-service-token --silent
DOTENV_CONFIG_PATH=.env NODE_OPTIONS="--require dotenv/config" npm run --prefix graphql generate-service-token --silent
```

Ensuite, ainsi que le reste du temps :
Expand All @@ -64,7 +63,7 @@ npm run dev

## Avec Docker

Avant un premier lancement, la variable `SE_GRAPHQL_TOKEN` doit être renseignée dans `stylo.env` à l'aide de la valeur produite par cette commande :
Avant un premier lancement, la variable `SE_GRAPHQL_TOKEN` doit être renseignée dans `.env` à l'aide de la valeur produite par cette commande :

```bash
docker compose run -ti --build --rm graphql-stylo npm run generate-service-token --silent
Expand Down
62 changes: 62 additions & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Release

Cette page explique comment créer une nouvelle release de Stylo et comment la déployer sur https://stylo.huma-num.fr/.
Pour rappel, l'ensemble des changements qui arrivent sur la branche principale (i.e., `master`) sont déployés automatiquement sur https://stylo-dev.huma-num.fr/.

# Pré-requis

- Avoir un compte GitHub
- Avoir les droits d'écriture sur le projet GitHub [EcrituresNumeriques/stylo](https://github.com/EcrituresNumeriques/stylo)
- Avoir les droits de lancer le workflow [release](https://github.com/EcrituresNumeriques/stylo/actions/workflows/release.yml)

## Créer une nouvelle release

- Aller sur la page https://github.com/EcrituresNumeriques/stylo/actions/workflows/release.yml et cliquer sur le bouton "Run workflow".
- Une fenêtre s'ouvre et propose de renseigner une branche ainsi qu'un numéro de version :
![projet/release-run-workflow.png](projet/release-run-workflow.png)

- Laisser la branche principale (i.e., `master`) sélectionnée et renseigner une version (sans suffixe).
Par exemple : `3.4.5`.
- Cliquer sur le bouton vert "Run workflow"

Une nouvelle ligne va s'afficher dans la liste. Vous pouvez voir le détail en cliquant sur la ligne :

![projet/release-workflow-success.png](projet/release-workflow-success.png)

Le workflow se compose de deux étapes principales :
- release
- modifie la version dans les fichiers `package.json` (`package-lock.json`)
- commit les changements
- crée un tag à partir de la version renseignée lors du lancement du workflow
- call-build-deploy-docker
- construit et déploie les images Docker sur le registre ghcr.io
- https://github.com/EcrituresNumeriques/stylo/pkgs/container/stylo-graphql
- https://github.com/EcrituresNumeriques/stylo/pkgs/container/stylo-front
- https://github.com/EcrituresNumeriques/stylo/pkgs/container/stylo-export

> [!NOTE]
> À noter que cette deuxième étape peut être lancée manuellement puisqu'elle repose sur le workflow [docker](https://github.com/EcrituresNumeriques/stylo/actions/workflows/docker.yml).
Une fois ce workflow terminé, vous devriez avoir une nouvelle version des images Docker dans le registre ghcr.io.

## Déployer une version en production

Le déploiement en production nécessite une action manuelle.

> [!NOTE]
> Si vous souhaitez déployer une nouvelle release, assurez-vous que la nouvelle version des images Docker `stylo-graphql`, `stylo-front` et `stylo-export` disponibles sur le registre ghcr.io.
Une fois la version des images disponibles sur ghcr.io, vous pouvez lancer le workflow [deploy](https://github.com/EcrituresNumeriques/stylo/actions/workflows/deploy-tag.yml).
De la même façon que pour le workflow de release, cliquer sur le bouton "Run workflow".
Laisser la branche principale (i.e., `master`) sélectionnée et renseigner la version à déployer (sans suffixe). Par exemple : `3.4.5`.

Une nouvelle ligne va s'afficher dans la liste. Vous pouvez voir le détail en cliquant sur la ligne :

![projet/deploy.png](projet/deploy.png)

Une fois le déploiement terminé en succès, vous pouvez vous rendre sur https://stylo.huma-num.fr/ afin de vérifier que la version est bien déployée.
Le numéro de version s'affiche dans le pied de page :

![projet/stylo-home.png](projet/stylo-home.png)

Ici, la version déployée est la version 3.1.5.
12 changes: 2 additions & 10 deletions SERVER.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,18 +54,10 @@ cd ~
git clone https://github.com/EcrituresNumeriques/stylo.git
```

Update the submodule:

```bash
cd stylo
git submodule init
git submodule update
```

Copy the `stylo-example.env` file and edit the variables:

```bash
cp stylo-example.env stylo.env
cp stylo-example.env .env
```

Finally, start the application:
Expand Down Expand Up @@ -134,7 +126,7 @@ docker exec mongodb-stylo mongo --quiet --eval "db.adminCommand({listDatabases:
For instance, if we want to rename the database from `stylo` to `stylo-prod`, we can use:

$ docker exec -i mongodb-stylo sh -c 'mongorestore --archive --nsFrom="stylo.*" --nsTo="stylo-prod.*"' < stylo-prod.dump

## Apply migration script

```bash
Expand Down
Loading

0 comments on commit 93e6300

Please sign in to comment.