From 3f362b3a437ec3c2c99709c5870a6be62fbf3903 Mon Sep 17 00:00:00 2001 From: Anna Sancho Vaquer Date: Mon, 12 Jan 2026 08:42:17 +0100 Subject: [PATCH 01/16] docs: updating reference landing page ROCKS-2602 (#49) --------- Signed-off-by: Anna Sancho Vaquer Co-authored-by: Cristovao Cordeiro --- docs/reference/index.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/reference/index.md b/docs/reference/index.md index bdd96f1..7731233 100644 --- a/docs/reference/index.md +++ b/docs/reference/index.md @@ -1,10 +1,38 @@ # Reference +This section provides concise references on available commands, package slices, and security. + +## Commands + +The `chisel` command has several subcommands. + ```{toctree} :maxdepth: 1 cmd/index +``` + +## Package slices +Chisel relies on package slices. + +```{toctree} +:maxdepth: 1 + chisel-releases/index +``` +## Security +Chisel records package, slice, and file metadata to ensure file-level integrity and traceability of the slices. + +```{toctree} +:maxdepth: 1 + Manifest +``` + +Cryptographic verification ensures the integrity and authenticity of the files. + +```{toctree} +:maxdepth: 1 + Security Documentation ``` From ca42073bdc730aa7517b2a48522b8445c2fafe09 Mon Sep 17 00:00:00 2001 From: Anna Sancho Vaquer Date: Thu, 15 Jan 2026 16:19:59 +0100 Subject: [PATCH 02/16] fix: pinned myst-parser package version (#51) --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 4bde8aa..caaa865 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -2,7 +2,7 @@ canonical-sphinx>=0.5.1 # Extensions previously auto-loaded by canonical-sphinx -myst-parser +myst-parser~=4.0 sphinx-autobuild sphinx-design sphinx-notfound-page From 944bd2ee3c6edfc3d660b01258446e2d3da7b239 Mon Sep 17 00:00:00 2001 From: Anna Sancho Vaquer Date: Thu, 15 Jan 2026 17:44:43 +0100 Subject: [PATCH 03/16] feat: adding bot configuration to docs (#53) --- docs/.github/.jira_sync_config.yaml | 59 +++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/.github/.jira_sync_config.yaml diff --git a/docs/.github/.jira_sync_config.yaml b/docs/.github/.jira_sync_config.yaml new file mode 100644 index 0000000..0ab3433 --- /dev/null +++ b/docs/.github/.jira_sync_config.yaml @@ -0,0 +1,59 @@ +settings: + # Jira project key to create the issue in + jira_project_key: "ROCKS" + + # Dictionary mapping GitHub issue status to Jira issue status + status_mapping: + opened: Untriaged + closed: done + # (Optional) Use different status for GitHub issues closed as not planned (instead of closed as + # completed) + # https://github.blog/changelog/2022-03-10-the-new-github-issues-march-10th-update/#%F0%9F%95%B5%F0%9F%8F%BD%E2%99%80%EF%B8%8F-issue-closed-reasons + # If not specified, `closed` status will be used. + not_planned: rejected + + # (Optional) Jira project components that should be attached to the created issue + # Component names are case-sensitive + components: + + # (Optional) GitHub labels. Only issues with one of those labels will be synchronized. + # If not specified, all issues will be synchronized + labels: + + # (Optional) (Default: false) Add a new comment in GitHub with a link to Jira created issue + add_gh_comment: false + + # (Optional) (Default: false) Add a 'synced-to-jira' label to newly created issues once a + # corresponding ticket is successfully created in Jira. + # This label serves as confirmation that the issue sync process was completed successfully. + add_gh_synced_label: false + + # (Optional) (Default: true) Synchronize issue description from GitHub to Jira + sync_description: true + + # (Optional) (Default: true) Synchronize comments from GitHub to Jira + sync_comments: true + + # (Optional) (Default: None) Parent Epic key to link the issue to + epic_key: "ROCKS-2724" + + # (Optional) Dictionary mapping GitHub issue labels to Jira issue types. + # If label on the issue is not in specified list, this issue will be created as a Bug + label_mapping: + enhancement: Task + + # (Optional) JIRA issue's summary + # This field can be used to customize the JIRA issue's summary (title). + # The value of the field will be passed to the python + # format() method to generate the JIRA summary. The GH issue + # variable will be captured in the format() method so that users can + # use GH issue attribute's values to build the JIRA summary. + # See GH issue definition : + # https://docs.github.com/en/rest/issues/issues?apiVersion=2022-11-28 + # + # Examples: + # to use fixed title "github issue": "github issue" + # to use GH issue title: "{issue.title}" + # to add prefix "[GitHub]" : "[GitHub] {issue.title}" + # to add user in the title (between square brackets): "[{issue.user.login}] {issue.title}" + summary: "[GitHub] {issue.title}" \ No newline at end of file From ab9ca720b27f55cc531d3560bcf5b531affdc073 Mon Sep 17 00:00:00 2001 From: Anna Sancho Vaquer Date: Fri, 30 Jan 2026 12:21:45 +0100 Subject: [PATCH 04/16] docs: new slice design approaches explanation page (#55) --------- Signed-off-by: Anna Sancho Vaquer Co-authored-by: Cristovao Cordeiro --- docs/explanation/index.md | 8 ++++ docs/explanation/slice-design-approaches.md | 47 +++++++++++++++++++++ docs/how-to/slice-a-package.md | 38 +---------------- docs/index.md | 2 +- 4 files changed, 57 insertions(+), 38 deletions(-) create mode 100644 docs/explanation/slice-design-approaches.md diff --git a/docs/explanation/index.md b/docs/explanation/index.md index 44a96af..48e627b 100644 --- a/docs/explanation/index.md +++ b/docs/explanation/index.md @@ -19,3 +19,11 @@ Slices are defined via slice definition files and follow naming conventions. slices ``` + +Slices can be defined following two different approaches. + +```{toctree} +:maxdepth: 1 + +slice-design-approaches +``` diff --git a/docs/explanation/slice-design-approaches.md b/docs/explanation/slice-design-approaches.md new file mode 100644 index 0000000..f488b71 --- /dev/null +++ b/docs/explanation/slice-design-approaches.md @@ -0,0 +1,47 @@ +(slice_design_approaches)= + +# Slice design approaches + +There are two approaches to design slices: **grouping by content** and **grouping by function**. Depending on the package, one of these approaches might be more suitable. It is up to the user to choose a preferred approach. + +## Grouping by type of content + + This means putting all the binaries together in one slice, all the libraries together in another slice, and so on. + A good example is the [`dpkg` slice definitions file](https://github.com/canonical/chisel-releases/blob/ubuntu-24.04/slices/dpkg.yaml). + + In this case, the best practice is to create: + - a `bins` slice which contains all the binaries + - a `libs` slice which contains all the libraries + - a `config` slice which contains all [configuration files](#create_sdf_inspect_pkg_conffiles) + - a `scripts` slice which contains ASCII executable scripts, e.g. Python, + Perl scripts + - other slices analogously (e.g. `data`, `modules`, `services`, etc) + + You may split the above slices into more granular ones, but you should + reserve the above as a catch-all for their respective types. + +## Grouping by function + + This means grouping the contents into slices that deliver a specific + functionality. For example, the + [`python3` slice definitions file](https://github.com/canonical/chisel-releases/blob/ubuntu-24.04/slices/python3.yaml) + has a `core` slice providing a very minimal `python3` runtime, but also a + `standard` slice with the additional libraries on top of `core`. + + In this case, the most common is to create: + - A `minimal` slice that offers a stripped down installation, to the absolute essentials, to make the software + work. In most cases, such a minimal installation may only be useful if used as a base for another installation/ + build, where the developer adds their own additional dependencies. Taking the above `python3` example, this slice + would only contain the necessary dependencies to run a trivial "Hello World" script, and not much more. + - A `core` slice that offers a more complete, though still relatively slim installation. Although slightly larger + than minimal, core installations are meant to cover the majority of simple use cases, while also being a small and + ideal base to be extended for more complex use cases. Using `python3` as an example again, this slice could only + contain the topmost referenced modules in the standard library. + - A `standard` slice that provides a normal installation, supporting the full operation of the application, + including all the runtime libs/modules and additional utilities, but possibly still leaving out things like + debugging and development utilities. + - A `dev` slice which is the `standard` slice, plus all the debugging and dev utilities. A close-to full-size + installation, designed for development environments, but not production. + - Other slices which are scoped and named after the functionality they + provide (e.g. see the + [`libpython3.12-stdlib` slices](https://github.com/canonical/chisel-releases/blob/ubuntu-24.04/slices/libpython3.12-stdlib.yaml)). diff --git a/docs/how-to/slice-a-package.md b/docs/how-to/slice-a-package.md index c1bb186..35ba7c2 100644 --- a/docs/how-to/slice-a-package.md +++ b/docs/how-to/slice-a-package.md @@ -259,43 +259,7 @@ Your second task is to **design the slices**. There are a few considerations to be made, such as figuring out what slices we need and the contents of those slices. -There are **two schools of thought** when designing slices: - -```{list-table} -:header-rows: 1 -:widths: 1 1 - -* - Group by type - - Group by function -* - This means putting all the binaries together in one slice, all the - libraries together in another slice, and so on. - A good example is the [`dpkg` slice definitions file](https://github.com/canonical/chisel-releases/blob/ubuntu-24.04/slices/dpkg.yaml). - ```{tip} - In this case, the best practice is to create: - - a `bins` slice which contains all the binaries, - - a `libs` slice which contains all the libraries, - - a `config` slice which contains all [configuration files](#create_sdf_inspect_pkg_conffiles), - - a `scripts` slice which contains ASCII executable scripts, e.g. Python, - Perl scripts, - - and others analogously (e.g. `data`, `modules`, `services`, etc). - - You may split the above slices into more granular ones, but you should - reserve the above as a catch-all for their respective types. - ``` - - This means grouping the contents into slices that deliver a specific - functionality. For example, the [`python3` slice definitions file](https://github.com/canonical/chisel-releases/blob/ubuntu-24.04/slices/python3.yaml) - has a `core` slice providing a very minimal `python3` runtime, but also a - `standard` slice with the additional libraries on top of `core`. - ```{tip} - In this case, the most common is to create: - - a `minimal` slice that offers a stripped down installation, to the absolute essentials, to make the software work. In most cases, such a minimal installation may only be useful if used as a base for another installation/build, where the developer adds their own additional dependencies. Taking the above `python3` example, this slice would only contain the necessary dependencies to run a trivial "Hello World" script, and not much more, - - a `core` slice that offers a more complete, though still relatively slim installation. Although slightly larger than minimal, core installations are meant to cover the majority of simple use cases, while also being a small and ideal base to be extended for more complex use cases. Using `python3` as an example again, this slice could only contain the topmost referenced modules in the standard library, - - a `standard` slice that provides a normal installation, supporting the full operation of the application, including all the runtime libs/modules and additional utilities, but possibly still leaving out things like debugging and development utilities, - - a `dev` slice which is the `standard` slice, plus all the debugging and dev utilities. A close-to full-size installation, designed for development environments, but not production, - - and other slices which are scoped and named after the functionality they - provide (e.g. see the [`libpython3.12-stdlib` slices](https://github.com/canonical/chisel-releases/blob/ubuntu-24.04/slices/libpython3.12-stdlib.yaml)). - ``` -``` +There are **two approaches** when designing slices: "grouping by type of content" or "grouping by function". More information on them can be found {ref}`here `. This guide groups slices **by type of content**. - [ ] 2.1 **Choose the design approach that aligns best with your package** diff --git a/docs/index.md b/docs/index.md index 4d1bfd1..082ddad 100644 --- a/docs/index.md +++ b/docs/index.md @@ -21,7 +21,7 @@ selecting and installing only the necessary slices from the full Ubuntu package * **Slices**: [Learn more about slices](explanation/slices) • [Chisel releases](reference/chisel-releases/index) • [chisel.yaml](reference/chisel-releases/chisel.yaml) • -[Slice definitions](reference/chisel-releases/slice-definitions) • +[Slice definitions](reference/chisel-releases/slice-definitions) • [Slice design approaches](explanation/slice-design-approaches.md) • [Install Ubuntu Pro package slices](how-to/install-pro-package-slices) --------- From 2e6d64ce50faa7e66cffd7d22728b67285ca64fc Mon Sep 17 00:00:00 2001 From: Upils <5464641+upils@users.noreply.github.com> Date: Tue, 3 Feb 2026 08:06:08 +0100 Subject: [PATCH 05/16] docs: add reference for hints (#54) --- docs/.custom_wordlist.txt | 4 ++ .../chisel-releases/slice-definitions.md | 38 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/docs/.custom_wordlist.txt b/docs/.custom_wordlist.txt index 2fec1f8..1fa3ead 100644 --- a/docs/.custom_wordlist.txt +++ b/docs/.custom_wordlist.txt @@ -21,6 +21,7 @@ armor armored basename behavior +binutils chiseled conffiles config @@ -33,6 +34,7 @@ fips http https initialize +jaotc jsonwall libs linters @@ -48,6 +50,8 @@ subcommand subcommands symlink symlinks +timezones ubuntu +unopinionated whitespace yaml diff --git a/docs/reference/chisel-releases/slice-definitions.md b/docs/reference/chisel-releases/slice-definitions.md index 34ad842..65c8f69 100644 --- a/docs/reference/chisel-releases/slice-definitions.md +++ b/docs/reference/chisel-releases/slice-definitions.md @@ -477,6 +477,44 @@ directory and writes the concatenated data to the previously created Due to the usage of `until`, the `/usr/share/ca-certificates/mozilla/` directory and the files inside are not present in the final root file system. +(slice_definitions_format_slices_hint)= + +### `slices..hint` + +| Field | Type | Required | +| ------ | -------- | -------- | +| `hint` | `string` | Optional | + +Provides a concise and unopinionated discriminator to help the user select slices. +It focuses on describing the *subset* of contents coming from this slice. It does +not describe the package. + +It must be in a nominal passive style, written as a noun phrase: +- No articles: Do not start with `A,` `An`, and `The`. +- No finite verbs: Do not use `is`, `are`, `has,` or `contains`, or active + verbs like `generates`. + +Formatting: +- A maximum of 40 characters long. +- Only of alphanumeric characters, periods (`.`), commas (`,`), semicolons + (`;`), parentheses (`(`, `)`). +- Sentence case: Start with an uppercase letter (e.g. `All timezones` not + `all timezones`). +- Semicolons to separate multiple unrelated fragments of information. + (e.g. `No jaotc; binutils required`). +- No trailing punctuation: Do not end with a period or other punctuation + marks. +- No line breaks: Must be a single line. +- Uppercase for acronyms (e.g. `HTTP` not `Http`). + +Example: + +```yaml +slices: + tzdata-legacy_etc: + hint: Non-standard timezones +``` + (slice_definitions_example)= ## Example From fdc6023224c239c4eaff4bb7e86b688d4c975b3a Mon Sep 17 00:00:00 2001 From: Upils <5464641+upils@users.noreply.github.com> Date: Thu, 12 Feb 2026 14:42:57 +0100 Subject: [PATCH 06/16] fix(docs): Rephrase a hint rule to be more precise (#56) --- docs/reference/chisel-releases/slice-definitions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/chisel-releases/slice-definitions.md b/docs/reference/chisel-releases/slice-definitions.md index 65c8f69..1f1b4ab 100644 --- a/docs/reference/chisel-releases/slice-definitions.md +++ b/docs/reference/chisel-releases/slice-definitions.md @@ -490,7 +490,7 @@ It focuses on describing the *subset* of contents coming from this slice. It doe not describe the package. It must be in a nominal passive style, written as a noun phrase: -- No articles: Do not start with `A,` `An`, and `The`. +- No initial articles: Do not start with `A`, `An`, and `The`. - No finite verbs: Do not use `is`, `are`, `has,` or `contains`, or active verbs like `generates`. From c663e2ee9a6a03301a6d9f39ef69d72cb12bd438 Mon Sep 17 00:00:00 2001 From: Alberto Carretero Date: Thu, 12 Feb 2026 15:56:22 +0100 Subject: [PATCH 07/16] feat: add maintenance to the reference (#22) --------- Signed-off-by: Alberto Carretero --- docs/.custom_wordlist.txt | 1 + docs/reference/chisel-releases/chisel.yaml.md | 121 +++++++++++++----- docs/reference/cmd/cut.md | 3 + 3 files changed, 90 insertions(+), 35 deletions(-) diff --git a/docs/.custom_wordlist.txt b/docs/.custom_wordlist.txt index 1fa3ead..48095b9 100644 --- a/docs/.custom_wordlist.txt +++ b/docs/.custom_wordlist.txt @@ -55,3 +55,4 @@ ubuntu unopinionated whitespace yaml +Canonical's diff --git a/docs/reference/chisel-releases/chisel.yaml.md b/docs/reference/chisel-releases/chisel.yaml.md index 3ee788b..b56f38d 100644 --- a/docs/reference/chisel-releases/chisel.yaml.md +++ b/docs/reference/chisel-releases/chisel.yaml.md @@ -24,7 +24,7 @@ directory. | Field | Type | Required | Supported values | | -------- | -------- | -------- | ---------------- | -| `format` | `string` | Required | `v1` | +| `format` | `string` | Required | `v1`, `v2` | Used to define the supported schemas for the {ref}`chisel-releases_ref`. For example: @@ -38,14 +38,13 @@ New formats are typically introduced with new _chisel-releases_ and may introduce disruptive changes to the previous formats. ``` - (chisel_yaml_format_spec_archives)= ### `archives` -| Field | Type | Required | -| ---------- | -------- | -------- | -| `archives` | `object` | Required | +| Field | Type | Required | Compatibility | +| ---------- | -------- | -------- | ------------- | +| `archives` | `object` | Required | >= `v1` | Tells Chisel which Ubuntu archives to fetch packages from. @@ -81,9 +80,9 @@ otherwise, the archive point to the Ubuntu Pro archives listed ### `archives..default` -| Field | Type | Required | Supported values | -| --------- | --------- | --------------------------------------------------------------------------------------------------- | ---------------- | -| `default` | `boolean` | Required with multiple archives, if no {ref}`priorities` | `true`, `false` | +| Field | Type | Required | Supported values | Compatibility | +| --------- | --------- | --------------------------------------------------------------------------------------------------- | ---------------- | ------------- | +| `default` | `boolean` | Required with multiple archives, if no {ref}`priorities` | `true`, `false` | `v1` | If `default` is `true`, Chisel fetches packages from this archive, unless otherwise specified by the field {ref}`"archive"` @@ -102,9 +101,9 @@ so use {ref}`chisel_yaml_format_spec_archives_priority` instead. ### `archives..version` -| Field | Type | Required | Supported values | -| --------- | -------- | -------- | ------------------------------------------------------- | -| `version` | `string` | Required | Ubuntu release in `xx.yy` format e.g. 22.04, 24.04 etc. | +| Field | Type | Required | Supported values | Compatibility | +| --------- | -------- | -------- | ------------------------------------------------------- | ------------- | +| `version` | `string` | Required | Ubuntu release in `xx.yy` format e.g. 22.04, 24.04 etc. | >= `v1` | Indicates the Ubuntu release this archive should fetch the packages for. This value is currently only used for logging, and does not change @@ -115,9 +114,9 @@ the archive behaviour. ### `archives..suites` -| Field | Type | Required | Supported values | -| -------- | --------------- | -------- | ------------------------------------------------------------- | -| `suites` | `array` | Required | Ubuntu archive suite names e.g. `jammy`, `noble-updates` etc. | +| Field | Type | Required | Supported values | Compatibility | +| -------- | --------------- | -------- | ------------------------------------------------------------- | ------------- | +| `suites` | `array` | Required | Ubuntu archive suite names e.g. `jammy`, `noble-updates` etc. | >= `v1` | Lists the archive suites to fetch packages from. Read more about suites in the [Ubuntu packaging @@ -128,9 +127,9 @@ guide](https://canonical-ubuntu-packaging-guide.readthedocs-hosted.com/en/latest ### `archives..components` -| Field | Type | Required | Supported values | -| ------------ | --------------- | -------- | -------------------------------------------------- | -| `components` | `array` | Required | Suite component names e.g. `main`, `universe` etc. | +| Field | Type | Required | Supported values | Compatibility | +| ------------ | --------------- | -------- | -------------------------------------------------- | ------------- | +| `components` | `array` | Required | Suite component names e.g. `main`, `universe` etc. | >= `v1` | Lists the components of the archive suites to fetch packages from. Read more about components in the [Ubuntu packaging @@ -144,9 +143,9 @@ locate packages. ### `archives..public-keys` -| Field | Type | Required | Supported values | -| ------------- | --------------- | -------- | --------------------------------------------------------------------------- | -| `public-keys` | `array` | Required | List of key names, as defined in {ref}`chisel_yaml_format_spec_public_keys` | +| Field | Type | Required | Supported values | Compatibility | +| ------------- | --------------- | -------- | --------------------------------------------------------------------------- | ------------- | +| `public-keys` | `array` | Required | List of key names, as defined in {ref}`chisel_yaml_format_spec_public_keys` | >= `v1` | Lists the names of the OpenPGP public keys needed to verify the archive's `InRelease` file signatures. These key names must be defined in @@ -157,9 +156,9 @@ file signatures. These key names must be defined in ### `archives..priority` -| Field | Type | Required | Supported values | -| ---------- | --------- | ------------------------------------------------ | ---------------------------------- | -| `priority` | `integer` | Required with multiple archives, if no `default` | Any integer between -1000 and 1000 | +| Field | Type | Required | Supported values | Compatibility | +| ---------- | --------- | ------------------------------------------------ | ---------------------------------- | ------------- | +| `priority` | `integer` | Required with multiple archives, if no `default` | Any integer between -1000 and 1000 | >= `v1` | Describes the priority of an archive compared to other archives. It is used to support multiple archives in Chisel. If a package is @@ -176,9 +175,9 @@ Note that: ### `archives..pro` -| Field | Type | Required | Supported values | -| ----- | -------- | -------- | ------------------------------------------------ | -| `pro` | `string` | Optional | `fips`, `fips-updates`, `esm-apps`, `esm-infra`. | +| Field | Type | Required | Supported values | Compatibility | +| ----- | -------- | -------- | ------------------------------------------------ | ------------- | +| `pro` | `string` | Optional | `fips`, `fips-updates`, `esm-apps`, `esm-infra`. | >= `v1` | Specifies the [Ubuntu Pro](https://ubuntu.com/pro) archive to fetch and install packages from. @@ -221,13 +220,65 @@ Although not enforced, the following `priority` values are suggested when ``` +(chisel_yaml_format_spec_maintenance)= + +### `maintenance` + +| Field | Type | Required | Compatibility | +| ------------- | -------- | -------- | ------------- | +| `maintenance` | `object` | Required | >= `v2` | + +Includes the dates that mark the different stages of Canonical's support for a +release. In Chisel we say that a release is "unmaintained" after its +`end-of-life`, and "unstable" before its `standard` date. + +Chisel by default will only cut the releases which are officially maintained. +To use "unstable" or "unmaintained" releases see the reference for the +{ref}`cut command`. + +For more information about Ubuntu's release cycle see +https://ubuntu.com/about/release-cycle. + +### `maintenance.standard` + +| Field | Type | Required | Compatibility | +| ---------- | ------------------- | -------- | ------------- | +| `standard` | `date (YYYY-MM-DD)` | Required | >= `v2` | + +Marks the start of standard support. + +### `maintenance.expanded` + +| Field | Type | Required | Compatibility | +| ---------- | ------------------- | --------- | ------------- | +| `expanded` | `date (YYYY-MM-DD)` | Optional | >= `v2` | + +Marks the start of expanded support (only valid for LTS releases). + +### `maintenance.legacy` + +| Field | Type | Required | Compatibility | +| -------- | ------------------- | --------- | ------------- | +| `legacy` | `date (YYYY-MM-DD)` | Optional | >= `v2` | + +Marks the start of legacy support (only valid for LTS releases). + +### `maintenance.end-of-life` + +| Field | Type | Required | Compatibility | +| ------------- | ------------------- | -------- | ------------- | +| `end-of-life` | `date (YYYY-MM-DD)` | Required | >= `v2` | + +After `end-of-life` the release is no longer officially maintained by +Canonical. + (chisel_yaml_format_spec_public_keys)= ### `public-keys` -| Field | Type | Required | -| ------------- | -------- | -------- | -| `public-keys` | `object` | Required | +| Field | Type | Required | Compatibility | +| ------------- | -------- | -------- | ------------- | +| `public-keys` | `object` | Required | >= `v1` | The top-level `public-keys` field is used to define OpenPGP public keys that are needed to verify the `InRelease` file signatures of the @@ -255,9 +306,9 @@ The key names are then referenced in ### `public-keys..id` -| Field | Type | Required | -| ----- | -------- | -------- | -| `id` | `string` | Required | +| Field | Type | Required | Compatibility | +| ----- | -------- | -------- | ------------- | +| `id` | `string` | Required | >= `v1` | The `id` field specifies the OpenPGP public key fingerprint in capital hex e.g. `871920D1991BC93C`. It must be 16 chars long and must match the decoded @@ -268,9 +319,9 @@ fingerprint in {ref}`chisel_yaml_format_spec_public_keys_armor`. ### `public-keys..armor` -| Field | Type | Required | -| ------- | -------- | -------- | -| `armor` | `string` | Required | +| Field | Type | Required | Compatibility | +| ------- | -------- | -------- | ------------- | +| `armor` | `string` | Required | >= `v1` | The `armor` field contains the multi-line armored ASCII data of OpenPGP public key. diff --git a/docs/reference/cmd/cut.md b/docs/reference/cmd/cut.md index 1b868bf..0e13fac 100644 --- a/docs/reference/cmd/cut.md +++ b/docs/reference/cmd/cut.md @@ -15,6 +15,9 @@ current host, unless the `--release` option is used. - `--release` is a {{chisel_releases_repo}} branch or local directory (e.g. ubuntu-22.04). - `--root` is the path for the resulting root file system. - `--arch` is used to specify the desired package architecture. +- `--ignore` is used to allow Chisel to work with "unstable" or "unmaintained" + releases (see {ref}`here`). The valid + values are "unstable" or "unmaintained", respectively. From a4b744a2dd6e051509593a75bf2b3c4b1de98620 Mon Sep 17 00:00:00 2001 From: Cristovao Cordeiro Date: Thu, 19 Feb 2026 09:19:37 +0100 Subject: [PATCH 08/16] docs: add v3 format and compatibility matrix (#57) * docs: add v3 format and compatibility matrix * docs: define format differences for slice definitions schema * fix: links * fix: links to anchors * Update docs/reference/chisel-releases/chisel.yaml.md Co-authored-by: Anna Sancho Vaquer Signed-off-by: Cristovao Cordeiro * Update docs/reference/chisel-releases/chisel.yaml.md Co-authored-by: Anna Sancho Vaquer Signed-off-by: Cristovao Cordeiro * fix: missing block closure * Update docs/reference/chisel-releases/slice-definitions.md Co-authored-by: Anna Sancho Vaquer Signed-off-by: Cristovao Cordeiro * Update docs/reference/chisel-releases/slice-definitions.md Co-authored-by: Anna Sancho Vaquer Signed-off-by: Cristovao Cordeiro * chore: rename table header --------- Signed-off-by: Cristovao Cordeiro Co-authored-by: Anna Sancho Vaquer --- docs/reference/chisel-releases/chisel.yaml.md | 39 +++++- .../chisel-releases/slice-definitions.md | 122 ++++++++++++++++-- 2 files changed, 143 insertions(+), 18 deletions(-) diff --git a/docs/reference/chisel-releases/chisel.yaml.md b/docs/reference/chisel-releases/chisel.yaml.md index b56f38d..e2768ac 100644 --- a/docs/reference/chisel-releases/chisel.yaml.md +++ b/docs/reference/chisel-releases/chisel.yaml.md @@ -24,7 +24,7 @@ directory. | Field | Type | Required | Supported values | | -------- | -------- | -------- | ---------------- | -| `format` | `string` | Required | `v1`, `v2` | +| `format` | `string` | Required | `v1`, `v2`, `v3` | Used to define the supported schemas for the {ref}`chisel-releases_ref`. For example: @@ -33,11 +33,40 @@ For example: format: v1 ``` -```{note} +```{important} New formats are typically introduced with new _chisel-releases_ and may introduce disruptive changes to the previous formats. ``` + +(chisel_yaml_format_spec_compatibility_matrix)= + +#### Compatibility matrix + +In this table, you'll find the designated `format` for all existing +and supported {ref}`chisel-releases_ref`, alongside the Chisel tool versions +that support said `format`. + +```{eval-rst} + ++-----------------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------+-------------------------------------------------------------------+ +| chisel-release | .. centered:: Format | ++=============================================================================+=======================================================+===================================================================+===================================================================+ +| | **V1** | **V2** | **V3** | ++-----------------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------+-------------------------------------------------------------------+ +| `20.04 `_ | `all `_ | x | x | ++-----------------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------+-------------------------------------------------------------------+ +| `22.04 `_ | `all `_ | x | x | ++-----------------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------+-------------------------------------------------------------------+ +| `24.04 `_ | `all `_ | x | x | ++-----------------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------+-------------------------------------------------------------------+ +| `25.10 `_ | x | >= `v1.2.0 `_| x | ++-----------------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------+-------------------------------------------------------------------+ +| `26.04 `_ | x | x | >= `v1.4.0 `_| ++-----------------------------------------------------------------------------+-------------------------------------------------------+-------------------------------------------------------------------+-------------------------------------------------------------------+ + +``` + (chisel_yaml_format_spec_archives)= ### `archives` @@ -120,7 +149,7 @@ the archive behaviour. Lists the archive suites to fetch packages from. Read more about suites in the [Ubuntu packaging -guide](https://canonical-ubuntu-packaging-guide.readthedocs-hosted.com/en/latest/explanation/archive/#suite). +guide](https://documentation.ubuntu.com/project/how-ubuntu-is-made/concepts/package-archive/#suite). (chisel_yaml_format_spec_archives_components)= @@ -133,7 +162,7 @@ guide](https://canonical-ubuntu-packaging-guide.readthedocs-hosted.com/en/latest Lists the components of the archive suites to fetch packages from. Read more about components in the [Ubuntu packaging -guide](https://canonical-ubuntu-packaging-guide.readthedocs-hosted.com/en/latest/explanation/archive/#components). +guide](https://documentation.ubuntu.com/project/how-ubuntu-is-made/concepts/package-archive/#components). Chisel reads the `InRelease` files from each `(suite, component)` combination to locate packages. @@ -380,3 +409,5 @@ public-keys: =9AdM -----END PGP PUBLIC KEY BLOCK----- ``` + + diff --git a/docs/reference/chisel-releases/slice-definitions.md b/docs/reference/chisel-releases/slice-definitions.md index 1f1b4ab..32d2572 100644 --- a/docs/reference/chisel-releases/slice-definitions.md +++ b/docs/reference/chisel-releases/slice-definitions.md @@ -67,15 +67,56 @@ archive: ubuntu ### `essential` +This field is similar to {ref}`slice_definitions_format_slices_essential`, +but applicable for every slice within the package. + +```{note} +`essential` has different types across different +{ref}`formats`. +``` + +`````{tab-set} + +````{tab-item} Format **v3** +| Field | Type | Required | +| ----------- | -------- | -------- | +| `essential` | `object` | Optional | + +A map of slices, in their full name (e.g. `hello_copyright`), +alongside their `essential`-specific properties. + +#### `essential..arch` + +| Field | Type | Required | Supported values | +| ------ | --------------------------- | -------- | ---------------------------------------------------------------- | +| `arch` | `string` or `array` | Optional | `amd64`, `arm64`, `armhf`, `i386`, `ppc64el`, `riscv64`, `s390x` | + +Used to specify the package architectures an _essential_ dependency should be +installed for. This field can take a single architecture string or a list, as its +value. + +In the following example, `hello_copyright` will be installed for every installation +of every slice of the `hello` package, while `foo_bar` will only be installed +for `arm64` installations of any slice within `hello`. + +```yaml +package: hello +essential: + hello_copyright: {} + foo_bar: {arch: arm64} +slices: + ... +``` + +```` + +````{tab-item} Formats **v1** and **v2** | Field | Type | Required | Supported values | | ----------- | --------------- | -------- | ------------------ | | `essential` | `array` | Optional | An existing slice. | -Lists the slices that are needed for **every slice** of the -current package. Slices in this list must be written in their full name, e.g. -`hello_copyright`. This field is similar to -{ref}`slice_definitions_format_slices_essential`, but applicable for every slice -within the package. +Slices in this list must be written in their full name, e.g. +`hello_copyright`. In the following example, the `hello_copyright` slice is an _essential_ for every slice including the `hello_bins` slice. @@ -91,6 +132,9 @@ slices: copyright: ... ``` +```` +````` + (slice_definitions_format_slices)= @@ -130,15 +174,60 @@ slices: ### `slices..essential` +This field is similar to {ref}`slice_definitions_format_essential`,but only applicable for the current +slice. + +```{note} +`slices..essential` has different types across different +{ref}`formats`. +``` + +`````{tab-set} + +````{tab-item} Format **v3** +| Field | Type | Required | +| ----------- | -------- | -------- | +| `essential` | `object` | Optional | + +A map of slices, and their `essential`-specific properties, that are needed and that must be installed before +the current slice. +These slice names must be written in their full name e.g. `hello_copyright`. + + +#### `slices..essential..arch` + +| Field | Type | Required | Supported values | +| ------ | --------------------------- | -------- | ---------------------------------------------------------------- | +| `arch` | `string` or `array` | Optional | `amd64`, `arm64`, `armhf`, `i386`, `ppc64el`, `riscv64`, `s390x` | + +Used to specify the package architectures an _essential_ dependency should be +installed for. This field can take a single architecture string or a list, as its +value. + +In the following example: + - `gcc-aarch64-linux-gnu_gcc` is a requirement for the `gcc` slice, only on `arm64` installations, + - `gcc-x86-64-linux-gnu_gcc` is a requirement for the `gcc` slice, only on `amd64` installations, and + - `gcc-15_gcc-15` is a requirement for the `gcc` slice, for all installations. + +```yaml +slices: + gcc: + essential: + gcc-aarch64-linux-gnu_gcc: {arch: [arm64]} + gcc-x86-64-linux-gnu_gcc: {arch: [amd64]} + gcc-15_gcc-15: + +``` +```` + +````{tab-item} Formats **v1** and **v2** | Field | Type | Required | Supported values | | ----------- | --------------- | -------- | ------------------ | | `essential` | `array` | Optional | An existing slice. | Lists the slices that are needed and that must be installed before the current slice. Slices in this list must be written in their full name -e.g. `hello_copyright`. This field is similar to -{ref}`slice_definitions_format_essential`, but only applicable for the current -slice. +e.g. `hello_copyright`. In the following example, `libc6_libs` is a requirement for the `bins` slice and must be installed when installing the `bins` slice. @@ -149,6 +238,11 @@ slices: essential: - libc6_libs ``` +```` + + +````` + (slice_definitions_format_slices_contents)= @@ -374,9 +468,9 @@ In the following example, Chisel creates the `/var/lib/chisel` directory with ### `slices..contents..prefer` -| Field | Type | Required | -| ---------- | -------- | -------- | -| `prefer` | `string` | Optional | +| Field | Type | Required | Introduced in format | +| ---------- | -------- | -------- | -------- | +| `prefer` | `string` | Optional | {ref}`v2` | Used to resolve a path conflict across multiple packages. @@ -481,9 +575,9 @@ and the files inside are not present in the final root file system. ### `slices..hint` -| Field | Type | Required | -| ------ | -------- | -------- | -| `hint` | `string` | Optional | +| Field | Type | Required | Introduced in format | +| ------ | -------- | -------- | -------------------- | +| `hint` | `string` | Optional | {ref}`v3` | Provides a concise and unopinionated discriminator to help the user select slices. It focuses on describing the *subset* of contents coming from this slice. It does From 28f3877d8d10f062a4f79fdb287697f42d28511d Mon Sep 17 00:00:00 2001 From: asanvaq Date: Mon, 1 Jun 2026 15:07:23 +0200 Subject: [PATCH 09/16] feat: update files for migration --- docs/_static/js/overwrite_links.js | 38 ++++++++++++++++++++++++++++++ docs/conf.py | 12 ++++++---- 2 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 docs/_static/js/overwrite_links.js diff --git a/docs/_static/js/overwrite_links.js b/docs/_static/js/overwrite_links.js new file mode 100644 index 0000000..f4e0970 --- /dev/null +++ b/docs/_static/js/overwrite_links.js @@ -0,0 +1,38 @@ + // Replace oldDomain with newDomain + const oldDomain = 'documentation.ubuntu.com/chisel/en/latest/'; + const newDomain = 'ubuntu.com/chisel/docs/'; + + function escapeRegExp(value) { + return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + } + + function overwriteMatchingAnchorUrls(container) { + if (!container) return; + + const anchors = container.querySelectorAll('a[href], link[href]'); + const oldDomainRegex = new RegExp(escapeRegExp(oldDomain), 'g'); + + anchors.forEach(anchor => { + anchor.href = anchor.href.replace(oldDomainRegex, newDomain); + }); + } + + overwriteMatchingAnchorUrls(document.querySelector('header')); + + // Use a MutationObserver to wait for the RTD flyout element to appear in the DOM + const observer = new MutationObserver(function(mutations, obs) { + + const rtdFlyout = document.querySelector('readthedocs-flyout'); + if (!rtdFlyout) return; + + obs.disconnect(); + + rtdFlyout.addEventListener('click', function() { + const shadowRoot = rtdFlyout.shadowRoot; + if (!shadowRoot) return; + + overwriteMatchingAnchorUrls(shadowRoot); + }); + }); + + observer.observe(document.body, { childList: true, subtree: true }); \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index ffbb317..92e0f33 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -31,7 +31,9 @@ # Sidebar documentation title; best kept reasonably short # # TODO: To include a version number, add it here (hardcoded or automated). -# + +version = f"{os.environ.get('READTHEDOCS_VERSION', 'local')}" + # TODO: To disable the title, set to an empty string. html_title = project + " documentation" @@ -70,7 +72,7 @@ # NOTE: The Open Graph Protocol (OGP) enhances page display in a social graph # and is used by social media platforms; see https://ogp.me/ -ogp_site_url = "https://documentation.ubuntu.com/chisel/" +ogp_site_url = f"https://ubuntu.com/chisel/docs//{version}/" # Preview name of the documentation website @@ -176,7 +178,7 @@ # TODO: If your documentation is hosted on https://docs.ubuntu.com/, # uncomment and update as needed. -slug = "chisel" +slug = '/docs' # Or '//docs' ####################### # Sitemap configuration: https://sphinx-sitemap.readthedocs.io/ @@ -184,7 +186,7 @@ # Use RTD canonical URL to ensure duplicate pages have a specific canonical URL -html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "/") +html_baseurl = f"https://ubuntu.com/chisel/docs//{version}/" # URL scheme. Add language and version scheme elements. # When configured with RTD variables, check for RTD environment so manual runs succeed: @@ -313,6 +315,7 @@ html_js_files = [ 'bundle.js', + "js/overwrite_links.js", ] @@ -377,4 +380,3 @@ def setup(app): app.add_css_file("tasklist.css") app.add_js_file("tasklist.js") #checkbox-enabling JS - From 89ece03670a2063cabc7a140dfe79ae69932e620 Mon Sep 17 00:00:00 2001 From: Anna Sancho Vaquer Date: Wed, 3 Jun 2026 08:46:43 +0200 Subject: [PATCH 10/16] fix: fix slug for 404 pages Signed-off-by: Anna Sancho Vaquer --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 92e0f33..7e2fe54 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -178,7 +178,7 @@ # TODO: If your documentation is hosted on https://docs.ubuntu.com/, # uncomment and update as needed. -slug = '/docs' # Or '//docs' +slug = 'chisel/docs' # Or '//docs' ####################### # Sitemap configuration: https://sphinx-sitemap.readthedocs.io/ From e2fbd7751d81c7f8d23e17cb52b198c66cb24d30 Mon Sep 17 00:00:00 2001 From: asanvaq Date: Wed, 3 Jun 2026 09:20:02 +0200 Subject: [PATCH 11/16] feat: remove js file --- docs/_static/js/overwrite_links.js | 38 ------------------------------ 1 file changed, 38 deletions(-) delete mode 100644 docs/_static/js/overwrite_links.js diff --git a/docs/_static/js/overwrite_links.js b/docs/_static/js/overwrite_links.js deleted file mode 100644 index f4e0970..0000000 --- a/docs/_static/js/overwrite_links.js +++ /dev/null @@ -1,38 +0,0 @@ - // Replace oldDomain with newDomain - const oldDomain = 'documentation.ubuntu.com/chisel/en/latest/'; - const newDomain = 'ubuntu.com/chisel/docs/'; - - function escapeRegExp(value) { - return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - - function overwriteMatchingAnchorUrls(container) { - if (!container) return; - - const anchors = container.querySelectorAll('a[href], link[href]'); - const oldDomainRegex = new RegExp(escapeRegExp(oldDomain), 'g'); - - anchors.forEach(anchor => { - anchor.href = anchor.href.replace(oldDomainRegex, newDomain); - }); - } - - overwriteMatchingAnchorUrls(document.querySelector('header')); - - // Use a MutationObserver to wait for the RTD flyout element to appear in the DOM - const observer = new MutationObserver(function(mutations, obs) { - - const rtdFlyout = document.querySelector('readthedocs-flyout'); - if (!rtdFlyout) return; - - obs.disconnect(); - - rtdFlyout.addEventListener('click', function() { - const shadowRoot = rtdFlyout.shadowRoot; - if (!shadowRoot) return; - - overwriteMatchingAnchorUrls(shadowRoot); - }); - }); - - observer.observe(document.body, { childList: true, subtree: true }); \ No newline at end of file From 765bb25954f478e9c2364750764a34cdf50bcd3b Mon Sep 17 00:00:00 2001 From: asanvaq Date: Wed, 3 Jun 2026 11:19:23 +0200 Subject: [PATCH 12/16] feat: revert removal of js file and update domain name --- docs/_static/js/overwrite_links.js | 38 ++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/_static/js/overwrite_links.js diff --git a/docs/_static/js/overwrite_links.js b/docs/_static/js/overwrite_links.js new file mode 100644 index 0000000..25e0ad9 --- /dev/null +++ b/docs/_static/js/overwrite_links.js @@ -0,0 +1,38 @@ + // Replace oldDomain with newDomain + const oldDomain = 'canonical-chisel-migration.readthedocs-hosted.com'; + const newDomain = 'ubuntu.com/chisel/docs/'; + + function escapeRegExp(value) { + return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + } + + function overwriteMatchingAnchorUrls(container) { + if (!container) return; + + const anchors = container.querySelectorAll('a[href], link[href]'); + const oldDomainRegex = new RegExp(escapeRegExp(oldDomain), 'g'); + + anchors.forEach(anchor => { + anchor.href = anchor.href.replace(oldDomainRegex, newDomain); + }); + } + + overwriteMatchingAnchorUrls(document.querySelector('header')); + + // Use a MutationObserver to wait for the RTD flyout element to appear in the DOM + const observer = new MutationObserver(function(mutations, obs) { + + const rtdFlyout = document.querySelector('readthedocs-flyout'); + if (!rtdFlyout) return; + + obs.disconnect(); + + rtdFlyout.addEventListener('click', function() { + const shadowRoot = rtdFlyout.shadowRoot; + if (!shadowRoot) return; + + overwriteMatchingAnchorUrls(shadowRoot); + }); + }); + + observer.observe(document.body, { childList: true, subtree: true }); \ No newline at end of file From 17d98a3d830ce780221145bbe97d7a0ddafc2060 Mon Sep 17 00:00:00 2001 From: asanvaq Date: Thu, 4 Jun 2026 11:37:46 +0200 Subject: [PATCH 13/16] fix: update based on new instructions --- docs/_static/js/overwrite_links.js | 2 +- docs/conf.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/_static/js/overwrite_links.js b/docs/_static/js/overwrite_links.js index 25e0ad9..89c38c5 100644 --- a/docs/_static/js/overwrite_links.js +++ b/docs/_static/js/overwrite_links.js @@ -1,5 +1,5 @@ // Replace oldDomain with newDomain - const oldDomain = 'canonical-chisel-migration.readthedocs-hosted.com'; + const oldDomain = '<>'; const newDomain = 'ubuntu.com/chisel/docs/'; function escapeRegExp(value) { diff --git a/docs/conf.py b/docs/conf.py index 7e2fe54..98289ec 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -72,7 +72,7 @@ # NOTE: The Open Graph Protocol (OGP) enhances page display in a social graph # and is used by social media platforms; see https://ogp.me/ -ogp_site_url = f"https://ubuntu.com/chisel/docs//{version}/" +ogp_site_url = f"https://ubuntu.com/chisel/docs/{version}/" # Preview name of the documentation website @@ -186,7 +186,7 @@ # Use RTD canonical URL to ensure duplicate pages have a specific canonical URL -html_baseurl = f"https://ubuntu.com/chisel/docs//{version}/" +html_baseurl = f"https://ubuntu.com/chisel/docs/{version}/" # URL scheme. Add language and version scheme elements. # When configured with RTD variables, check for RTD environment so manual runs succeed: @@ -201,6 +201,8 @@ sitemap_show_lastmod = True +sitemap_filename = "doc-sitemap.xml" + # Exclude generated pages from the sitemap: sitemap_excludes = [ From 4617cd7170e0dbe7be74cfa92a80ed22aa2fda8a Mon Sep 17 00:00:00 2001 From: asanvaq Date: Fri, 5 Jun 2026 09:46:32 +0200 Subject: [PATCH 14/16] fix: update js file --- docs/_static/js/overwrite_links.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_static/js/overwrite_links.js b/docs/_static/js/overwrite_links.js index 89c38c5..3177fc0 100644 --- a/docs/_static/js/overwrite_links.js +++ b/docs/_static/js/overwrite_links.js @@ -1,6 +1,6 @@ // Replace oldDomain with newDomain const oldDomain = '<>'; - const newDomain = 'ubuntu.com/chisel/docs/'; + const newDomain = 'ubuntu.com/chisel/docs'; function escapeRegExp(value) { return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); From bc1d57eac28ecd9b51ad4bdfa0a86195fb9e43d6 Mon Sep 17 00:00:00 2001 From: asanvaq Date: Fri, 5 Jun 2026 10:16:32 +0200 Subject: [PATCH 15/16] fix: fix sitemap congif --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 98289ec..da6bd2a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -193,7 +193,7 @@ if 'READTHEDOCS_VERSION' in os.environ: version = os.environ["READTHEDOCS_VERSION"] - sitemap_url_scheme = '{version}{link}' + sitemap_url_scheme = '{link}' else: sitemap_url_scheme = 'MANUAL/{link}' From ae1ed6447ee968c2382123edba6619959e20c792 Mon Sep 17 00:00:00 2001 From: asanvaq Date: Mon, 8 Jun 2026 08:20:24 +0200 Subject: [PATCH 16/16] fix: update rtd links following merge proposal review --- docs/_static/js/overwrite_links.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_static/js/overwrite_links.js b/docs/_static/js/overwrite_links.js index 3177fc0..a524d8c 100644 --- a/docs/_static/js/overwrite_links.js +++ b/docs/_static/js/overwrite_links.js @@ -1,5 +1,5 @@ // Replace oldDomain with newDomain - const oldDomain = '<>'; + const oldDomain = 'canonical-chisel-migration.readthedocs-hosted.com'; const newDomain = 'ubuntu.com/chisel/docs'; function escapeRegExp(value) {