2025-08-12 - 2026-08-12
Overview
111 Pull requests merged by 3 users
Merged
#163 Report CI status to the forge and database
Merged
#161 Wireup pipeline APIs (getPipeline: listPipelines: listPipelines, getJob) and other misc additions
Merged
#159 Add initial container runner implementation and scheduler integration
Merged
#156 Add a prototype planner and scheduler
Merged
#157 Use alpine Postgres images for disk space savings
Merged
#155 allow CI to be trigged manually
Merged
#154 adds some forge tests
Merged
#153 Make generated table models singular and don't generate models for migrations table
Merged
#151 Add Vitest config to calculate Change Risk Anti-Patterns reports
Merged
#152 Use native bigint type for Postgres BIGINTs
Merged
#150 Allow all hosts for webhooks in the development Gitea server
Merged
#149 Add pgCrab schema linter to CI
Merged
#148 Ensures Pino logging is used consistently
Merged
#147 Load .env for Kanel so pnpm generate succeeds
Merged
#146 add ability to get code coverage report
Merged
#144 Refactor webhook handling
Merged
#145 Fix parseKdlConfigs to return V0Files
Merged
#143 Add richer logging with Pino
Merged
#138 split api spec into multiple files
Merged
#141 Use correct type for ForgeID and UserId in tests
Merged
#131 Use Kanel and Kysely to get type-checked queries
Merged
#140 Fix StageDeclaration.name type and do some small tidying
Merged
#137 Add glossary for all the confusing CI terminology
Merged
#136 add test for Graphile token refresh job
Merged
#135 add draft apispec for runner and add endpoint to fetch branch names
Merged
#134 capt/whoami
Merged
#133 Handle unexpected database pool errors
Merged
#132 rebrand as corncrake ci
Merged
#119 Add a Nix flake that packages the server
Merged
#129 Trust proxies (otherwise secure cookies aren't set) but allow disabling
Merged
#130 Add Taskfile with task test command
Merged
#126 use forge admin checks for repo access and derive forge id from authenticated forge context
Merged
#124 Various quality of life improvements
Merged
#121 Refactors webhook logic
Merged
#123 Refactor: Use namespace import for @bgotink/kdl
Merged
#120 return the html_url of a repo to the client
Merged
#107 Slightly improve the errors returned from the pipeline check endpoint
Merged
#118 Store forge usernames in the database and return username in the whoami endpoint
Merged
#117 add comment to env.sample to explain FORGES_1_APPBASEURLOVERRIDE
Merged
#116 no longer need to clear webhook secret on reconfigureRepo
Merged
#113 Delete stale webhooks
Merged
#114 Support configuring a MOLCI baseURL per-forge
Merged
#110 listAvailableRepos should only display non configuredRepos
Merged
#112 MolCI DB should use same docker network as the other containers do
Merged
#108 add way to get forge logo
Merged
#106 fix logout
Merged
#105 redirect after logout
Merged
#103 checkPipelines: require body
Merged
#104 reconfigureRepo: return body as described by the API spec
Merged
#100 report ci status for molci config file
Merged
#102 Detect duplicate jobs and stages
Merged
#99 adds check pipelines endpoint
Merged
#96 Adds stages and jobs to pipeline language
Merged
#94 Initial pipeline language
Merged
#92 adds docker demo file
Merged
#93 fix type error on setup-webhooks, remove redundant join in SQL
Merged
#91 adds improved isValidRedirectPath function
Merged
#90 Refactors some webhook and auth logic to prevent code duplication
Merged
#86 Move all endpoints under /api, including versioning OpenAPI endpoints
Merged
#85 docker networking fixes
Merged
#82 Auth improvements
Merged
#81 Ensure listConfigureRepos returns repo ids.
Merged
#75 Support configuration of server bind address
Merged
#76 Webhooks: Fetch raw Gitea file, improve logging, and separate handleWebhook from MolCI API
Merged
#72 Handle push and pull_request webhooks
Merged
#69 prelim work on handling webhooks from the forge
Merged
#64 Regenerate the session on OAuth callback to prevent session fixation attacks
Merged
#63 adds Middleware to invalidate session if user's access token is missing/invalid
Merged
#68 Ensure webhook is created when reconfigureRepo is called
Merged
#65 Add tests to check what happens if you try to get or configure someone else's repo
Merged
#61 avoids need for --ts-is-esm-project false flag
Merged
#62 Updates types/node dependency
Merged
#60 Removes redundant code
Merged
#59 Convert project type to ESM module
Merged
#58 Use AuthError consistently in repositories.ts
Merged
#57 Lock users for token refresh in the background job and getForgeWithUser
Merged
#56 Test improvements: only load .env.test and don't show logging for passing tests (it's too noisy)
Merged
#54 Use custom error handling instead of throwing generic errors
Merged
#55 add job key to setup webhooks job, cleans up createOrUpdateRepository and removes redundant description.
Merged
#52 Ensure API tokens refresh via getForgeWithUser
Merged
#49 Use graphile to create a job to automatically refresh OAuth tokens
Merged
#51 updates readme and sample env file with new configuration options
Merged
#47 adds getForgeWithUser, add token refresh logic
Merged
#45 Update DB to support encrypted access and refresh tokens
Merged
#46 Set a minimum length for the session secret
Merged
#44 Fixes path to db migration file
Merged
#43 Don't store forgeId in post login session
Merged
#41 adds reconfigureRepo
Merged
#39 move auth into server directory
Merged
#37 Don't hardcode gitea in webhook
Merged
#35 consolidation of folder/file structure
Merged
#33 Clean up validation errors, improve terminated connection logging and enable Postgres statement logging for tests
Merged
#31 Integration Tests for the MOLCI API
Merged
#30 Graphile Worker: use the same Pool as the rest of the server
Merged
#27 misc/cifix
Merged
#25 Adds user store database tests
Merged
#23 Update README
Merged
#22 Adds basic CI
Merged
#20 adds generate-win script
Merged
#19 Generate the Gitea API client from OpenAPI definitions
Merged
#17 Add error logging to graphile worker
Merged
#9 Add test helpers providing dummy forges
Merged
#16 Use correct URL for webhooks
Merged
#12 Show a Swagger UI API client on /swagger
Merged
#13 Remove 'test-win' script
Merged
#11 Tidy unwanted columns (and a few other bits)
Merged
#10 Replace OpenApi with TypeSpec
Merged
#8 Create test Postgres databases; Switch to vitest
Merged
#7 capt/webhooks
Merged
#2 capt/webhooks
Merged
#1 Configuration: use Valibot and allow multiple forges of one type
31 Issues closed from 2 users
Closed
#48 add test for auto-refresh logic
Closed
#128 listAvailableRepos: have the store tell us which forge_repo_id don't exist.
Closed
#125 configureRepo does not validate that the repository actually exists on the forge before storing it in the database
Closed
#111 refactor webhooks
Closed
#109 /repos/available should not return repos that are already configured
Closed
#98 red cross on the forge when CI lang has parsing errors
Closed
#97 Parser: create errors when jobs/stages with the same name conflict
Closed
#83 For demo purposes, create fully dockerised version of MOLCI
Closed
#67 When configuring a repo, remove any other webhook that already exists on the repo
Closed
#84 Use host.docker.internal in Docker compose for multi OS compatability
Closed
#80 /auth/callback should redirect back to where the client came from
Closed
#78 /auth/providers should instead be in the API at e.g. /forges
Closed
#79 /auth/login should redirect to the Forge login page instead of returning a JSON body
Closed
#77 /repos/configured does not return repo IDs
Closed
#71 Support configuring bind/listen address
Closed
#73 Webhook: Download the file via the raw gitea endpoint
Closed
#70 Support signed webhooks
Closed
#38 When user accesses MOLCI and we have no access token for them, we should invalidate their session
Closed
#66 reconfigureRepo doesn't reschedule webhook setup
Closed
#32 Add test to check what happens if you try to get or configure someone else's repo?
Closed
#3 Middleware for 401 auth checks
Closed
#50 Should coalesce concurrent requests to refresh a user's access token
Closed
#53 Ensure correct HTTP ERROR codes are returned to the client
Closed
#6 Handle OAuth token refresh flow for Forges
Closed
#21 Validate session secret
Closed
#40 Session stores forgeId and userId, but they are actually unrelated
Closed
#34 Add ReconfigureRepo
Closed
#36 Webhook URL hardcoded to "gitea" (setup-webhooks.ts)
Closed
#29 Request validation errors should be 400 not 500
Closed
#18 Re-enable exactOptionalPropertyTypes in TypeScript
Closed
#4 Split jobs into different files
48 Issues created by 2 users
Opened
#3 Middleware for 401 auth checks
Opened
#4 Split jobs into different files
Opened
#5 Allow configuration of hardcoded graphile settings (e.g poolsize)
Opened
#6 Handle OAuth token refresh flow for Forges
Opened
#18 Re-enable exactOptionalPropertyTypes in TypeScript
Opened
#21 Validate session secret
Opened
#26 make it easy for the CI system to just commit the biome fixes back
Opened
#28 Speed up our CI tests by using ephemeral Postgres
Opened
#29 Request validation errors should be 400 not 500
Opened
#32 Add test to check what happens if you try to get or configure someone else's repo?
Opened
#34 Add ReconfigureRepo
Opened
#36 Webhook URL hardcoded to "gitea" (setup-webhooks.ts)
Opened
#38 When user accesses MOLCI and we have no access token for them, we should invalidate their session
Opened
#40 Session stores forgeId and userId, but they are actually unrelated
Opened
#48 add test for auto-refresh logic
Opened
#50 Should coalesce concurrent requests to refresh a user's access token
Opened
#53 Ensure correct HTTP ERROR codes are returned to the client
Opened
#66 reconfigureRepo doesn't reschedule webhook setup
Opened
#67 When configuring a repo, remove any other webhook that already exists on the repo
Opened
#70 Support signed webhooks
Opened
#71 Support configuring bind/listen address
Opened
#73 Webhook: Download the file via the raw gitea endpoint
Opened
#74 Use RFC 7807 'Problem Details' for API error responses
Opened
#77 /repos/configured does not return repo IDs
Opened
#78 /auth/providers should instead be in the API at e.g. /forges
Opened
#79 /auth/login should redirect to the Forge login page instead of returning a JSON body
Opened
#80 /auth/callback should redirect back to where the client came from
Opened
#83 For demo purposes, create fully dockerised version of MOLCI
Opened
#84 Use host.docker.internal in Docker compose for multi OS compatability
Opened
#87 Allow creating personal access tokens (or similar) for non-frontend API access
Opened
#88 Add /api/versions endpoint or similar
Opened
#89 Figure out a plan for API versioning
Opened
#95 Convert Valibot issues into friendly and context-rich error messages
Opened
#97 Parser: create errors when jobs/stages with the same name conflict
Opened
#98 red cross on the forge when CI lang has parsing errors
Opened
#109 /repos/available should not return repos that are already configured
Opened
#111 refactor webhooks
Opened
#122 Handle case where a configured repository has been deleted from the forge
Opened
#125 configureRepo does not validate that the repository actually exists on the forge before storing it in the database
Opened
#127 Investigate use of ntfy.sh/ to notify user of failed CI run
Opened
#128 listAvailableRepos: have the store tell us which forge_repo_id don't exist.
Opened
#139 Expose and define the 'owner' of a configured repository
Opened
#158 Planner/Scheduler/Runner: Sweep up TODOs
Opened
#160 Consider remove RunnerJob+RunnerStep and just use PlannedJob+PlannedStep
Opened
#162 JOIN at the database rather than one extra query for each workflow
Opened
#164 Add more granular CI statuses to report to the forge
Opened
#165 Look into per step statuses
Opened
#166 have a StepEndStatus and report the exit codes per-step