2022-06-29 17:48:12 +03:00
|
|
|
|
# Mozilla Protocol
|
2018-02-21 22:31:08 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
Protocol is a design system for Mozilla and Firefox websites. It establishes a
|
|
|
|
|
common design language, provides reusable coded components, and outlines high
|
|
|
|
|
level guidelines for content and accessibility.
|
2018-02-21 22:31:08 +03:00
|
|
|
|
|
2018-05-30 16:10:53 +03:00
|
|
|
|
https://protocol.mozilla.org/
|
2018-03-21 04:05:07 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
Protocol is still an evolving project. Currently, it’s used primarily by the
|
|
|
|
|
Mozilla Marketing Websites team as the front-end for [www.mozilla.org](https://www.mozilla.org).
|
|
|
|
|
The long term goal is to provide a robust, unified design system that anyone at
|
|
|
|
|
Mozilla can use to build an on-brand website.
|
2020-08-28 17:32:04 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
If you’re interested in using Protocol on your project, let us know and we can
|
|
|
|
|
help you. You can find us in #protocol-design-system on Mozilla’s Slack (for
|
|
|
|
|
Mozillians) or in #protocol-design-system on [Matrix](https://chat.mozilla.org/)
|
|
|
|
|
(open to the public). Also feel free to
|
|
|
|
|
[file an issue on GitHub](https://github.com/mozilla/protocol/issues).
|
2019-07-10 15:21:05 +03:00
|
|
|
|
|
2019-08-16 02:14:24 +03:00
|
|
|
|
![Current npm package version.](https://img.shields.io/npm/v/@mozilla-protocol/core)
|
|
|
|
|
![Total downloads on npm.](https://img.shields.io/npm/dt/@mozilla-protocol/core)
|
|
|
|
|
![Pull requests welcome!](https://img.shields.io/badge/PRs-welcome-brightgreen)
|
|
|
|
|
|
2018-05-22 13:33:19 +03:00
|
|
|
|
## Getting Started
|
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
Protocol is built on the [Node.js](https://nodejs.org/) platform and published
|
|
|
|
|
to [NPM](https://www.npmjs.com/), so be sure to have both installed before
|
|
|
|
|
proceeding.
|
2018-05-22 13:33:19 +03:00
|
|
|
|
|
|
|
|
|
## Installation
|
2018-02-21 22:31:08 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
To use Protocol in your website you can install the core package directly from
|
|
|
|
|
NPM:
|
2018-02-21 22:31:08 +03:00
|
|
|
|
|
2018-04-23 13:29:16 +03:00
|
|
|
|
```
|
|
|
|
|
npm install @mozilla-protocol/core --save
|
|
|
|
|
```
|
2018-02-21 22:31:08 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
Alternatively, you can also [download the latest release](https://github.com/mozilla/protocol/releases/latest)
|
|
|
|
|
from GitHub.
|
2018-02-21 22:31:08 +03:00
|
|
|
|
|
2018-05-25 03:07:43 +03:00
|
|
|
|
## Usage
|
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
Once installed, the relevant CSS, JavaScript, and asset files will be available
|
|
|
|
|
in your project under `./node_modules/@mozilla-protocol/core/`.
|
2018-05-25 03:07:43 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
The core CSS file is bundled as `protocol.css`, which contains styling for things
|
|
|
|
|
such as basic elements and typography, as well as some global components like
|
|
|
|
|
navigation and a footer. Other component and layout CSS is bundled as
|
|
|
|
|
`protocol-components.css` for convenience.
|
2018-05-25 03:07:43 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
However, these pre-compiled CSS files include the _entire_ pattern library, which
|
|
|
|
|
you may not need. We recommend compiling your own styles from the source Sass
|
|
|
|
|
files, also included in the published package. That allows you to configure Protocol
|
|
|
|
|
to include just the styles and components you need for each page of your website.
|
2018-05-25 03:07:43 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
## Make it Run
|
2018-04-23 13:29:16 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
To build Protocol from source and run the documentation site locally, you can
|
|
|
|
|
clone the repo from GitHub:
|
2018-04-23 13:29:16 +03:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ git clone https://github.com/mozilla/protocol.git
|
|
|
|
|
$ cd protocol
|
2022-06-29 17:48:12 +03:00
|
|
|
|
$ npm install
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Running `npm install` will install dependencies. Then:
|
|
|
|
|
|
|
|
|
|
```
|
2023-05-06 00:13:33 +03:00
|
|
|
|
$ npm run webpack
|
2022-06-29 17:48:12 +03:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This will compile the Sass and copy assets into a local folder in preparation to
|
|
|
|
|
run the server. It also starts a “watch” process that will watch those files and
|
|
|
|
|
automatically recompile when they change.
|
|
|
|
|
|
|
|
|
|
In another command line console (and still within the Protocol folder), run:
|
|
|
|
|
|
|
|
|
|
```
|
2018-04-23 13:29:16 +03:00
|
|
|
|
$ npm start
|
|
|
|
|
```
|
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
This will build the site locally and start the development server at
|
|
|
|
|
<http://localhost:3000>.
|
|
|
|
|
|
|
|
|
|
## Building the website
|
|
|
|
|
|
|
|
|
|
To build the Protocol documentation site for deployment, run:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ npm run build-docs
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Building the NPM package
|
|
|
|
|
|
|
|
|
|
We use a [Webpack](https://webpack.js.org/) configuration for building the contents
|
|
|
|
|
of the NPM package ready for publishing. To build the package, run:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
npm run build-package
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This will install dependencies, lint CSS/JS files, and then build the package
|
|
|
|
|
content in the `./package/` directory.
|
|
|
|
|
|
|
|
|
|
## Running tests
|
|
|
|
|
|
|
|
|
|
To perform the package build process above and then run front-end JS tests against
|
|
|
|
|
the processed files:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
npm test
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Publishing to NPM
|
|
|
|
|
|
|
|
|
|
Protocol is published to NPM under the `@mozilla-protocol/core` namespace/package
|
|
|
|
|
name. To publish a release to NPM, use the following steps:
|
|
|
|
|
|
|
|
|
|
1. Before you start make sure the project's [CHANGELOG.md](https://github.com/mozilla/protocol/blob/main/CHANGELOG.md)
|
|
|
|
|
is up to date.
|
|
|
|
|
2. Update the package `version` number in [assets/package/package.json](https://github.com/mozilla/protocol/blob/main/assets/package/package.json)
|
|
|
|
|
(use [Semantic Versioning](https://semver.org/) to determine what the new version number
|
|
|
|
|
should be).
|
|
|
|
|
3. Update the package README [assets/package/README.md](https://github.com/mozilla/protocol/blob/main/assets/package/README.md).
|
|
|
|
|
4. Run `npm install` to update the package-lock.json file.
|
|
|
|
|
5. Submit a pull request with your changes (or commit directly to `main` if you
|
|
|
|
|
have permission). Once the changes have been merged to main:
|
|
|
|
|
6. Tag a new release. You can do this either using [Git tag](https://git-scm.com/book/en/v2/Git-Basics-Tagging),
|
|
|
|
|
or directly on the [GitHub website](https://github.com/mozilla/protocol/releases/latest).
|
2023-05-11 20:59:00 +03:00
|
|
|
|
7. Run `npm run build-package && npm test` to run the build script and front-end tests. The package contents
|
2022-06-29 17:48:12 +03:00
|
|
|
|
will be located in `./package/`.
|
|
|
|
|
8. If the build is successful and all tests pass, publish to NPM using `npm publish ./package/`.
|
|
|
|
|
|
|
|
|
|
## Deployment
|
|
|
|
|
|
|
|
|
|
Note: the following instructions assume the Mozilla repository is the remote
|
|
|
|
|
called `origin`.
|
|
|
|
|
|
|
|
|
|
### Pushing to production
|
|
|
|
|
|
|
|
|
|
Each time an updated package is published to NPM, https://protocol.mozilla.org/
|
|
|
|
|
should also be updated so the documentation site matches the NPM package features.
|
|
|
|
|
|
|
|
|
|
1. Verify all is good on the [staging site](https://protocol-stage.moz.works/).
|
|
|
|
|
2. Make sure your local `main` branch is up to date.
|
|
|
|
|
3. Push the `main` branch to the `prod` branch: `git push origin main:prod`.
|
|
|
|
|
|
|
|
|
|
A notice will be posted in #www-notify on Slack when the push has completed.
|
2018-02-21 22:31:08 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
### Pushing to demo
|
2018-02-21 22:31:08 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
For previewing new components before they are merged to `main`, two demo instances
|
|
|
|
|
are available.
|
2018-02-21 22:31:08 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
1. Push your branch to the `demo1` or `demo2` branches e.g.
|
|
|
|
|
`git push -f origin my-branch-name:demo1`
|
|
|
|
|
2. Your branch will be published:
|
|
|
|
|
- https://demo1--mozilla-protocol.netlify.com/
|
|
|
|
|
- https://demo2--mozilla-protocol.netlify.com/
|
2018-02-21 22:31:08 +03:00
|
|
|
|
|
2022-06-29 17:48:12 +03:00
|
|
|
|
A notice will be posted in #www-notify on Slack when the push has completed.
|