Skip to content

Commit

Permalink
Autofixes issues using markdownlint-cli (microsoft#179)
Browse files Browse the repository at this point in the history
Set up a `.markdownlintrc` to ignore rule to avoid punctuation at end of headings.

Ran the following commands to generate these fixes:
```
npm i -g markdownlint-cli
markdownlint --fix *.md
markdownlint --fix **/*.md
markdownlint --fix **/**/*.md
```

The glob pattern in the markdownlint CLI didn't seem to work as expected, which is why I ran both `**` and **/**`.

Fixes microsoft#178
  • Loading branch information
rozele authored Mar 2, 2020
1 parent c45e3a4 commit 0e88932
Show file tree
Hide file tree
Showing 28 changed files with 112 additions and 85 deletions.
3 changes: 3 additions & 0 deletions .markdownlintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"no-trailing-punctuation": false
}
10 changes: 5 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

This project welcomes contributions and suggestions. Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.microsoft.com.
the rights to use your contribution. For details, visit <https://cla.microsoft.com>.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions
Expand All @@ -12,9 +12,9 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://ope
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [[email protected]](mailto:[email protected]) with any additional questions or comments.

#Adding a new section
# Adding a new section

##Structure/Pattern
## Structure/Pattern

Each section consist of the following parts

Expand Down Expand Up @@ -66,9 +66,9 @@ see the [LICENSE](LICENSE) file, and grant you a license to any code in the repo
Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation
may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries.
The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks.
Microsoft's general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653.
Microsoft's general trademark guidelines can be found at <http://go.microsoft.com/fwlink/?LinkID=254653>.

Privacy information can be found at https://privacy.microsoft.com/en-us/
Privacy information can be found at <https://privacy.microsoft.com/en-us/>

Microsoft and any contributors reserve all others rights, whether under their respective copyrights, patents,
or trademarks, whether by implication, estoppel or otherwise.
4 changes: 2 additions & 2 deletions CSE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ Our team, CSE (Commercial Software Engineering), works side by side with custome

We are very community focused in our work, with one foot in Microsoft and one foot in the open source communities that we help. We make pull requests on open source projects to add support for Microsoft platforms and/or improve existing implementations. We build frameworks and other tools to make it easier for developers to use Microsoft platforms. We source all the ideas for this work by maintaining very deep connections with these communities and the customers and partners that use them.

