Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/elasticpath/docusaurus-snapshot-version
A tool to perform snapshot versioning in Docusaurus V1
https://github.com/elasticpath/docusaurus-snapshot-version
documentation docusaurus
Last synced: about 1 month ago
JSON representation
A tool to perform snapshot versioning in Docusaurus V1
- Host: GitHub
- URL: https://github.com/elasticpath/docusaurus-snapshot-version
- Owner: elasticpath
- License: gpl-3.0
- Created: 2020-08-25T14:49:23.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-12-10T21:02:56.000Z (about 3 years ago)
- Last Synced: 2023-11-07T11:20:17.115Z (about 1 year ago)
- Topics: documentation, docusaurus
- Language: JavaScript
- Homepage:
- Size: 146 KB
- Stars: 1
- Watchers: 3
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
## DocusaurusV1-SnapshotVersion
Elastic Path uses [Docusaurus - V1](https://docusaurus.io/) for generating documentation site. Docusaurus is a great tool that has been useful in delivering our documentation easily and quickly.
Docusaurus has a versioning feature, which is needed for any software project documentation. The Elastic Path DevOps team found that the versioning feature, which uses a fallback approach, was not sufficient and decided to implement a snapshot approach instead.
## Usage
1. Add this module to your Docusaurus project:
- Yarn: `yarn add https://github.com/elasticpath/docusaurus-snapshot-version.git --dev`
- Npm: `npm install https://github.com/elasticpath/docusaurus-snapshot-version.git --save-dev`> **Note**: At the moment, this tool is not published to npm registry. We can add a git repository as a dependency.
2. Run the following command to create a new version from "next release" docs.
```sh
$ ./node_modules/.bin/docusaurus-snapshot-version create --version --siteDir --staticDir
```- `version` - Required. The value of the new version to create, such as `1.1.x` or `2.0.0`.
- `siteDir` - Optional. The absolute or relative path to the `website` directory of the Docusaurus V1 project. The default value is `.`.
- `staticDir` - Optional. The name of the static asset directory to be versioned under the `website/static` directory. The option can be repeated multiple times. The default value is an empty array.
## Concepts
### Why was this tool created?
Docusaurus provides a feature for managing versions. It uses [Fallback functionality](https://docusaurus.io/docs/en/versioning#fallback-functionality) when creating new versions of docs. The concept/architecture of a “new version” in Docusaurus V1 has some issues and limitations that make it very difficult to maintain a documentation site that is constantly changing across different versions.
**Assets are not versioned** - Assets include images, which are a part of most documentation sites. Docusaurus does not provide any guidance, conventions, or features for managing assets. There isn't a straightforward way of managing images used in different versions of the documentation.
**Fallback-based versioning is not practical** - A new version of a file is created if and only if the file content has changed from the previous version. The following issues arise:
- When a new version is created, `doc1.md` may not have had any changes compared to the previous version. So, `doc1.md` is not created for the new version, but the `doc1.md` file is included when the new version of the documentation site is built. After the version is created, Docusaurus is not clear about how to make changes to `doc1.md` in the new version when the file wasn't copied to the new version.
- When a file needs a change that affects version `1.0.0` of the site, the change might not be suitable for version `2.0.0`. However, version `2.0.0` uses that file. Docusaurus is not clear about how to resolve this situation.
### How does this tool work?
This tool was created to solve the problems mentioned above. It provides a new package, `docusaurus-snapshot-version`, for creating new versions. It's a wrapper for the built-in command Docusaurus uses to create new versions.
The command uses the following conventions for managing static assets:
#### Docs-Specific Static Assets
- All static assets for the "next release" are at the root of the `docs/assets/` directory as a flat structure, that is, there are no sub-directories.
- All static assets for "versioned docs" are at the root of the directory `docs/assets/version-/` in a flat structure, that is, there are no sub-directories.Ideally, the versioned assets would reside with the versioned documents (i.e. `website/versioned_docs/version-/assets/`), but this cannot be achieved without changing the core logic of Docusaurus V1.
#### Site-Specific Static Assets
Site-specific static asset files are in the `website/static/` directory, and static directories at this location can be versioned.
- If a static directory is versioned for the first time, everything in the static directory is copied into the `` and the `next` (for next release) directories. These new directories are under the same static directory.
- If a static directory has been versioned before, everything in the `next` directory is copied into the `` directory.e.g. Once `website/static/javadocs` directory is versioned, files from that directory are in the following directories:
- `website/static/javadocs/next`
- `website/static/javadocs/`> Any subsequent versioning will copy files from "next" release (`website/static/javadocs/next`) into the new release (`website/static/javadocs/`)
When you execute the `docusaurus-snapshot-version` command, the following steps are performed:
1. In the "next release" directory:
- Adds a new line to the end of all `*.md` files.
- Adds a new line to the end of the `website/sidebars.json` file2. Creates a new version in the `website/versioned_docs/` directory by running the following command: `docusaurus-version`
Because all the Markdown files and the `sidebars.json` file contain a change (the new line), Docusaurus copies all the files from the "next release" location to the "new version" location.
3. Removes the new lines that were added in step 1 for both the "next release" and the "new version".
4. Copies all the files from the `docs/assets/` directory (without any sub-directories) into the `docs/assets/version-/` directory.
5. In the `website/versioned_docs/version-/` directory, updates all the documents containing image references to point to the new assets directory created in the previous step.
6. If site-specific static assets are included in the versioning:
1. The appropriate directories are generated based on whether the static asset directories have been versioned before or not.
2. File path references to the static asset files in the `docs` and `versioned_docs` directories are updated accordingly.