# Private repositories

> Publish a workflow from a private GitHub repository: connect the Qsolve GitHub app, choose repositories, and what other people can and cannot see.

Source: https://qsolve.omlabs.co/docs/build/private-repositories
Updated: 2026-11-12

You can publish a workflow from a private GitHub repository. You install the Qsolve GitHub app on the repositories you choose, and Qsolve reads only those, read-only. Other people see the workflow's results and track record. They never see your code or the repository address.

## Connect GitHub

1. Open [Publish a workflow](/developers) and choose **Private repository** under **Submit a repository**.
2. Select **Connect GitHub**. GitHub asks which account and which repositories to give the app. Choose only the repositories you want to publish from.
3. GitHub sends you back to Qsolve, and your account now shows next to the repository list.

If the repositories belong to an organisation and you are not an owner, GitHub sends the request to an owner, and you connect again once they approve it.

## Submit

Pick the repository from the list, add a branch, tag or commit if you do not want the default branch, and select **Submit**. Qsolve fetches that one commit, checks it and benchmarks it exactly as it does for a public repository; see [Validation and publishing](/docs/build/validation-and-publishing).

A new version of a private workflow is fetched the same way. Open the workflow in **Your workflows** and select **Publish**.

## What other people can see

| | Public repository | Private repository |
|---|---|---|
| The workflow page and its track record | Yes | Yes |
| Running the workflow | Yes | Yes |
| The repository address | Shown as a link | Not shown |
| Your code | Readable on GitHub | Not shown anywhere |

The results are measured by Qsolve, not reported by your code, so a closed workflow has the same verifiable record as an open one. Qsolve keeps a copy of the code it ran, as it does for every workflow, so that every run uses exactly the checked version.

## What the app can do

The app is granted **read-only access to repository contents**, for the repositories you chose and nothing else. It cannot write to your repositories or read the others. Qsolve fetches with a token that lasts about an hour and does not store it.

To stop Qsolve reading a repository, remove it from the app's access on GitHub. To disconnect an account in Qsolve, use the **x** next to it on that page; that forgets the connection but does not uninstall the app, so remove the app on GitHub too if you want access gone.

## If it does not work

| You see | Cause | Fix |
|---|---|---|
| The repository is not in the list | The app was not given it | Choose **Add an account or repositories** and share it on GitHub |
| "The Qsolve GitHub App cannot read that repository" | Access was removed after you connected | Share the repository with the app again |
| "This connection attempt expired" | You took longer than 15 minutes on GitHub | Start again from Publish a workflow |
| "Could not resolve 'x' in this repository" | The branch or tag does not exist | Check the name |
