---
eleventyNavigation:
  key: PushingOutput
  title: Pushing output from SSGs into Codeberg Pages
  parent: CodebergPages
  author: Fayçal Alami Hassani - https://codeberg.org/ka2in
  order: 110
---

{% admonition "Warning" %}

Codeberg Pages is currently migrating from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase.

Currently, websites that use custom domains can only be deployed using the old method, but we are working to fix this.
Such websites will keep working indefinitely.
You will be able to seamlessly migrate to the new version of Pages once it is supported.
Take note of some minor [changes and deprecations](/codeberg-pages/migrating-from-pages-v2/#breaking-changes-and-deprecations).

Websites hosted under the `codeberg.page` domain can already use the new git-pages method.

**This page documents the method used for legacy v2 Pages sites.**
You should be able to adapt the directions for git-pages (assuming you are not using a custom domain) using, for example, the [instructions on using Forgejo Actions with git-pages](/codeberg-pages/forgejo-actions/).

The new documentation is work in progress.
We hope to update this page with information on how to use the new server directly with static side generators soon.
In the meanwhile, we appreciate your feedback.
Please let us know in case you find yourself confused.

{% endadmonition %}

If you are using a static site generator (SSG) and are satisfied with the result of your project on your local development
environment, you can push the files to your Codeberg Pages repository.

## Manual pushing

To begin with, we will have two separate repositories, both locally and on Codeberg:

- A main repository for the source files, i.e. where the source files related to your main project will be located.
  We will refer to this repository as the `source` repository.

- A second repository for Codeberg pages that we will call the `pages` repository.
  This repository will only contain the files available in the `html` folder located under docs/build/html.

{% admonition "warning" %}

The `pages` repository **must** be public, as Codeberg Pages will directly fetch the files from the repository,
just like an ordinary user would.

{% endadmonition %}

{% admonition "info" %}

For the purpose of this guide, we have chosen to use two separate folders/repositories.
However, you may want to have a different setup that involves creating a [submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules)
instead of having folders and repositories in separate locations. With a submodule, your configuration may look like so:

```bash
├── sources --> This is a git repo
│   ├── build
│   │   └── html
│   │       └── pages --> This is a separate git repo
│   └── content
```

{% endadmonition %}

To copy the content of the `html` folder to your new `pages` folder, run the command:

```bash
(.venv) $ cp -R docs/build/html/ pages
```

We will now initialize an empty repository inside the pages folder. To do this, type the command:

```bash
git init
```

To check the status of your project’s files, type the command:

```bash
git status
```

To add all the files that are available in your directory to Git, run the command:

```bash
git add -A
```

Now we will commit:

```bash
git commit -m "Example commit message"
```

Repeat these steps in your `source` folder, then push your local commits to the remote repository with the command:

```bash
git push origin HEAD:your-remote-branch-name
```

{% admonition "info" "Note" %}

Replace `your-remote-branch-name` with the name of your remote branch. It is recommended to initially push your commits
to a branch other than the default branch. Once you have made sure everything went smoothly, you can then make a pull
request to merge it into the default branch. To learn more about pull requests, read the article
[Pull requests and Git flow](https://docs.codeberg.org/collaborating/pull-requests-and-git-flow/).

{% endadmonition %}

You should now be able to access your content by visiting https://{username}.codeberg.page.
You can find more information in the [Codeberg Pages](/codeberg-pages/) section.

## Using a CI

Both the [Woodpecker CI](/ci/#using-codeberg's-instance-of-woodpecker-ci) and the [hosted Forgejo Actions](/ci/actions/)
can be used to automate the build and deployment of your static website.

For the Woodpecker CI, you can see the [existing example workflows in the `Codeberg-CI/examples` repo](https://codeberg.org/Codeberg-CI/examples),
which provides examples for Jekyll, Hugo, Zola and many other popular SSG.

Currently, we do not have any examples for the Forgejo Actions yet, but individual SSG tools might
have details in their own documentation.

Note that if you use Forgejo Actions to publish the website, you should make sure that `.domains`
file will be preserved in the root directory of the **output** branch or repository.
