diff --git a/.eslintignore b/.eslintignore index 67fdabeb9c..946b9393bd 100644 --- a/.eslintignore +++ b/.eslintignore @@ -7,4 +7,5 @@ vite.config.ts cypress front/src/assets/ public/assets/ -public/dsfr/ \ No newline at end of file +public/dsfr/ +back/transpile-back-and-prepare-for-prod.js diff --git a/.github/workflows/fullcheck.yml b/.github/workflows/fullcheck.yml index 8afcfcfb9d..2535b7992f 100644 --- a/.github/workflows/fullcheck.yml +++ b/.github/workflows/fullcheck.yml @@ -1,10 +1,6 @@ name: "Fullcheck of the project + integration tests" on: - push: - branches-ignore: - - main - workflow_call: jobs: diff --git a/.github/workflows/review-app-creation.yml b/.github/workflows/review-app-creation.yml new file mode 100644 index 0000000000..f180269ff2 --- /dev/null +++ b/.github/workflows/review-app-creation.yml @@ -0,0 +1,42 @@ +name: "Review app" + +on: + pull_request: + +jobs: + validation: + uses: ./.github/workflows/fullcheck.yml + + deploy-review-app: + if: ${{ github.event.pull_request.draft == false }} + uses: ./.github/workflows/review-app-deploy.yml + needs: validation + with: + pull_request_id: ${{ github.event.number }} + run_number: ${{ github.run_number }} + secrets: + SCALINGO_API_TOKEN: ${{ secrets.SCALINGO_API_TOKEN }} + + run-seeds: + needs: deploy-review-app + runs-on: ubuntu-latest + steps: + - name: Install scalingo CLI + run: | + wget -qO- https://cli-dl.scalingo.com/install.sh | bash + echo "$HOME/bin" >> $GITHUB_PATH + - name: Login to scalingo + run: scalingo login --api-token ${{ secrets.SCALINGO_API_TOKEN }} + - name: Run DB seed + run: scalingo --app if-dev-back-pr${{ inputs.pull_request_id }} run pnpm db:seed + + notify-pr: + runs-on: ubuntu-latest + steps: + - name: Notify PR about the webapp url + if: ${{ inputs.run_number == '1' }} + uses: thollander/actions-comment-pull-request@v2 + with: + message: | + Review app: + https://if-dev-front-pr${{ inputs.pull_request_id }}.osc-fr1.scalingo.io diff --git a/.github/workflows/review-app-deletion.yml b/.github/workflows/review-app-deletion.yml new file mode 100644 index 0000000000..bf82477e5f --- /dev/null +++ b/.github/workflows/review-app-deletion.yml @@ -0,0 +1,9 @@ +name: "Destroy review-app" + +on: + pull_request: + types: [closed] + +jobs: + delete-app: + runs: echo "On PR close" diff --git a/.github/workflows/review-app-deploy.yml b/.github/workflows/review-app-deploy.yml new file mode 100644 index 0000000000..52226fc130 --- /dev/null +++ b/.github/workflows/review-app-deploy.yml @@ -0,0 +1,70 @@ +name: "Generic workflow to deploy to scalingo, given arguments" + +on: + workflow_call: + inputs: + pull_request_id: + type: number + required: true + run_number: + type: string + required: true + secrets: + SCALINGO_API_TOKEN: + required: true + +jobs: + deploy: + name: "Deploy to review app pr${{ inputs.pull_request_id }}" + runs-on: ubuntu-latest + environment: review-app + concurrency: + group: deploy-to-scalingo-pr${{ inputs.pull_request_id }} + cancel-in-progress: true + steps: + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: "18" + cache: "pnpm" + - name: Install scalingo CLI + run: | + wget -qO- https://cli-dl.scalingo.com/install.sh | bash + echo "$HOME/bin" >> $GITHUB_PATH + - name: Install dependencies + run: pnpm install + - name: Build front + run: NODE_OPTIONS=--max-old-space-size=4096 pnpm front build-scalingo + - name: Build back + run: pnpm back build + - name: Login to scalingo + run: scalingo login --api-token ${{ secrets.SCALINGO_API_TOKEN }} + - name: Create back review app + run: | + if scalingo --app if-dev-back review-apps | grep -q "pr${{ inputs.pull_request_id }}"; then + echo "Review app for PR_ID ${{ inputs.pull_request_id }} already exists. Skipping creation." + else + echo "Review app for PR_ID ${{ inputs.pull_request_id }} does not exist. Creating now." + scalingo --app if-dev-back integration-link-manual-review-app ${{ inputs.pull_request_id }} + fi + - name: Create front review app + run: | + if scalingo --app if-dev-front review-apps | grep -q "pr${{ inputs.pull_request_id }}"; then + echo "Review app for PR_ID ${{ inputs.pull_request_id }} already exists. Skipping creation." + else + echo "Review app for PR_ID ${{ inputs.pull_request_id }} does not exist. Creating now." + scalingo --app if-dev-front integration-link-manual-review-app ${{ inputs.pull_request_id }} + fi + - name: Remove sslmode from $SCALINGO_POSTGRESQL_URL + run: | + current_db_url=$(scalingo --app if-dev-back-pr${{ inputs.pull_request_id }} env | grep SCALINGO_POSTGRESQL_URL= | cut -d '=' -f2-) + new_db_url=$(echo $current_db_url | sed "s/?sslmode=prefer//") + scalingo --app if-dev-back-pr${{ inputs.pull_request_id }} env-set SCALINGO_POSTGRESQL_URL="$new_db_url" + - name: Deploy back + run: scalingo --app if-dev-back-pr${{ inputs.pull_request_id }} deploy back/back-build.tar.gz ${{ inputs.pull_request_id }}-${{ inputs.run_number }} + - name: Deploy front + run: scalingo --app if-dev-front-pr${{ inputs.pull_request_id }} deploy front/front-build.tar.gz ${{ inputs.pull_request_id }}-${{ inputs.run_number }} diff --git a/.prettierignore b/.prettierignore index 12c74a5e34..e6939dcad0 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,4 +7,3 @@ public/dsfr/ .git/ .idea/ .angular/ -back/transpile-back-and-prepare-for-prod.js diff --git a/back/.prettierignore b/back/.prettierignore new file mode 100644 index 0000000000..d66b61ba31 --- /dev/null +++ b/back/.prettierignore @@ -0,0 +1 @@ +transpile-back-and-prepare-for-prod.js diff --git a/back/package.json b/back/package.json index 382625ac85..afb5fe72c0 100644 --- a/back/package.json +++ b/back/package.json @@ -8,7 +8,7 @@ "db:down": "pnpm db:migrate down", "db:migrate": "ts-node --compilerOptions '{\"resolveJsonModule\": true}' node_modules/node-pg-migrate/bin/node-pg-migrate -j ts -m src/adapters/secondary/pg/migrations", "db:redo": "pnpm db:migrate redo", - "db:seed": "NODE_ENV=local ts-node src/adapters/primary/scripts/seed.ts", + "db:seed": "ts-node src/adapters/primary/scripts/seed.ts", "db:up": "pnpm db:migrate up", "deadcode": "ts-prune --ignore 'src/adapters/secondary/pg/migrations'", "dev": "NODE_ENV=local ts-node-dev src/adapters/primary/scripts/startServer.ts", diff --git a/back/src/adapters/primary/config/appConfig.ts b/back/src/adapters/primary/config/appConfig.ts index 3f6e0702d2..5227d8897c 100644 --- a/back/src/adapters/primary/config/appConfig.ts +++ b/back/src/adapters/primary/config/appConfig.ts @@ -365,7 +365,10 @@ export class AppConfig { } public get pgImmersionDbUrl() { - return this.#throwIfNotDefinedOrDefault("DATABASE_URL"); + return this.#throwIfNotDefinedOrDefault("DATABASE_URL").replace( + "?sslmode=prefer", + "", + ); } public get poleEmploiAccessTokenConfig(): AccessTokenConfig { diff --git a/back/transpile-back-and-prepare-for-prod.js b/back/transpile-back-and-prepare-for-prod.js index 68583911d7..3cd247169a 100644 --- a/back/transpile-back-and-prepare-for-prod.js +++ b/back/transpile-back-and-prepare-for-prod.js @@ -26,7 +26,7 @@ console.log("Copying package.json of back for prod"); fs.copyFileSync("./package.json", "build/back/package.json"); execSync( - "cp -v -R ./src/adapters/secondary/pg/staticData build/back/src/adapters/secondary/pg/staticData" + "cp -v -R ./src/adapters/secondary/pg/staticData build/back/src/adapters/secondary/pg" ); // Copy dependencies package.json files to build directory