This repository stores vendored build inputs and CI automation.
packages/code-server/contains the vendored code-server integration.packages/code-server/upstream/is a Git submodule pointing tohttps://github.com/coder/code-server.git.packages/omniroute/contains the vendored OmniRoute integration.packages/omniroute/upstream/is a Git submodule pointing tohttps://github.com/diegosouzapw/OmniRoute.git..github/workflows/code-server-artifacts.yamlis the shared vendored pipeline. It resolves one vendored version/tag per run, then buildscode-serverand OmniRoute in parallel, validates both package families, and publishes one shared GitHub Release result.packages/code-server/scripts/build-artifacts.mjsandpackages/code-server/scripts/verify-startup.mjsare the Node entrypoints for the build and post-build verification flow.packages/code-server/templates/code-server-config.yamlandpackages/omniroute/templates/omniroute-config.yamlare the packaged YAML config templates. Deployment is expected to copy one of these templates into a runtimeconfig.yaml, fill in the values, and pass it to the packaged CLI with--config.packages/omniroute/scripts/build-artifacts.mjsandpackages/omniroute/scripts/verify-startup.mjsare the OmniRoute package-local build and packaged-entry verification entrypoints. The OmniRoute verify step now performs a realpm2-managed startup smoke test against the packaged release and waits for/api/monitoring/healthbefore publication.
The files under packages/*/scripts/*.mjs are maintainer build and verification entrypoints. End users should run the extracted release archives from the GitHub Release assets instead of invoking those repo-local scripts directly.
After extracting a published code-server-<version>-<platform>-<arch> archive, start it from a terminal with the packaged wrapper:
./bin/code-server --help
./bin/code-server --bind-addr 0.0.0.0:8080 .On Windows, use .\bin\code-server.cmd.
If you need the direct Node entrypoint for troubleshooting, use node ./out/node/entry.js --help from inside the extracted archive. Do not treat repo-local build scripts as runtime entrypoints.
After extracting a published omniroute-<version>-<platform>-<arch> archive, start it from a terminal with the top-level wrapper:
./omniroute.sh --help
./omniroute.sh
./omniroute-reset-password.shOn Windows, use .\omniroute.cmd or .\omniroute-reset-password.cmd.
If you need the direct Node CLI entrypoints, use node ./bin/omniroute.mjs --help and node ./bin/reset-password.mjs from inside the extracted archive. Do not start the packaged OmniRoute release from scripts/*.mjs; those files are support scripts, not supported runtime entrypoints.
The vendored terminal programs are designed to run as:
pm2 -> packaged wrapper -> Node entrypoint
That contract applies to both package families:
code-server: use./bin/code-serveron Unix-like systems or.\\bin\\code-server.cmdunder Windows PM2.omniroute: use./omniroute.shon Unix-like systems or.\\omniroute.cmdunder Windows PM2.
PM2 should not point directly at out/node/entry.js, bin/*.mjs, app/server.js, or support scripts. Those internal entrypoints are still present in the archive, but the supported runtime surface is the wrapper layer because it is what the packaged verification flow exercises.
Both package families ship YAML templates inside the release archive:
templates/code-server-config.yamltemplates/omniroute-config.yaml
The supported deployment flow is:
- Extract the release archive.
- Copy the package template to a writable runtime path such as
./config.yaml. - Fill in the YAML values.
- Start the packaged wrapper through PM2 and pass
--config ./config.yaml.
The verification scripts enforce this design by materializing a config file from the packaged YAML template and then performing a real PM2-managed wrapper startup check before publication.
Published builds use a UTC date-based version in YYYY.MMDD.RRRR form, where:
YYYYis the UTC yearMMDDis the UTC month and dayRRRRis the zero-padded GitHub Actions run number
For example, the first qualifying workflow run on 2026-05-05 would produce 2026.0505.0001 and tag the repository as v2026.0505.0001.
After both package families finish their per-platform build and verification jobs, the shared workflow creates or updates one repository release tagged with v<version> and uploads both the code-server and OmniRoute .tar.gz / .zip archives from that same run. Asset names stay package-specific so both package families share one vendored release/tag without clobbering one another's archives. Publication still happens automatically on push to main, and it can also be triggered manually with workflow_dispatch. The shared workflow also has a daily schedule, but scheduled runs stop after build and verification so publication remains explicit.
The GitHub release job uses the workflow's built-in GITHUB_TOKEN, so no extra repository secret is required.