Skip to content
This repository has been archived by the owner on Nov 14, 2024. It is now read-only.

Commit

Permalink
Contrib up 2 (#273)
Browse files Browse the repository at this point in the history
* add next meeting calculator

* choosing an issue section

* add some PR guidelines

* add PR template

* add PR template 2

* add PR template 3
  • Loading branch information
pirog authored Apr 4, 2024
1 parent 1915089 commit 2afb689
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 85 deletions.
23 changes: 23 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
### Bare minimum self-checks

> [What do you think of a person who only does the bare minimum?](https://getyarn.io/yarn-clip/dcf80710-425e-478b-bde1-c107bd11e849)
- [ ] I've updated this PR with the latest code from `main`
- [ ] I've done a cursory QA pass of my code locally
- [ ] I've ensured all automated status check and tests pass
- [ ] I've [connected this PR to an issue](https://help.zenhub.com/support/solutions/articles/43000010350-connecting-pull-requests-to-github-issues)

### Pieces of flare

- [ ] I've written a unit or functional test for my code
- [ ] I've updated relevant documentation it my code changes it
- [ ] I've updated this repo's README if my code changes it
- [ ] I've updated this repo's CHANGELOG with my change unless its a trivial change (like updating a typo in the docs)

### Finally

- [ ] I've [requested a review](https://help.github.com/en/articles/requesting-a-pull-request-review) with relevant people

If you have any issues or need help please join the `#contributors` channel in the [Lando slack](https://www.launchpass.com/devwithlando) and someone will gladly help you out!

You can also check out the [coder guide](https://docs.lando.dev/contrib/coder.html).
23 changes: 5 additions & 18 deletions .vitepress/config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ export default defineConfig({
{text: 'How does it work?', link: '/getting-started/what-it-do'},
{text: 'Starting your first app', link: '/getting-started/first-app'},
{text: 'Requirements', link: '/getting-started/requirements'},
{text: 'Lando 101', link: '/lando-101'},
],
},
{
Expand All @@ -103,35 +104,21 @@ export default defineConfig({
{text: 'Slack', link: 'https://www.launchpass.com/devwithlando'},
{text: 'Contact Us', link: '/support'},
{text: 'Troubleshooting', link: '/troubleshooting'},
{text: 'Guides', link: '/guides'},
{text: 'Examples', link: 'https://github.com/lando/core/tree/main/examples'},
],
},
{
text: 'Contributing',
collapsed: true,
collapsed: false,
items: [
{text: 'Getting Involved', link: '/contrib/index'},
{text: 'Coding', link: '/contrib/coder'},
{text: 'Evangelizing', link: '/contrib/evangelist'},
{text: 'Sponsoring', link: '/contrib/sponsoring'},
{text: 'Security', link: '/security'},
{text: 'Team', link: '/team'},
],
},
{
collapsed: false,
items: [
{
text: 'Lando 101',
link: '/lando-101',
},
{
text: 'Guides',
link: '/guides',
},
{
text: 'Examples',
link: 'https://github.com/lando/core/tree/main/examples',
},

],
},
{
Expand Down
81 changes: 21 additions & 60 deletions contrib/coder.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,88 +4,49 @@ description: Learn about how to get started contributing code to Lando.

# Coding

This section is designed for people who want to contribute `code things` to Lando. Specifically, that might mean working on some of the following:

* Lando itself and its plugins
* Lando's DevOps pipeline e.g. build, test and deploy
* Lando's tests and testing infrastructure
* Lando's documentation and Vuepress documentation site
* Lando's express API
* Lando's marketing website
* Lando's metrics server
* Lando's Vuepress marketing site
* Lando's Vuepress events listing
* Lando's Vuepress blog
This section is designed for people who want to contribute `code things` to Lando. Specifically, that means [opening a pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) against one of the many [Lando respositories](https://github.com/orgs/lando/repositories).

[[toc]]

## Choosing a project

Lando has a distributed model and is powered by over [50 repos](https://github.com/lando) so the first step is to find a repo you are interested in and check out the contribution guidelines there.
Lando has a distributed model and is powered by over [80 repos](https://github.com/lando) so the first step is to find a repo you are interested in and check out the contribution guidelines there.

## Good First Issues

Once you are set up and ready to contribute, a good place to start is with issues tagged as [good first issue](https://github.com/lando/lando/issues). Peruse the list and see if one or more of those issues is a good fit for you.

If you are having issues with any of the above or need some guidance from one of our guide pros, make sure you [join our Slack org](https://www.launchpass.com/devwithlando) and check out the **#community** and/or **#contributors** channels.

## Triaging issues
## Making your first pull request

Welcome intrepid Lando contributor! Thank you for joining the alliance and jumping on the front lines to triage issues!
1. [Create a fork of the repo you are working on](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo).
2. [Follow the GitHub flow](https://docs.github.com/en/get-started/using-github/github-flow).
3. Make sure you complete any requested/applicable tasks in the PR template.
4. Make sure all status checks and tests pass.
5. Ping the `#contributors` channel in Slack for any needed [PR review](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews) or any other help you may need advancing your PR.
6. When all checks, tests and reviews are in the green ping a `maintainer` and/or apply the <Badge type="flag">flag</Badge> label.

Issue triage is incredibly important to the project. Good handling of issue reports from our users leads to folks sticking around and getting all the benefits that Lando has to offer, becoming contributors themselves, and improving the overall health and sustainability of the project.
**If you have any trouble, need clarification, guidance, help, etc jump into the `#contributors` channel in Slack and another contributor will gladly help you out!**

When a user files an issue, they're probably either filled with hope and energy about improving the project, or frustration caused by their expectations not lining up with their experience. Both of these energies are valuable when channeled correctly, and damaging when mismanaged.
After we merge a few pull requests we may grant you `write` access to the repository which will allow you to open branches against the repo directly instead of using your fork.

Behind every issue is a person taking the time to fill out the report when they could have simply remained silent. They could have left their good ideas on the shelf, thrown Lando in the trash, or needlessly struggled in silence.
## PR Conventions

With all this in mind, treat issue reporters with respect, assume good will, and ask for clarification when needed. The extra energy you put in here to show kindness and compassion can be the difference between steering the project towards growth and sustainability or stagnation and burnout.
We are pretty [wild west](https://www.youtube.com/watch?v=_zXKtfKnfT8) on accepting PRs but here are some good conventions that we def recommend:

Now that you're equipped with the laser sword of empathy and the armor of respect, this is the standard procedure you should go through to triage an issue.
* Create branches named something like `ISSUE-NUMBER-BRIEF-DESCRIPTION` for example `35-ssh-agent-feature`
* Create commit message named something like `#ISSUE-NUMBER: description` for example `#35: ensure socket is owned by you`
* [Associate your issue or issues with the PR](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)

### Requirements

1. A Github account
2. [Install Lando](/install) (So you can reproduce issues)

### Classify the Issue

The first step in triaging an issue is to decide if the issue is a _bug report_, _feature request_, _documentation request_, or a _guide request_.

Our issue templates will hopefully help to pre-categorize issues for us, but use your discretion to recategorize issues that may have come in under the wrong label. It's not uncommon for a user to assume that their issue is a bug when it is really a need to improve documentation, or even for a user to assume they've done something wrong when they've actually just discovered a bug for us!

Review the issue and recategorize as necessary.

### Bug Reports

If the user is reporting that something isn't working as documented, or something generally appears to be broken, it should be classified as a bug report.

The first thing you want to do is to check the report against our [bug reporting template](https://github.com/lando/lando/blob/main/.github/ISSUE_TEMPLATE/bug_report.md).

The most important thing we need for a good bug report are reliable steps to reproduce the issue. If the user has included steps to replicate, you should first try to replicate the bug.

If you do nothing else, this is the most valuable thing you can do for Lando maintainers. It can sometimes be time consuming, but making sure we can replicate a bug saves massive amounts of time for the intrepid developer who attempts to fix the bug. It helps us to write clear functional tests and spend less time fixing the bug.

Once steps to reproduce have been ironed out, the issue should be tagged as `triaged`.

If you can't reproduce the issue, tag it with `can not replicate` and let the user know that you are unable to replicate the issue. If you can think of additional information that might be helpful, request it in your comment. Non-reproducable issues will remain unscheduled until they are closed by a maintainer or stalebot.

### Feature Requests

If the user is asking for something that Lando currently doesn't do, this is a feature request. If the user wants Lando to add a new command to our API, a new service, recipe, tooling command, or support a new operating system we don't currently support, this is a feature request.

Refer to the [feature request template](https://github.com/lando/lando/blob/main/.github/ISSUE_TEMPLATE/feature_request.md) to see what kind of data we want from the user. If their report is missing one of these areas, it might be helpful to ask them questions about the areas that need clarification.

New feature requests will be regularly reviewed by the maintainers and scheduled, iceboxed, or closed as appropriate, as long as the request is something you can understand, it can be reviewed by a maintainer at a later date. If it seems unclear, it would be helpful to ask clarifying questions from the requester so that the issue is fully fleshed out when a maintainer is able to review it.

### Documentation Requests

Documentation requests should be tagged with `documentation` and checked against the [documentation issue template](https://github.com/lando/lando/blob/main/.github/ISSUE_TEMPLATE/documentation.md).

If a reference page isn't included, try to find the right page in the documentation that addresses the topic at hand and add a link to the page in the issue. If there is no suitable page, a new one will need to be created.
GitHub is able to do some magic with the above and provide better context around commits, issues, PRs and projects.

## Writing Plugins

::: danger PROBABLY BEST TO WAIT
We are in the process of documenting the Lando 4 API so if you want to write a **new** plugin we _highly recommend_ waiting for that. We've kept these docs mostly as a courtesy for older Lando 3 Plugin creators.
:::

Lando has an advanced plugin system that allows developers to add and extend Lando's core functionality. A few examples of things you can do with plugins are shown below:

1. Create tasks and CLI commands like `lando danceparty`
Expand Down
96 changes: 90 additions & 6 deletions contrib/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,17 @@ Help us run both the actual project and maintain the repos

## Getting Started

To get started you need to do _at least_ one of the below but we recommend you just do them all:
To get started you need to do _at least_ one of the below but we **HIGHLY RECOMMEND** you just do them all:

1. [Join the contributors mailing list](https://dev.us12.list-manage.com/subscribe?u=59874b4d6910fa65e724a4648&id=613837077f)
2. [Join the #contributors channel on Slack](#slack)
3. [Complete our contributor Google Form](https://docs.google.com/forms/d/1vdDhmHqg7lS540eCrMR4MQO6DT4nfAsl-z8JRcnnmSI)
4. [Come to your first contributor meeting](#meetings)
4. [Create, flag and/or assign some issues you are interested in](#choosing-an-issue)
5. [Come to your first contributor meeting](#meetings)

## Comms

These are
These are the channels we usually use for communication.

### GitHub

Expand Down Expand Up @@ -75,13 +76,35 @@ Join some channels and say hi!

X/Twitter is our primary outreach and social channel. If you are fearless, then [follow us](https://twitter.com/devwithlando) and get involved in the conversation!

## Choosing an Issue

If you don't already have a GitHub issue or two in mind you can go through them in a few different ways:

* [By maintainer projects](https://github.com/orgs/lando/projects)
* [By individual repo](https://github.com/orgs/lando/repositories)
* [By all issues in the org](https://github.com/issues?q=is%3Aopen+is%3Aissue+org%3Alando)

If you don't see one you can also [create your own](https://github.com/lando/lando/issues/new/choose). However once you have an issue or two in mind you will want to do possibly both of the below:

* **Label the issue with <Badge type="flag">flag</Badge>** - This will add it into the relevant contributor project board so a maintainer knows to discuss it in their next meeting.
* **Assign the issue to yourself** - If it's an issue you want to take on then [assign it](https://docs.github.com/en/issues/tracking-your-work-with-issues/assigning-issues-and-pull-requests-to-other-github-users) to yourself.

If you cannot label or assign an issue then we probably need to invite you to collaborate. To do that jump in the `#contributors` channel in Slack, post your issue and indicate you want to self-assign it and a maintainer will send you an invite.

Note that permissions are given on a per-repo basis so you'll need to do this once for every repo you want to work on.

## Meetings

We are currently meeting for three dedicated purposes: `Plugins`, `DevOps` and `Governance & Maintainership`, here are the next meetings:

* **Plugins** -
* **DevOps** -
* **Governance & Maintainership** -
<ul>
<li
v-for="meeting in getMeetings(meetings)"
:key="meeting.first"
>
<strong>{{ meeting.text }}</strong> - {{ meeting.nmPretty }}
</li>
</ul>
Make sure you [join the mailing list](https://dev.us12.list-manage.com/subscribe?u=59874b4d6910fa65e724a4648&id=613837077f) and/or [#contributors](#slack) channel in our Slack to get invited/access to the meetings.

Expand All @@ -90,3 +113,64 @@ Make sure you [join the mailing list](https://dev.us12.list-manage.com/subscribe
* [March 27, 2024 - Kickoff Meeting](./kickoff-meeting-3-27-2024.md)

We also put _all_ the raw data [over here](https://drive.google.com/drive/folders/1O9kO9or7vRRMUfb4L88K0yWTE6uZ5jwd) in Google Drive if you want to sift through things.

<script setup>

const now = Date.now();
const week = 604800000;
const delay = 7200000;

// meeting start dates in UTC ms timestamps
const meetings = [
{text: 'Plugins', first: 1712073600000, period: 2},
{text: 'DevOps', first: 1712678400000, period: 2},
{text: 'Governance & Maintainership'},
];

const getMeetings = (items = meetings) => {
return meetings
.map(item => {
item.nm = item.first ? new Date(nextMeeting(item.first, item.period)) : undefined;
item.nmPretty = item.nm ? prettyDate(item.nm) : 'TBD';
return item;
})
.sort((a, b) => {
if (!a.first) return 1;
else return b.first - a.first;
});
}

const nextMeeting = (first, period = 2) => {
// if first meeting is in the future then just return
if (now - first < 0) return first;
// otherwise give us the next meeting but give a delay of two hours
const multiplier = Math.ceil((((now - first) / (week * period)) - delay / (week * period)));
// return the next meeting
return first + (multiplier * period * week);
};

const prettyDate = (
date = new Date(),
{
weekday = 'long',
year = 'numeric',
month = 'long',
day = 'numeric',
} = {}) => {
return `${date.toLocaleDateString(undefined, {weekday, year, month, day})} @ ${date.toLocaleTimeString()}`;
};

</script>

<style>
.VPBadge.flag {
background-color: rgb(219, 39, 119);
color: #fff;
border-width: 1px;
border-style: solid;
border-color: rgba(208, 215, 222, 0.7);
font-family: -apple-system, "system-ui", "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
font-size: 12px;
font-weight: 800;
}
</style>
2 changes: 1 addition & 1 deletion netlify.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
[[plugins]]
package = "netlify-plugin-checklinks"
[plugins.inputs]
todoPatterns = [ "load", "CHANGELOG.html", "x.com", "twitter.com", "302" ]
todoPatterns = [ "load", "CHANGELOG.html", "x.com", "twitter.com", "302", "https://github.com/issues?q=" ]
skipPatterns = [ ".rss", ".gif", ".jpg" , "https://apps.microsoft.com", "https://github.com/lando/docs/edit", "https://yargs.js.org/docs", "https://support.patreon.com" ]
checkExternal = true

Expand Down

0 comments on commit 2afb689

Please sign in to comment.