From 7f9b65f8dbb8d95c85ec65005b39a5b404361a12 Mon Sep 17 00:00:00 2001 From: Tim R Date: Fri, 19 Jan 2024 16:54:42 -0600 Subject: [PATCH 1/9] Initial updates --- README.md | 48 ++------------------------------- documentation/README.md | 1 + documentation/contributing.md | 2 ++ documentation/overview.md | 51 +++++++++++++++++++++++++++++++++++ documentation/versioning.md | 42 +++++++++++++++++++++++++++++ 5 files changed, 98 insertions(+), 46 deletions(-) create mode 100644 documentation/README.md create mode 100644 documentation/contributing.md create mode 100644 documentation/overview.md create mode 100644 documentation/versioning.md diff --git a/README.md b/README.md index 6afaae13..ebc384a0 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,3 @@ -# VA Mobile Temporary +# VA Mobile Libraries -[Read documentation](https://department-of-veterans-affairs.github.io/va-mobile-app/design/Intro) - - -## Versioning Policy -The VA Mobile Libraries use [semantic versioning](https://semver.org/) at a per package level. - ---- -**Guidance in this section to be retired at version 1.0.0** - -Despite technically being in production, the design system is still in early, rapidly iterative phases. With only the VA Health & Benefits app leveraging and close team contact, through at least Q1 2024 we plan to use a pre-launch versioning (major version 0) as follows: -- Version 0.1.0 will be a level set of the package highlighting it's in a workable state with baseline functionality that has been proven consumable by an outside project - - For components: Segmented Control ready to use - - For tokens: Baseline set of color tokens available - - For other packages: When the package has a core piece of functionality and is stably leveraged by an outside project -- Any/all breaking changes will be minor version increments with tickets created for the VA Flagship Mobile Team providing specific guidance of necessary adjustments -- Aside from breaking changes, semver is updated according to long term guidance below - -This policy will allow flexibility around anticipated growing pains that may entail more frequent breaking changes than more mature design systems. Once initial adoption challenges have been addressed and the packages have reached a degree of maturity in terms of content, version 1.0.0 will be published and follow the guidelines established below. - ---- - -The guidance around versioning for the VA Mobile Libraries shall be as follows: -- Major - - Breaking changes, large or small, that *may* require app-level changes to upgrade; examples: - - Non-backwards compatible update to an existing component property; e.g. renaming or restructuring how data is passed - - Removal of deprecated token(s)/component(s)/etc. - - Underlying dependency update introducing incompatibility; e.g. new version of `react-native` that breaks compatibility to app-level version - - In exceptional cases, may be incremented for a very significant package enhancement or totality of modest ones that comprise a bonafide "release" even without breaking changes - - Minor - - Substantive functionality enhancements that are fully backward compatible, examples: - - New token(s)/component(s)/etc. - - Enhancing a component with a new variant - - Patch - - Minor functionality enhancements that are fully backward compatible, examples: - - Adding a new property of minor impact - - Updating an existing component property with new values that have a minor impact - - Fixing internal bugs - - Alpha - - Internal design system team testing build denoted by a `-alpha.#` appended to the semver - - Should not be used in production - - Beta - - External team testing build denoted by a `-beta.#` appended to the semver - - Should not be used in production outside exceptional circumstances - -The Figma Design Library will also follow this versioning guidance except only reflecting major/minor levels. Patch changes are likely to result in no visual changes or the design was correct while minor technical tweaks were made. +See the [Design System section of the VA Mobile documentation site](https://department-of-veterans-affairs.github.io/va-mobile-app/design/Intro) for the most organized form of the documentation. The [engineering documentation](https://department-of-veterans-affairs.github.io/va-mobile-app/design/For%20engineers/overview) there also exists in this repo either in the `documentation` folder or as `README`'s tied to particular packages. diff --git a/documentation/README.md b/documentation/README.md new file mode 100644 index 00000000..78aec299 --- /dev/null +++ b/documentation/README.md @@ -0,0 +1 @@ +A folder for general design system documentation not specifically tied to a package. \ No newline at end of file diff --git a/documentation/contributing.md b/documentation/contributing.md new file mode 100644 index 00000000..68286449 --- /dev/null +++ b/documentation/contributing.md @@ -0,0 +1,2 @@ +# Contributing Code + diff --git a/documentation/overview.md b/documentation/overview.md new file mode 100644 index 00000000..5a1fd2d1 --- /dev/null +++ b/documentation/overview.md @@ -0,0 +1,51 @@ +# For engineers + +## Overview + +Welcome to the engineering section of the VA Mobile Design System documentation! + +First things first: from an engineering perspective, what is the design system? + +Fundamentally, the design system is a collection of NPM packages that can be added to a project like any other. These packages are created to support making native mobile apps that adhere to VA design principles, provide an accessible user experience, and streamline app development by providing UI building blocks to maximize time for delivering features. + +Currently and on the roadmap for foreseeable future, the mobile design system components rely on React Native--the most popular mobile framework for complex, multiplatform native mobile apps. + +The VA Mobile Design System is in early stages and far from maturity; as such, feedback on experience using the packages and this documentation is very welcomed to continually improve the experience! The ideal avenue for feedback is our [DSVA Slack channel](https://dsva.slack.com/archives/C05HF9ULKJ4) (#va-mobile-app-shared-systems). + +Lastly, the [va-mobile-library repo](https://github.com/department-of-veterans-affairs/va-mobile-library) houses the VA Mobile Design System codebase and [our Storybook](https://department-of-veterans-affairs.github.io/va-mobile-library/) demonstrates them functionally. + +### Packages + +So, what is currently being offered? + +Our packages: +- assets + - Package containing static assets (e.g. fonts, SVG icons) for VA mobile apps + - Peer dependency (required) to components for appropriate function + - [Documentation](https://department-of-veterans-affairs.github.io/va-mobile-app/design/For%20engineers/assets) + - [NPM](https://www.npmjs.com/package/@department-of-veterans-affairs/mobile-assets) + - [Code](https://github.com/department-of-veterans-affairs/va-mobile-library/tree/main/packages/assets) +- components + - Package containing the components of the design system + - [Documentation](https://department-of-veterans-affairs.github.io/va-mobile-app/design/For%20engineers/components) + - [NPM](https://www.npmjs.com/package/@department-of-veterans-affairs/mobile-component-library) + - [Code](https://github.com/department-of-veterans-affairs/va-mobile-library/tree/main/packages/components) +- linting + - Package containing an eslint plugin to issue deprecation notices as part of linting + - [Documentation](https://department-of-veterans-affairs.github.io/va-mobile-app/design/For%20engineers/linting) + - [NPM](https://www.npmjs.com/package/@department-of-veterans-affairs/eslint-config-mobile) + - [Code](https://github.com/department-of-veterans-affairs/va-mobile-library/tree/main/packages/linting) +- tokens + - Package containing atomic, tokenized building blocks used for components so any app can build screens or custom components adhering to the same underlying styling fundamentals + - [Documentation](https://department-of-veterans-affairs.github.io/va-mobile-app/design/For%20engineers/tokens) + - [NPM](https://www.npmjs.com/package/@department-of-veterans-affairs/mobile-tokens) + - [Code](https://github.com/department-of-veterans-affairs/va-mobile-library/tree/main/packages/tokens) + +Each package's documentation page contains more specialized guidance both for users of the package as well as documentation for getting set up locally for contributing. + +All packages use [ISC licenses](https://en.wikipedia.org/wiki/ISC_license): +> Copyright 2023 Department of Veterans Affairs +> +> Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/documentation/versioning.md b/documentation/versioning.md new file mode 100644 index 00000000..e5003994 --- /dev/null +++ b/documentation/versioning.md @@ -0,0 +1,42 @@ +# Versioning Policy +The VA Mobile Libraries use [semantic versioning](https://semver.org/) at a per package level. + +--- +**Guidance in this section to be retired at version 1.0.0** + +Despite technically being in production, the design system is still in early, rapidly iterative phases. With only the VA Health & Benefits app leveraging and close team contact, through at least Q1 2024 we plan to use a pre-launch versioning (major version 0) as follows: +- Version 0.1.0 will be a level set of the package highlighting it's in a workable state with baseline functionality that has been proven consumable by an outside project + - For components: Segmented Control ready to use + - For tokens: Baseline set of color tokens available + - For other packages: When the package has a core piece of functionality and is stably leveraged by an outside project +- Any/all breaking changes will be minor version increments with tickets created for the VA Flagship Mobile Team providing specific guidance of necessary adjustments +- Aside from breaking changes, semver is updated according to long term guidance below + +This policy will allow flexibility around anticipated growing pains that may entail more frequent breaking changes than more mature design systems. Once initial adoption challenges have been addressed and the packages have reached a degree of maturity in terms of content, version 1.0.0 will be published and follow the guidelines established below. + +--- + +The guidance around versioning for the VA Mobile Libraries shall be as follows: +- Major + - Breaking changes, large or small, that *may* require app-level changes to upgrade; examples: + - Non-backwards compatible update to an existing component property; e.g. renaming or restructuring how data is passed + - Removal of deprecated token(s)/component(s)/etc. + - Underlying dependency update introducing incompatibility; e.g. new version of `react-native` that breaks compatibility to app-level version + - In exceptional cases, may be incremented for a very significant package enhancement or totality of modest ones that comprise a bonafide "release" even without breaking changes + - Minor + - Substantive functionality enhancements that are fully backward compatible, examples: + - New token(s)/component(s)/etc. + - Enhancing a component with a new variant + - Patch + - Minor functionality enhancements that are fully backward compatible, examples: + - Adding a new property of minor impact + - Updating an existing component property with new values that have a minor impact + - Fixing internal bugs + - Beta + - External team testing build denoted by a `-beta.#` appended to the semver + - Should not be used in production outside exceptional circumstances + - Alpha + - Internal design system team testing build denoted by a `-alpha.#` appended to the semver + - Should not be used in production + +The Figma Design Library will also follow this versioning guidance except only reflecting major/minor levels. Patch changes are likely to result in no visual changes or the design was correct while minor technical tweaks were made. From 9c28b625ac593694bc485a7b656484e41da41edf Mon Sep 17 00:00:00 2001 From: Tim R Date: Mon, 22 Jan 2024 13:04:12 -0600 Subject: [PATCH 2/9] Contributing/testing doc --- documentation/contributing.md | 21 +++++++++++++++++++++ documentation/testing.md | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 documentation/testing.md diff --git a/documentation/contributing.md b/documentation/contributing.md index 68286449..5d02e296 100644 --- a/documentation/contributing.md +++ b/documentation/contributing.md @@ -1,2 +1,23 @@ # Contributing Code +If your contribution entails adding an entirely new component or significant enhancement of an existing component, [please see the general guidance to contributing](https://department-of-veterans-affairs.github.io/va-mobile-app/design/About/Contributing%20to%20the%20design%20system/contributing-to-the-design-system). Given larger enhancements will entail designer input throughout the process, discussions will precede any need for code contributions which will be able to clarify expectations. + +If you are looking to contribute a bugfix or minor change you don't believe needs that process: +1. [Search our outstanding issues](https://github.com/department-of-veterans-affairs/va-mobile-library/issues) to determine if it's already on our radar or a new ticket needs to be created +2. Notify us in [our DSVA slack channel](https://dsva.slack.com/archives/C05HF9ULKJ4) to: + - Determine if we have a timeline to prioritize if a ticket already exists + - Open a conversation around your intent to contribute a small change +3. If the Slack conversation gives the go ahead to move forward, either assign yourself to the existing ticket or create the new ticket and assign it to yourself +4. If appropriate, update the Slack thread with the newly created ticket +5. Move ticket to in progress +6. See individual package documentation for how to get it running locally to code/test your changes + +Factors to keep in mind during coding for a smooth PR: +- Look over [our PR template](https://github.com/department-of-veterans-affairs/va-mobile-library/blob/main/.github/pull_request_template.md?plain=1) for awareness of write-up expectations +- Observe existing code structure and aim to minimize complexity and maintain consistency unless you feel it could be meaningfully improved--if so, consider using Slack to discuss more robust code restructure changes prior to making them +- If appropriate: + - Update/add unit tests + - Update/add code documentation + - Update/add storybook stories + - Create alpha testing package build(s) to test within your app it behaves as expected with your changes + - Note: alpha builds should never be used in production, if it is time critical it should be a beta build and be a very temporary fix until a proper version can be published \ No newline at end of file diff --git a/documentation/testing.md b/documentation/testing.md new file mode 100644 index 00000000..7e881382 --- /dev/null +++ b/documentation/testing.md @@ -0,0 +1,32 @@ +# Testing + +## Testing component package integrations + +Before a new component, or new version of an old component, is released it should be tested inside an example environment that it will be consuming. For this purpose we can use the [VA Flagship app](https://github.com/department-of-veterans-affairs/va-mobile-app). We can do this both with automation and manual testing. + +### Automatically + +We will have automated checks run on the components where we can. For our main client, the VA Flagship app we currently have [a Github actions workflow](https://github.com/department-of-veterans-affairs/va-mobile-library/blob/main/.github/workflows/check-component-integrations.yml) that will run each time a pull request is merged into the `main` branch. This automated workflow will simulate the VA Flagship app using the latest component package and run any associated tests to ensure no unintentional breakage happens. The workflow can also be run manually from the [Check Component Integrations action](https://github.com/department-of-veterans-affairs/va-mobile-library/actions/workflows/check-component-integrations.yml). + +As more clients are added to the system, more tests will be added to the workflow. The tests themselves are managed by the client team and any app included (at this time) needs to be in a publicly accessible repository. + +Automated tests will be able to check each instance of the component, so it is also important to manually test component integrations where appropriate. + +### Manually + +The preferred method for manual testing is [to create an alpha build via the NPM publish workflow](https://github.com/department-of-veterans-affairs/va-mobile-library/actions/workflows/publish.yml) of the package from your branch and then update your project locally to leverage that alpha build to test. Note: alpha builds should never be used in production. + +There are a couple additional methods to manually check if a component works inside an app environment, but neither works as well as the preferred method and may not behave the same as a published package (e.g. changes may work using these methods that would _not_ work in a published NPM package): +
+Alternate Method 1 +The first option is to manually install the local component into the app you're testing in by running: `yarn add file:../../va-mobile-library/packages/components` (assumes va-mobile-app and va-mobile-library are siblings, if they are not, change the path). This method points directly to the component file you're testing. The downside here is that your watch command may not work, so you'll need to rebuild the app to see changes (or update the watch configuration). + +
+ +
+Alternate Method 2 +The second is to use [local dependency linking through yarn commands](https://classic.yarnpkg.com/lang/en/docs/cli/link/). This creates a symlink to the local component from the app. There are some [Metro config changes that need to happen for this to work](https://github.com/facebook/metro/issues/1) and support is a little iffy at the moment, but it's certainly an option, although not highly recommended at this point. + +
+ +With all methods above, you can validate things have installed correctly looking up the `@department-of-veterans-affairs/mobile-component-library` folder within your package folder (e.g. `node_modules`). You can then run all app-level tests on it (manual app use, unit, compiling, e2e). The level of testing needed will be defined by the size of the update that is being made. From ce452433b48f157b9506d126416d6d70ac5abc28 Mon Sep 17 00:00:00 2001 From: Tim R Date: Mon, 22 Jan 2024 13:08:31 -0600 Subject: [PATCH 3/9] Fixing hyperlinks within HTML needing to be HTML --- documentation/testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/testing.md b/documentation/testing.md index 7e881382..3092c9e6 100644 --- a/documentation/testing.md +++ b/documentation/testing.md @@ -25,7 +25,7 @@ The first option is to manually install the local component into the app you're
Alternate Method 2 -The second is to use [local dependency linking through yarn commands](https://classic.yarnpkg.com/lang/en/docs/cli/link/). This creates a symlink to the local component from the app. There are some [Metro config changes that need to happen for this to work](https://github.com/facebook/metro/issues/1) and support is a little iffy at the moment, but it's certainly an option, although not highly recommended at this point. +The second is to use local dependency linking through yarn commands. This creates a symlink to the local component from the app. There are some Metro config changes that need to happen for this to work and support is a little iffy at the moment, but it's certainly an option, although not highly recommended at this point.
From 98b415bec494eea4412141757491943f897c87a9 Mon Sep 17 00:00:00 2001 From: Tim R Date: Tue, 23 Jan 2024 12:57:15 -0600 Subject: [PATCH 4/9] More doc --- documentation/testing.md | 2 +- packages/assets/README.md | 16 ++++++++++++++-- packages/components/README.md | 21 +++++++++++++++++++-- packages/linting/README.md | 19 +++++++++++++++++-- packages/tokens/README.md | 2 +- 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/documentation/testing.md b/documentation/testing.md index 3092c9e6..df3fe1b8 100644 --- a/documentation/testing.md +++ b/documentation/testing.md @@ -29,4 +29,4 @@ The second is to use