If you like variety, coding in many languages, using any available tech across our industry, digging in with our customers, hackfests, occasional travel, and telling the story of what you’ve done in [blog posts](https://www.microsoft.com/developerblog/) and at conferences, then come talk to us.
If you like variety, coding in many languages, using any available tech across our industry, digging in with our customers, hackfests, occasional travel, and telling the story of what you’ve done in [blog posts](https://www.microsoft.com/developerblog/) and at conferences, then come talk to us.

> You can checkout some of our work on our [Developer Blog](https://www.microsoft.com/developerblog/)
> You can checkout some of our work on our [Developer Blog](https://www.microsoft.com/developerblog/)
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,22 @@ An engineer working for a [CSE](./CSE.md) project...
This our playbook. All contributions welcome! Please feel free to submit a pull request to get involved.

## Why Have A Playbook

* To increase overall efficiency for team members and the whole team in general.
* Reduce the number of mistakes and avoid common pitfalls.
* Strive to be a better engineer and learn from other people's shared experience.

## "The" Checklist
If you do nothing else follow the [Tech Lead's Checklist](TECH-LEADS-CHECKLIST.md)! It's here to help follow the Engineering Fundamentals.

If you do nothing else follow the [Tech Lead's Checklist](TECH-LEADS-CHECKLIST.md)! It's here to help follow the Engineering Fundamentals.

## Structure of a Sprint
A [breakdown of sections](SPRINT-STRUCTURE.md) according to the structure of an Agile sprint.

A [breakdown of sections](SPRINT-STRUCTURE.md) according to the structure of an Agile sprint.

## General Guidance

* Keep the code quality bar high.
* Keep the code quality bar high.
* Value quality and precision over ‘getting things done’.
* Work diligently on the one important thing.
* As a distributed team take time to share context via wiki, teams and backlog items.
Expand All @@ -34,6 +37,7 @@ A [breakdown of sections](SPRINT-STRUCTURE.md) according to the structure of an
* We all own our code and each one of us has an obligation to make all parts of the solution great.

## QuickLinks

* [Tech Lead's Checklist](TECH-LEADS-CHECKLIST.md)
* [Structure of a Sprint](SPRINT-STRUCTURE.md)
* [Source Control](source-control/readme.md)
Expand All @@ -45,4 +49,5 @@ A [breakdown of sections](SPRINT-STRUCTURE.md) according to the structure of an
* [Engineering Feedback](engineering-feedback/readme.md)

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines.
4 changes: 2 additions & 2 deletions SPRINT-STRUCTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ This index structure is intended to accomplish the following goals

### A Week In The Life Of....

This layout structures the playbook content to make it easy day to day to find relevant resources during an Agile sprint.
This layout structures the playbook content to make it easy day to day to find relevant resources during an Agile sprint.

- Project Start
- [Team Agreements](team-agreements/readme.md)
Expand Down Expand Up @@ -45,7 +45,7 @@ This layout structures the playbook content to make it easy day to day to find r
- Load Testing
- [Feature Branching (creating branch for new story)](source-control/feature-branching/readme.md)
- Day 2
- [Source Control](source-control/readme.md)
- [Source Control](source-control/readme.md)
- Commit best practices
- [Git guide](source-control/git.md)
- [Continuous Integration](continuous-integration/readme.md)
Expand Down
1 change: 1 addition & 0 deletions TECH-LEADS-CHECKLIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ More details on [Code Reviews](code-reviews/readme.md)
More details on [Retrospectives](retrospectives/readme.md)

## Engineering Feedback

- [ ] Submit business and technical blockers that prevent project success
- [ ] Add suggestions for improvements to leveraged services and components
- [ ] Ensure feedback is detailed and repeatable
Expand Down
9 changes: 5 additions & 4 deletions backlog-management/grooming/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ Grooming can also be called "Backlog Refinement".

- Complete outline below
- Provide guidance on criteria to determine if story can be estimated (see [definition of ready](../team-agreements/definition-of-ready/readme.md**))
- Examples of well defined acceptance criteria
- Can the story be tested as written
- Is it dependent on other stories
- Examples of well defined acceptance criteria
- Can the story be tested as written
- Is it dependent on other stories
- Provide guidance on managing timeline for grooming
- time boxing story AC discussions
- Provide guidance on estimate negotiation and how to resolve conflicts
Expand All @@ -35,4 +35,5 @@ How might one measure the impact of this ceremony positive or negative?
How might one go about running the ceremony? Is there a general pattern that the ceremony should follow?

## Useful Links
* Always try and delivery in [Minimal Slices](../minimal-slices.md)

* Always try and delivery in [Minimal Slices](../minimal-slices.md)
3 changes: 3 additions & 0 deletions backlog-management/minimal-slices.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
# Deliver using Minimal Valuable Slices

## Always deliver your work (for example a new feature) using minimal valuable slices (chunks):

* Split your work item on smaller chunks which could be contributed incrementally (from
basic/minimal functionality to complete solution)
* Contribute your chunks frequently

Another words try to follow iterative approach when doing your work and frequently provide updates/changes to the team. This way you will get instant feedback, all issues could be discovered earlier and you will be sure that you are moving in the right direction (from both technical and functional sides).

With that said

* Do NOT work independently on your task without any updates from your side.
* Commit more often

Expand All @@ -18,6 +20,7 @@ After six weeks of work you created PR with all required functionality, includin

Good approach:
You divided your feature into smaller User Stories (which in turn will be divided into multiple tasks later) and started working on them one by one, for example:

1. As a user I could successfully build UWP apps using current service
2. As a user I can see telemetry when building the apps
3. As a user I have the ability to select build configuration (debug, release)
Expand Down
3 changes: 2 additions & 1 deletion continuous-deployment/readme.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Continuous Deployment
# Continuous Deployment

Please see [CI/CD](../continuous-integration/CICD.md) while this page is awaiting contributions.

## Sections within Continuous Deployment

* [Secrets Management](secrets-management/readme.md)
33 changes: 15 additions & 18 deletions continuous-deployment/secrets-management/readme.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
## Secrets Management

Secrets Management refers to the way in which we protect configuration settings and other sensitive data which, if
made public, would allow unauthorized access to resources. Examples of secrets are usernames, passwords, api keys, SAS
Secrets Management refers to the way in which we protect configuration settings and other sensitive data which, if
made public, would allow unauthorized access to resources. Examples of secrets are usernames, passwords, api keys, SAS
tokens etc.

We should assume any repo we work on may be made public at any time and follow the appropriate procedures, even if
We should assume any repo we work on may be made public at any time and follow the appropriate procedures, even if
the repo is initially private.

### General Approach

The general approach is to keep secrets in a separate configuration file during development which is never checked in
The general approach is to keep secrets in a separate configuration file during development which is never checked in
to the repo. Best practice would be to add this file name to the [.gitignore](https://git-scm.com/docs/gitignore) to prevent it being accidentally checked in.
Each developer may maintain their own version of the file or, if required, it may be circulated via private channels e.g. a Teams chat.

Expand All @@ -25,29 +25,27 @@ It should be obvious, but all the care taken to protect secrets is all for nothi

### Enhanced-Security Applications

The techniques outlined below provide 'good' security and a common pattern for a wide range of languages. They rely on
The techniques outlined below provide 'good' security and a common pattern for a wide range of languages. They rely on
the fact that Azure keeps application settings (the environment) encrypted until just before your app is run. Encryption keys are regularly rotated. They do *not* prevent secrets from existing in plaintext in memory at runtime. Particularly in garbage collected languages those values may exist for longer than the lifetime of the variable.

*If you are working on an application with enhanced security requirements you should consider using additional techniques to maintain encryption on secrets throughout the application lifetime.*


### Techniques for Secrets Management

Below we outline a number of techniques that we can use to make the loading of secrets transparent to the
Below we outline a number of techniques that we can use to make the loading of secrets transparent to the
developer.

#### C#/.NET

Use the 'file' attribute of the appSettings element to load secrets from a local file. A full description of this attribute can be found [here](https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/appsettings/appsettings-element-for-configuration).


``` XML
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings file="..\..\secrets.config">
...
</appSettings>
<startup>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
...
Expand All @@ -58,7 +56,7 @@ Secrets can then be accessed like so:

```C#

static void Main(string[] args)
static void Main(string[] args)
{
String mySecret = System.Configuration.ConfigurationManager.AppSettings["mySecret"];
}
Expand Down Expand Up @@ -93,7 +91,6 @@ $ cat secrets.json
}
```


```Python

import os
Expand Down Expand Up @@ -123,10 +120,10 @@ Settings file doesn't *have* to be JSON. You might prefer yaml, key=value etc
#### Databricks

Databricks has the option of using dbutils as a secure way to retrieve credentials and not reveal them within the notebooks running on Databricks
The following steps lay out a clear pathway to creating new secrets and then utilizing them within a notebook on Databricks:
1) Install and configure the Databricks CLI on your local machine following the instructions from here: https://docs.databricks.com/user-guide/dev-tools/databricks-cli.html#set-up-the-cli [Follow the Setup the CLI section only]
2) Get the Databricks personal access token following instructions here: https://docs.databricks.com/api/latest/authentication.html#token-management
3) Create a scope for the secrets by following the instructions on https://docs.azuredatabricks.net/user-guide/secrets/secret-scopes.html#create-a-databricks-backed-secret-scope [Follow the Create a Databricks backed Secret Scope section only]
4) Create secrets by following the steps listed here: https://docs.azuredatabricks.net/user-guide/secrets/secrets.html

The following steps lay out a clear pathway to creating new secrets and then utilizing them within a notebook on Databricks:

1) Install and configure the Databricks CLI on your local machine following the instructions from here: <https://docs.databricks.com/user-guide/dev-tools/databricks-cli.html#set-up-the-cli> [Follow the Setup the CLI section only]
2) Get the Databricks personal access token following instructions here: <https://docs.databricks.com/api/latest/authentication.html#token-management>
3) Create a scope for the secrets by following the instructions on <https://docs.azuredatabricks.net/user-guide/secrets/secret-scopes.html#create-a-databricks-backed-secret-scope> [Follow the Create a Databricks backed Secret Scope section only]
4) Create secrets by following the steps listed here: <https://docs.azuredatabricks.net/user-guide/secrets/secrets.html>
4 changes: 2 additions & 2 deletions continuous-integration/CICD.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Our tooling at Microsoft has made setting up integration and delivery systems li

