Skip to content

Latest commit

 

History

History
103 lines (67 loc) · 5.5 KB

CONTRIBUTING.md

File metadata and controls

103 lines (67 loc) · 5.5 KB

How to Contribute

Contributor License Agreement

Contributions to this project must be accompanied by a Contributor License Agreement (CLA). You (or your employer) retain the copyright to your contribution; this simply gives us permission to use and redistribute your contributions as part of the project. Head over to https://cla.developers.google.com/ to see your current agreements on file or to sign a new one.

You generally only need to submit a CLA once, so if you've already submitted one (even if it was for a different project), you probably don't need to do it again.

Community Guidelines

This project follows Google's Open Source Community Guidelines as well as the included Code of Conduct.

Proposing Changes

We represent business requirements as "User Journeys". Each user journey may represent a new use case for the application, an operational requirement for the architecture, or a demo requirement for how this application is used as a learning resource.

Journeys should be created via the User Journey Proposal template.

For more incremental changes, please open a feature request. Referencing an existing User Journey is helpful in considering how it fits project scope.

The first implementation step for any API change is to send PR to modify the OpenAPI description.

Code Reviews

All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult GitHub Help for more information on using pull requests.

We recommend making suggestions to a Pull Request to collaboratively fix problems.

Set Up Emblem

There are two ways you can setup your Emblem instance:

Running Tests

See Testing Emblem for detailed testing instructions.

Decision Records for Significant Changes

Significant changes to the architecture, developer experience, or dependencies involve making critical decisions about future design needs.

As the project evolves, we want to capture the context of these key decisions to facilitate future engineering. Please add a decision record to your pull request.

Automate Toil

If you plan to automate codebase quality checks, consider using googleapis/code-suggester to suggest changes. Minimizing developer follow-up action is helpful!

If no Google Cloud resources are needed, use GitHub Actions to drive automation. Otherwise use Cloud Build (decision).

Infrastructure (including test fixtures) should be managed automatically. This should be by Terraform where possible, and by custom scripts where necessary. (decision) However, some cases exist where resources cannot be managed automatically. In those cases, Emblem allows for manual resource management. (decision)

Automated Testing & Productivity

The following automated checks are run against every Pull Request:

  • cla/google: Ensure Google's Contributor License Agreement has been met for the proposed change.
  • header-check: Ensure all applicable files have copyright headers.
  • style-terraform: Runs terraform fmt on all Terraform configuration.
  • style-python: Runs black on all python code.
  • block-merge: Blocks merging PRs that have the do not merge label, or a label containing the word "needs".
  • auto-label: Adds PR labels based on PR title and changed files

Design & Project Philosophy

Positive & Helpful in Feedback

Whether it's a code review, a static analysis outcome, or an error message in the app, our goal is to enable contributor and user success.

  • Warnings & errors should provide context, suggest next steps, and provide direct access to more details. (For example, link to build logs.)
  • When a warning or error has a generally agreed fix or next step, point the way or suggest the fix. (For example, linting checks on a PR should propose the fixes to correct the code formatting.)

Enable Trunk-Based Development with Experiments

Emblem operates using a Trunk-Based Development model.

Larger-scale changes to Emblem should be prototyped in the /experimental folder.

They can then be merged into the main branch in a single pass.