Skip to content

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 11:03
· 49 commits to main since this release
97cfb31

1.0.0 (2026-10-06)

  • chore: add CODEOWNERS and document PR reviewers (#81) (ac69548), closes #81
  • chore(deps): update dependency mairie360/cicd to v2.3.3 (#54) (1c71faf), closes #54
  • chore(deps): update dependency mairie360/cicd to v3 (#76) (685112f), closes #76
  • chore(deps): update dependency mairie360/cicd to v3.1.1 (#83) (c18475a), closes #83
  • chore(deps): update dependency mairie360/cicd to v4.0.2 (#98) (935f492), closes #98
  • chore(deps): update dependency mairie360/cicd to v4.0.3 (#121) (290db44), closes #121
  • chore(deps): update dependency mairie360/cicd to v4.0.4 (#123) (630afc7), closes #123
  • chore(deps): update ghcr.io/mairie360/database docker tag to v1.3.0 (#58) (dd8cc64), closes #58
  • chore(deps): update ghcr.io/mairie360/database docker tag to v1.3.0 (#85) (c8b919e), closes #85
  • chore(deps): update ghcr.io/mairie360/liquibase-migrations docker tag to v1.3.0 (#59) (0ad6018), closes #59
  • chore(deps): update ghcr.io/mairie360/liquibase-migrations docker tag to v1.3.0 (#86) (410259b), closes #86
  • chore(deps): update rust crate mairie360_api_lib to v1.4.0 (#84) (e8aea8f), closes #84
  • chore(deps): update rust crate mairie360_api_lib to v1.4.1 (#88) (b4e7ee0), closes #88
  • chore(deps): update rust crate mairie360_api_lib to v1.4.2 (#94) (eb8f3c8), closes #94
  • chore(deps): update rust crate tokio to v1.53.2 (#119) (b411d10), closes #119
  • chore(deps): update rust crate utoipa-swagger-ui to v10.0.1 (#73) (9238055), closes #73
  • chore(deps): update rust:1.99-bookworm docker digest to fbc3a35 (#125) (97cfb31), closes #125
  • chore(deps): update rust:1.99-slim-bookworm docker digest to 60aef4c (#124) (d9dce3d), closes #124
  • fix: Expect 404 for completing an unknown module in the Postman collection (#92) (7e62f2b), closes #92
  • fix: MAIR-315 Fix ELearning_API tests against database 1.3.0 password constraint (#90) (e3b5bc7), closes #90
  • fix: MAIR-395 [Audit 02/10] ELearning_API : environnement de dev cassé, complétion déclarative, erre (37b4892), closes #97
  • fix: MAIR-419 [Audit 02/10] Toutes les APIs : inclure endpoints/ dans le seuil de couverture et test (676daa0), closes #109
  • fix: MAIR-420 [Audit 02/10] Toutes les APIs : écritures multi-requêtes sans transaction (#110) (a442bfd), closes #110
  • fix: MAIR-422 [Audit 02/10] Toutes les APIs : identifiants u64 tronqués par « as i32 » (#112) (370f18a), closes #112
  • fix: MAIR-428 [Audit 02/10] Toutes les APIs : secret JWT HS256 unique partagé, JWT admin de test com (c7cf9de), closes #117
  • fix: percent-encode the Postgres credentials in the connection URL (MAIR-171) (#64) (5ce3b5d), closes #64
  • fix(deps): update rust crate rust-s3 to 0.38.0 (#120) (9f47497), closes #120
  • fix(deps): update utoipa monorepo (major) (#65) (db1c272), closes #65
  • ci: MAIR-427 [Audit 02/10] Toutes les APIs : code copié du template à remonter dans API_lib, pipelin (95eb146), closes #116
  • ci: run the CI/CD workflow on pull requests (#87) (0965fdc), closes #87
  • feat: MAIR-421 [Audit 02/10] Toutes les APIs : erreurs de base avalées sans log ni statut correct (# (fe7f053), closes #111
  • feat: MAIR-423 [Audit 02/10] Toutes les APIs : /health ne teste rien et l'API démarre sans base (#11 (e63a3de), closes #113
  • feat: MAIR-425 [Audit 02/10] Toutes les APIs : listes sans pagination ni borne, aucun rate limiting (093098b), closes #115
  • feat!: MAIR-424 [Audit 02/10] Toutes les APIs : Swagger et OpenAPI servis sans authentification en p (dd501c9), closes #114
  • MAIR-117 Improve integration tests (#70) (4da39d6), closes #70
  • MAIR-192 Make ZAP scan every operation authenticated (#71) (5bf7454), closes #71
  • MAIR-193 Run test stacks against the published dev image (#74) (23ec4b3), closes #74
  • MAIR-195 Cover every API operation with k6 and ZAP (#75) (404b8b8), closes #75 #78
  • MAIR-223 Protéger les routes admin et le contenu des formations dans ELearning_API (#78) (9d2f689), closes #78
  • MAIR-229 Exécuter les conteneurs avec un utilisateur non root (#80) (1b5b3d9), closes #80

BREAKING CHANGE

  • POST / is removed from the API and its OpenAPI contract.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

  • fix: MAIR-424 Serve the spec in the integration stack too

The Postman collection checks GET /api-docs/openapi.json, which answered
404 once Swagger became opt-in: enable SWAGGER_ENABLED in
docker-compose-integration.yml like in the dev, ZAP and k6 stacks.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

  • POST / is removed from the API and its OpenAPI contract.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

  • fix: MAIR-424 Serve the spec in the integration stack too

The Postman collection checks GET /api-docs/openapi.json, which answered
404 once Swagger became opt-in: enable SWAGGER_ENABLED in
docker-compose-integration.yml like in the dev, ZAP and k6 stacks.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

  • feat: MAIR-425 Paginate the admin catalogue and rate limit /api per user
  • GET /api/v1/admin/formations/ takes limit (default 50, capped to 200)
    and offset, through the pagination query now shared with
    GET /api/v1/admin/users/ (admin::AdminPageQuery).
  • Rate limit every /api route per authenticated user with actix-governor,
    inside JwtMiddleware (the API is only reached through the BFFs, so a
    per-IP limit would throttle a whole BFF): 429 with Retry-After,
    RATE_LIMIT_PER_SECOND (default 50) and RATE_LIMIT_BURST (default 100).
    The ZAP and k6 stacks lift both limits.
  • Document the 429 on every /api operation and in the status table.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

  • ci: MAIR-427 Resync the Dockerfiles, CI workflow and Renovate on the template
  • Dockerfile: rust 1.99 like API_template, base images pinned by tag and
    digest, cargo build --locked, dependencies built in their own cached
    layer.
  • development.Dockerfile: same toolchain pinned by digest instead of
    rust:latest, --locked builds and cargo-watch install.
  • cicd.yml like the template: pull_request + push on main only, only the
    CODECOV_TOKEN and N8N_WEBHOOK_SECRET secrets instead of secrets: inherit,
    mairie360/CICD v4.0.2.
  • renovate.json: one group bumps the uses: tag and cicd_version
    together; managerFilePatterns instead of the deprecated fileMatch.
  • .dockerignore: keep node_modules, generated and cicd-repo out of the
    build context.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com