**Jenkins**

Jenkins is one of the most commonly used tools across the open source community. It is well-known with hundreds of plugins for every build requirement.
Jenkins is one of the most commonly used tools across the open source community. It is well-known with hundreds of plugins for every build requirement.
Jenkins is free but requires a dedicated server.
You can easily create a Jenkins VM using this [template](https://ms.portal.azure.com/#create/azure-oss.jenkinsjenkins)

Expand All @@ -39,4 +39,4 @@ CircleCI also allows workflows, parallelism and splitting your tests across any

**AppVeyor**

AppVeyor is another free CI service for open source projects which also supports Windows-based builds.
AppVeyor is another free CI service for open source projects which also supports Windows-based builds.
1 change: 1 addition & 0 deletions continuous-integration/credential-scanning/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ Having credentials included in a project's source code not only exposes the proj
Ideally, credential scanning should be run as part of a developer's workflow (e.g. via a [git pre-commit hook](https://githooks.com)), however, to protect against developer error, credential scanning must also be enforced as part of the continuous integration process to ensure that no credentials ever get merged to a project's master branch.

To implement credential scanning for a project, consider building on-top of one of the following recipes:

- [detect-secrets](./recipes/detect-secrets.md)
2 changes: 1 addition & 1 deletion continuous-integration/readme.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Continuous Integration

Please see [CI/CD](CICD.md) while this page is awaiting contributions.
Please see [CI/CD](CICD.md) while this page is awaiting contributions.
4 changes: 1 addition & 3 deletions engineering-feedback/feedback-guidance.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Describe the impact to the customer and engagement that this feedback implies.

Provide a timeframe that this feedback item needs to be resolved within (if relevant).

## Repro Steps
## Repro Steps

The repro steps are important since they help confirm and replay the issue, and are essential in demonstrating success once there is a resolution.

Expand All @@ -59,7 +59,6 @@ Provide a clear set of all conditions and pre-requisites required before followi
- Services (eg. Azure Key Vault, Azure Monitor)
- Networking (eg. VNET with subnet)


### Steps

Provide a clear set of repeatable steps that will allow for this feedback to be reproduced. This can take the form of:
Expand All @@ -83,4 +82,3 @@ Describe what you expected to happen. What was the outcome that was expected?
### Describe the steps you took

Provide a clear description of the steps taken and the outcome/description at each point.

11 changes: 6 additions & 5 deletions observability/correlation-id.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

## The Need

In a distributed system architecture (microservice architecture), it is highly difficult to understand a single end to end customer transaction flow through the various components.
In a distributed system architecture (microservice architecture), it is highly difficult to understand a single end to end customer transaction flow through the various components.

Here are some the general challenges -

* It becomes challenging to understand the end-to-end behavior of a client request entering the application.
* Aggregation: Consolidating logs from multiple components and making sense out of these logs is difficult, if not impossible.
* Cyclic dependencies on services, course of events and asynchronous requests are not easily deciphered.
* Aggregation: Consolidating logs from multiple components and making sense out of these logs is difficult, if not impossible.
* Cyclic dependencies on services, course of events and asynchronous requests are not easily deciphered.
* While troubleshooting a request, the diagnostic context of the logs are very important to get to the root of the problem.

## Solution
Expand All @@ -18,13 +19,13 @@ A Correlation ID is a unique identifier that is added to the very first interact
### Recommended Practices

1. Assign each external request a Correlation ID that binds the message to a transaction.
1. Assign each external request a Correlation ID that binds the message to a transaction.
2. The Correlation ID for a transaction must be assigned as early as you can.
3. Propagate Correlation ID to all downstream components/services.
4. All components/services of the transaction use this Correlation ID in their logs.
5. For a HTTP Request, Correlation ID is typically passed in the header.
6. Where possible also add it to an outgoing response.
7. Based on the usecase, there can be additional correlation IDs that may be needed. For instance, tracking logs based on both Session ID and User ID may be required. While adding multiple correlation ID, remember to propagate them through the components.
7. Based on the usecase, there can be additional correlation IDs that may be needed. For instance, tracking logs based on both Session ID and User ID may be required. While adding multiple correlation ID, remember to propagate them through the components.

## Use Cases

Expand Down
Loading

0 comments on commit 0e88932

Please sign in to comment.