Preview environments

A preview environment is a copy of your project’s default environment that runs a pull request. Open a pull request and MIOSA creates the environment, deploys the pull request’s branch, and comments the addresses on the pull request. Close or merge it and the environment is deleted.

What happens

Pull request eventWhat MIOSA does
Opened or reopenedForks the default environment as pr-<number>, deploys every service from the pull request’s branch, and comments the addresses
New commit pushedRedeploys the services of pr-<number>
Closed or mergedDeletes pr-<number> and nothing else

Each server service in the preview is named <service>-pr-<number>. Variables are copied from the environment it was forked from. A preview never changes the environment it came from.

Turn it on

Open the project’s Settings in the console and choose Previews. Set the repository as owner/name, switch previews on, and save. The page shows the webhook URL and the secret to paste into GitHub.

In the GitHub repository, add a webhook:

FieldValue
Payload URLThe URL shown in Previews, https://api.miosa.ai/api/v1/hooks/git/<project id>
Content typeapplication/json
SecretThe secret from Previews
EventsPull requests only

The repository you set must match GitHub’s full_name exactly, or deliveries are ignored. A delivery is accepted only when its signature matches the secret. The secret is write-only: it is never shown again, so keep a copy or set a new one.

Cost control

SettingDefaultRange
max_open31 to 20
ttl_hours721 to 720

A fourth preview is refused while three are open. A preview for a pull request nobody closed is deleted after 72 hours. Raise or lower both in Previews.

From the API

GET    /api/v1/projects/:id/previews
PUT    /api/v1/projects/:id/previews
DELETE /api/v1/projects/:id/previews/:preview_id

PUT replaces the row, so send the whole object: {repository, enabled, max_open, ttl_hours, secret}. A blank or absent secret keeps the one already stored. The row you get back reports has_secret, never the secret, and the webhook_path to use. These routes need the projects:read and projects:write scopes.

Where to go next

Was this page helpful?