feat(docs): host docs with docsify

This commit is contained in:
Mrugesh Mohapatra
2020-04-06 17:47:40 +05:30
parent 40c5d4384e
commit 09cd14fd22
16 changed files with 1037 additions and 437 deletions

View File

@ -1,142 +1,2 @@
<!-- do not translate this -->
| [Read these guidelines in other languages](/docs/i18n-languages) |
|-|
<!-- do not translate this -->
# Contribution Guidelines > Our contributing guide is available here: <https://contribute.freecodecamp.org/>
Hello. 👋
freeCodeCamp.org is possible, thanks to thousands of kind volunteers like you. We are grateful for your contributions and are excited to welcome you aboard.
We strictly enforce our ["Code of Conduct"](https://www.freecodecamp.org/code-of-conduct). Please take a moment to read it. It takes only two minutes to read.
Happy contributing.
## Here are some fun ways that you can help
You can contribute to any of these:
1. [Contribute to this open-source codebase](#contribute-to-this-open-source-codebase). Help us edit coding challenges, or fix bugs on the learning platform.
2. Help campers on our [public forum](https://www.freecodecamp.org/forum/). [Answer their coding questions](https://www.freecodecamp.org/forum/?max_posts=1) or [give them feedback on their coding projects](https://www.freecodecamp.org/forum/c/project-feedback?max_posts=1).
3. Help us add subtitles (closed captions) to our [YouTube channel videos](https://www.youtube.com/channel/UC8butISFwT-Wl7EV0hUK0BQ/videos).
## Contribute to this open-source codebase
Our codebase has thousands of [coding challenges](https://www.freecodecamp.org/learn/) and other source code that power our learning platform.
### Create, update and fix bugs in our coding challenges
All our coding challenges are curated by the community, bringing in expert knowledge from volunteers like you.
You can help expand them and make their wording better. You can also update the user stories to explain the concept better or remove redundant ones and improve the challenge tests to make them more accurately test people's code.
**If you're interested in improving these coding challenges, here's [how to work on coding challenges](/docs/how-to-work-on-coding-challenges.md).**
### Help us fix bugs in freeCodeCamp.org's learning platform
Our learning platform runs on a modern JavaScript stack. It has various components, tools, and libraries, including but not limited to, Node.js, MongoDB, LoopBack, OAuth 2.0, React, Gatsby, Webpack, and more.
Broadly,
- We have a Node.js based API server.
- A set of React-based client applications.
- A script that we use to evaluate our front-end projects.
Contributing to this requires some understanding of APIs, ES6 Syntax, and a lot of curiosity.
Essentially, we expect basic familiarity with some of the aforementioned technologies, tools, and libraries. With that being said, you are not required to be an expert on them to contribute.
**If you want to help us improve our codebase, you can either [set up freeCodeCamp locally](/docs/how-to-setup-freecodecamp-locally.md) or use Gitpod, a free online dev environment.**
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freeCodeCamp/freeCodeCamp)
(Starts a ready-to-code dev environment for freeCodeCamp in your browser.)
## Frequently Asked Questions
### Where are the Guide articles (guide.freecodecamp.org)? How can I contribute to them?
We will not have the general guide articles anymore. Instead we intend to publish these as tutorials that are curated by the editorial team. These would then be published by them on the Developer News.
The challenge hints and articles will still be available on the forum which we have already migrated.
### Can I translate freeCodeCamp's curriculum?
We do intend to make the curriculum available in more languages, right now we do not have a timeline for this.
We will begin by making the curriculum available in *Chinese* first. This will help us understand the caveats and the streamline the development workflows. China is one of the largest demographic regions in terms of our non-english audience. It is hence an ideal candidate for the internationalization (i18n). We currently have hundreds of thousands of users using an old version of the platform.
The next languages to follow would be *Arabic, Portuguese, Russian and Spanish* in no particular order. For Portuguese and Spanish we will focus on Latin America as our target demographic region based on the audience we have.
While you may work on the translations, we are unable to launch them until later next year, other than Chinese which is tentatively planned for a early 2020 release.
We **may** accept pull requests (high quality human translations only), depending on a case to case basis.
### Can I translate freeCodeCamp's codebase documentation?
You are welcome to translate freeCodeCamp's codebase documentation into any language of your choice or improve and update the currently translated guidelines.
### How can I report a bug that is not on board?
If you think you've found a bug, first read the ["Help I've Found a Bug"](https://forum.freecodecamp.org/t/how-to-report-a-bug/19543) article and follow its instructions.
If you're confident it's a new bug, go ahead and create a new GitHub issue. Be sure to include as much information as possible so that we can reproduce the bug. We have a pre-defined issue template to help you through this.
Please note that any issues that seek coding help on a challenge will be closed. The issue tracker is strictly for codebase related issues and discussions. Whenever in doubt, you should [seek assistance on the forum](https://www.freecodecamp.org/forum) before making a report.
### How can I report a security issue?
Please don't create GitHub issues for security issues. Instead, please send an email to `security@freecodecamp.org` and we'll look into it immediately.
### What do these different labels that are tagged on issues mean?
Our community moderators [triage](https://en.wikipedia.org/wiki/Software_bug#Bug_management) issues and pull requests based on their priority, severity, and other factors. You can [find a complete glossary of their meanings here](https://github.com/freecodecamp/freecodecamp/labels).
You should go through [**`help wanted`**](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) or [**`first timers welcome`**](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+welcome%22) issues for a quick overview of what is available for you to work on.
These are up for grabs, and you do not need to seek permission before working on them. If these issues lack clarity on what needs to be done, feel free to ask questions in the comments.
### I found a typo, should I report an issue before I can make a pull request?
For typos and other wording changes, you can directly open pull requests without first creating an issue. Issues are more for discussing larger problems associated with code or structural aspects of the curriculum.
### How do I get an issue assigned to me?
We typically do not assign issues to anyone other than long-time contributors to avoid ambiguous no-shows. Instead, we follow the below policy to be fair to everyone:
1. The first pull-request for any issue is preferred to be merged.
2. In the case of multiple pull-requests for the same issue, we give priority to the quality of the code in the pull-requests.
- Did you include tests?
- Did you catch all use-cases?
- Did you ensure all tests pass, and you confirmed everything works locally?
3. Finally, we favor pull-requests which follow our recommended guidelines.
- Did you follow the pull-request checklist?
- Did you name your pull-request title meaningfully?
You do not need any permission for issues that are marked `help wanted` or `first timers welcome` as explained earlier. Follow the guidelines carefully and open a pull-request.
### I am new to GitHub and Open Source, where should I start?
Read our [How to Contribute to Open Source Guide](https://github.com/freeCodeCamp/how-to-contribute-to-open-source).
### I am stuck on something that is not included in this documentation. How can I get help?
Feel free to ask for help in:
- [The "Contributors" category of our public forum](https://www.freecodecamp.org/forum/c/contributors)
- [Our public contributors chat room on Gitter](https://gitter.im/FreeCodeCamp/Contributors)
We are excited to help you contribute to any of the topics that you would like to work on. Feel free to ask us questions on the related issue threads, and we will be glad to clarify. Make sure you search for your query before posting a new one. Be polite and patient. Our community of volunteers and moderators are always around to guide you through your queries.
When in doubt, you can reach out to our platform dev team to help you with this:
| Name | GitHub | Twitter |
|:----------------|:-------|:--------|
| Mrugesh Mohapatra | [`@raisedadead`](https://github.com/raisedadead) | [`@raisedadead`](https://twitter.com/raisedadead)|
| Ahmad Abdolsaheb | [`@ahmadabdolsaheb`](https://github.com/ahmadabdolsaheb) | [`@Abdolsaheb`](https://twitter.com/Abdolsaheb) |
| Kristofer Koishigawa | [`@scissorsneedfoodtoo`](https://github.com/scissorsneedfoodtoo) | [`@kriskoishigawa`](https://twitter.com/kriskoishigawa) |
> **Email: `dev@freecodecamp.org`**

View File

@ -124,7 +124,7 @@ Our community also has:
- A [podcast](https://podcast.freecodecamp.org/) with technology insights and inspiring stories from developers. - A [podcast](https://podcast.freecodecamp.org/) with technology insights and inspiring stories from developers.
- A [Developer News](https://www.freecodecamp.org/news) publication, a free, open source, no-ads place to cross-post your blog articles. - A [Developer News](https://www.freecodecamp.org/news) publication, a free, open source, no-ads place to cross-post your blog articles.
> ### [Join our community here](https://www.freecodecamp.org/signin). > #### [Join our community here](https://www.freecodecamp.org/signin).
### Reporting Bugs and Issues ### Reporting Bugs and Issues
@ -134,13 +134,15 @@ If you're confident it's a new bug and have confirmed that someone else is facin
### Reporting Security Issues and Responsible Disclosure ### Reporting Security Issues and Responsible Disclosure
If you think you have found a vulnerability, *please report responsibly*. Don't create GitHub issues for security issues. Instead, please send an email to `security@freecodecamp.org` and we'll look into it immediately. If you think you have found a vulnerability, _please report responsibly_. Don't create GitHub issues for security issues. Instead, please send an email to `security@freecodecamp.org` and we'll look into it immediately.
We appreciate any responsible disclosure of vulnerabilities that might impact the integrity of our platforms and users. While we do not offer any bounties or swags at the moment, we'll be happy to list your name in our [Hall of Fame](HoF.md) for security researchers. We appreciate any responsible disclosure of vulnerabilities that might impact the integrity of our platforms and users. While we do not offer any bounties or swags at the moment, we'll be happy to list your name in our [Hall of Fame](HoF.md) for security researchers.
### Contributing ### Contributing
> ### [Please follow these steps to contribute.](CONTRIBUTING.md) The freeCodeCamp.org community is possible thanks to thousands of kind volunteers like you. We welcome any and all contributions to the community and are excited to welcome you aboard.
> #### [Please follow these steps to contribute](https://contribute.freecodecamp.org).
### Platform, Build and Deployment Status ### Platform, Build and Deployment Status

0
docs/.nojekyll Normal file
View File

View File

@ -1,7 +1,156 @@
<!-- # Contribute to the freeCodeCamp.org Community
This file should not be translated. The [freeCodeCamp.org](https://freecodecamp.org) community is possible thanks to thousands of kind volunteers like you. We welcome any and all contributions to the community and are excited to welcome you aboard.
--> ## Quick and fun ways you can help
> ### If you are getting started, [you should read our contributing guidelines](/CONTRIBUTING.md) first. You can contribute to any of these:
1. [Help by answering coding questions](https://www.freecodecamp.org/forum/?max_posts=1) on our community forum.
2. [Give feedback on coding projects](https://www.freecodecamp.org/forum/c/project-feedback?max_posts=1) built by campers.
3. [Help us add subtitles (closed captions)](https://www.youtube.com/freecodecamp) to our YouTube channel videos.
4. [Contribute to our open source codebase](#contribute-to-our-open-source-codebase) on GitHub.
a. Create, update and fix bugs in our [coding challenges](#coding-challenges).
b. Help us fix bugs in freeCodeCamp.org's [learning platform](#learning-platform).
c. Help us translate freeCodeCamp.org to world languages.
> [!NOTE]
> Before you proceed, please take a quick 2 minutes to read our [Code of Conduct](https://www.freecodecamp.org/code-of-conduct). We enforce it strictly across our community. We want contributing to freeCodeCamp.org to be a safe and inclusive experience for everyone.
Happy contributing.
## Contribute to our open source codebase
Our codebase has thousands of [coding challenges](https://www.freecodecamp.org/learn/) and other source code that power our learning platform.
### Coding Challenges
All our coding challenges are curated by the community, bringing in expert knowledge from volunteers like you.
You can help expand them and make their wording better. You can also update the user stories to explain the concept better or remove redundant ones and improve the challenge tests to make them more accurately test people's code.
**If you're interested in improving these coding challenges, here's [how to work on coding challenges](/how-to-work-on-coding-challenges.md).**
### Learning Platform
Our learning platform runs on a modern JavaScript stack. It has various components, tools, and libraries, including but not limited to, Node.js, MongoDB, LoopBack, OAuth 2.0, React, Gatsby, Webpack, and more.
Broadly,
- We have a Node.js based API server.
- A set of React-based client applications.
- A script that we use to evaluate our front-end projects.
Contributing to this requires some understanding of APIs, ES6 Syntax, and a lot of curiosity.
Essentially, we expect basic familiarity with some of the aforementioned technologies, tools, and libraries. With that being said, you are not required to be an expert on them to contribute.
**If you want to help us improve our codebase, you can either [set up freeCodeCamp locally](/how-to-setup-freecodecamp-locally.md)**
OR
**Use Gitpod, a free online dev environment.**
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freeCodeCamp/freeCodeCamp)
(Starts a ready-to-code dev environment for freeCodeCamp in your browser.)
## Frequently Asked Questions
### Where are the Guide articles (guide.freecodecamp.org)?
We will not have the general guide articles anymore.
We intend to publish these as tutorials that are curated by the editorial team. These would then be published by them on the Developer News.
The challenge hints and articles will still be available on the forum which we have already migrated.
### Can I translate freeCodeCamp's curriculum?
At the minute we are translating the curriculum to Chinese _only_.
While we do intend to make the curriculum available in more languages, right now we do not have a timeline for this.
China is one of the largest demographic regions in terms of our non-english audience. It is an ideal candidate for the internationalization (i18n). We currently have hundreds of thousands of users using an old version of the platform.
Once we have ironed out the logistics with the Chinese version of our curriculum, the next languages to follow would be _Arabic, Portuguese, Russian and Spanish_ in no particular order. For Portuguese and Spanish we will focus on Latin America as our target demographic region based on the audience we have.
While you may work on the translations, we are unable to launch them until later next year, other than Chinese which is tentatively planned for a early 2020 release. We may accept pull requests (high quality human translations only), depending on a case to case basis.
### Can I translate freeCodeCamp's codebase documentation?
You are welcome to translate freeCodeCamp's codebase documentation into any language of your choice or improve and update the currently translated guidelines.
### How can I report a bug that is not on board?
If you think you've found a bug, first read the ["Help I've Found a Bug"](https://forum.freecodecamp.org/t/how-to-report-a-bug/19543) article and follow its instructions.
If you're confident it's a new bug, go ahead and create a new GitHub issue. Be sure to include as much information as possible so that we can reproduce the bug. We have a pre-defined issue template to help you through this.
Please note that any issues that seek coding help on a challenge will be closed. The issue tracker is strictly for codebase related issues and discussions. Whenever in doubt, you should [seek assistance on the forum](https://www.freecodecamp.org/forum) before making a report.
### How can I report a security issue?
Please don't create GitHub issues for security issues. Instead, please send an email to `security@freecodecamp.org` and we'll look into it immediately.
### What do these different labels that are tagged on issues mean?
Our community moderators [triage](https://en.wikipedia.org/wiki/Software_bug#Bug_management) issues and pull requests based on their priority, severity, and other factors. You can [find a complete glossary of their meanings here](https://github.com/freecodecamp/freecodecamp/labels).
You should go through [**`help wanted`**](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) or [**`first timers welcome`**](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+welcome%22) issues for a quick overview of what is available for you to work on.
These are up for grabs, and you do not need to seek permission before working on them. If these issues lack clarity on what needs to be done, feel free to ask questions in the comments.
### I found a typo, should I report an issue before I can make a pull request?
For typos and other wording changes, you can directly open pull requests without creating an issue first. Issues are more for discussing larger problems associated with code or structural aspects of the curriculum.
However, please mention details, context etc. in the pull request's description area to help us understand and review your contribution even for minor changes.
### How do I get an issue assigned to me?
We typically do not assign issues to anyone other than long-time contributors to avoid ambiguous no-shows. Instead, we follow the below policy to be fair to everyone:
1. The first pull request for any issue is preferred to be merged.
2. In the case of multiple pull requests for the same issue, we give priority to the quality of the code in the pull requests.
- Did you include tests?
- Did you catch all usecases?
- Did you ensure all tests pass, and you confirmed everything works locally?
3. Finally, we favor pull requests which follow our recommended guidelines.
- Did you follow the pull request checklist?
- Did you name your pull request title meaningfully?
You do not need any permission for issues that are marked `help wanted` or `first timers welcome` as explained earlier.
Follow the guidelines carefully and open a pull request.
### I am new to GitHub and Open Source, where should I start?
Read our [How to Contribute to Open Source Guide](https://github.com/freeCodeCamp/how-to-contribute-to-open-source).
### I am stuck on something that is not included in this documentation.
Feel free to ask for help in:
- The "Contributors" category of [our community forum](https://www.freecodecamp.org/forum/c/contributors).
- Our public contributors [chat room on Gitter](https://gitter.im/FreeCodeCamp/Contributors).
We are excited to help you contribute to any of the topics that you would like to work on. Feel free to ask us questions on the related issue threads, and we will be glad to clarify. Make sure you search for your query before posting a new one.
Be polite and patient. Our community of volunteers and moderators are always around to guide you through your queries.
When in doubt, you can reach out to our platform dev team to help you with this:
| Member | Send message on Gitter | DM on Twitter |
| :------------------- | :-------------------------------------------------------------- | :------------------------------------------------------ |
| Mrugesh Mohapatra | [@raisedadead](https://gitter.im/raisedadead) | [@raisedadead](https://twitter.com/raisedadead) |
| Ahmad Abdolsaheb | [@ahmadabdolsaheb](https://gitter.im/ahmadabdolsaheb) | [@Abdolsaheb](https://twitter.com/Abdolsaheb) |
| Kristofer Koishigawa | [@scissorsneedfoodtoo](https://gitter.im/scissorsneedfoodtoo) | [@kriskoishigawa](https://twitter.com/kriskoishigawa) |
**You can email our developer staff at: `dev[at]freecodecamp.org`**

11
docs/components/cover.md Normal file
View File

@ -0,0 +1,11 @@
<!-- _coverpage.md -->
# ![logo](/components/logo.svg)
# Contribute to the freeCodeCamp.org
> This community is possible thanks to thousands of kind volunteers like you.
[Start contributing](/readme)
![color](#ffffff)

116
docs/components/logo.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 34 KiB

0
docs/components/nav.md Normal file
View File

View File

@ -0,0 +1,6 @@
- [Overview](/ 'Contribute to the freeCodeCamp.org Community')
- **Guides**
- [How to work on coding challenges](/how-to-work-on-coding-challenges)
- [How to setup freeCodeCamp locally](/how-to-setup-freecodecamp-locally)
- [How to open a pull request](/how-to-open-a-pull-request)
- [How we do DevOps at freeCodeCamp.org](/devops.md)

349
docs/components/theme.css Normal file
View File

@ -0,0 +1,349 @@
:root {
--theme-color: #0a0a23;
--theme-color-dark: #002ead;
--text-color-base: #2e2e46;
--text-color-secondary: #646473;
--text-color-tertiary: #81818e;
}
body {
font-size: 100%;
line-height: 1.5;
color: var(--text-color-base);
}
* {
text-decoration: none !important;
}
a {
transition: all 0.3s linear;
}
.github-corner {
z-index: 5;
}
/****** Cover Page ******/
section.cover {
padding-bottom: 112px; /* fixed footer (Netflix) height */
height: auto;
min-height: 100vh;
/**
* Intended to defeat this inline style on initial boot that flashes when on page load:
* https://github.com/docsifyjs/docsify/blob/8352a1e489abc2a7b6361fe02d696e1891a031cd/src/core/render/tpl.js#L56-L70
*/
background: #fff !important;
}
section.cover .cover-main {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
margin: 0;
padding: 32px 16px 0;
}
section.cover img {
width: 400px;
}
section.cover h1 {
margin: 0.625rem 0 1rem;
}
section.cover blockquote,
section.cover blockquote p {
margin: 0;
}
section.cover ul {
font-size: 1.25rem;
line-height: 2rem;
display: grid;
text-align: left;
grid-column-gap: 16px;
grid-row-gap: 20px;
grid-template-columns: repeat(2, 50%);
list-style: none;
max-width: unset;
margin: 1.5em 0;
}
section.cover ul li {
white-space: nowrap;
}
section.cover.show ~ .sidebar,
section.cover.show ~ .sidebar-toggle {
display: none;
}
.cover-main .netflix-logo {
position: fixed;
display: flex;
align-items: center;
background: #ffffff;
bottom: 0;
left: 0;
width: 100%;
padding: 40px;
z-index: 5;
}
.cover-main .netflix-logo .logo {
width: 125px;
height: 32px;
background: url('images/Netflix_Logo.png');
background-size: 100%;
background-repeat: no-repeat;
background-position: center center;
}
.cover-main .buttons {
width: 100%;
}
.cover-main .buttons a {
font-weight: 700;
position: relative;
display: inline-block;
padding: 12px 25px;
font-size: 14px;
text-align: center;
line-height: 18px;
color: #221f1f;
background: #fff;
outline: none;
border: none;
background-color: #fff;
-webkit-appearance: none;
-moz-appearance: none;
cursor: pointer;
margin: 0 1rem;
color: var(--theme-color);
overflow: hidden;
transition: color 0.25s cubic-bezier(0.215, 0.61, 0.355, 1);
vertical-align: baseline;
text-transform: uppercase;
}
.cover-main .buttons a:before,
.cover-main .buttons a:after {
content: '';
display: block;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
border: 2px solid var(--theme-color);
box-sizing: border-box;
}
.cover-main .buttons a:after {
background: var(--theme-color);
transform: translateX(-101%);
transition: all 0.2s cubic-bezier(0.215, 0.61, 0.355, 1);
}
.cover-main .buttons a:hover {
color: white;
box-shadow: 0 5px 16px rgba(229, 9, 20, 0.3);
}
.cover-main .buttons a:hover:after {
transform: translateX(0);
}
.cover-main .buttons a span {
position: relative;
z-index: 1;
}
@media (max-width: 850px) {
section.cover ul {
grid-template-columns: 100%;
padding: 0;
}
section.cover ul li {
text-align: center;
}
}
@media (max-width: 450px) {
section.cover ul li {
white-space: normal;
}
.cover-main .buttons a {
width: 100%;
margin: 0.2rem 0;
}
}
/****** Sidebar ******/
.sidebar ul li a:hover {
color: var(--theme-color);
}
.sidebar .search .clear-button {
cursor: pointer;
}
/****** Sidebar Toggle ******/
.sidebar-toggle {
cursor: pointer;
}
body .sidebar-toggle {
background: none;
top: 1.5rem;
left: calc(300px + 1.5rem);
cursor: pointer;
width: 1.5rem;
height: 1.5rem;
padding: 0;
transition: left 0.25s ease-out;
}
body .sidebar-toggle span {
background-color: var(--theme-color);
height: 0.2rem;
width: 1.5rem;
position: absolute;
left: 0;
margin: 0;
transform-origin: 0;
border-radius: 1px;
}
body.close .sidebar-toggle {
transition: left 0.25s ease-out;
width: 1.5rem;
height: 1.5rem;
left: 1.5rem;
}
body.close .sidebar-toggle span {
transform-origin: center;
}
body .sidebar-toggle span:nth-child(1) {
top: 0;
}
body .sidebar-toggle span:nth-child(2) {
top: 0.5rem;
}
body .sidebar-toggle span:nth-child(3) {
top: 1rem;
}
.sidebar-toggle:hover {
opacity: 0.8;
}
.sidebar-toggle .sidebar-toggle-button:hover {
opacity: 1;
}
@media screen and (max-width: 768px) {
body .sidebar-toggle {
left: 1rem;
}
body.close .sidebar-toggle {
left: calc(300px + 1.5rem);
}
}
/****** Markdown General ******/
.markdown-section {
padding: 30px 30px 40px;
}
.markdown-section a {
text-decoration: none;
border-bottom: 0.01rem solid var(--theme-color);
transition: all 0.3s ease;
}
.markdown-section a:hover {
border-color: var(--theme-color-dark);
color: var(--theme-color-dark);
}
.markdown-section a.anchor {
border: none;
}
/****** Markdown Table ******/
.markdown-section table {
display: table;
}
.markdown-section table tr {
border-width: 0.15rem 0;
border-style: solid;
border-color: #f1f1f2;
}
.markdown-section table thead tr {
text-transform: uppercase;
font-size: 90%;
border-top: none;
}
.markdown-section table tbody tr:last-of-type {
border-bottom: none;
}
.markdown-section table tr:nth-child(2n) {
background-color: transparent;
}
.markdown-section table td,
.markdown-section table th {
border: none;
padding: 1.1rem 0.5rem;
text-align: left;
}
.markdown-section table td p {
margin: 0;
}
.markdown-section blockquote {
margin: 1em 0;
}
.markdown-section blockquote > p {
font-weight: 500;
}
.markdown-section em,
.markdown-section blockquote {
color: var(--text-color-tertiary);
}
/****** CODE HIGHLIGHTING ******/
.token.string {
color: #42b983;
}
.token.boolean,
.token.number {
color: var(--theme-color);
}
.lang-bash .token.function,
.lang-json .token.property {
color: #e96900;
}
/****** COPY TO CLIPBOARD ******/
.docsify-copy-code-button {
font-size: 0.7em !important;
}

View File

@ -1,11 +1,3 @@
<!-- do not translate this -->
| [Read these guidelines in other languages](/docs/i18n-languages) |
| :--------------------------------------------------------------- |
<!-- do not translate this -->
# Developer Operations at freeCodeCamp.org # Developer Operations at freeCodeCamp.org
This guide will help you understand our infrastructure stack and how we maintain our platforms. While this guide does not have exhaustive details for all operations, it could be used as a reference for your understanding of the systems. This guide will help you understand our infrastructure stack and how we maintain our platforms. While this guide does not have exhaustive details for all operations, it could be used as a reference for your understanding of the systems.
@ -40,7 +32,8 @@ We employ various levels of integration and acceptance testing to check on the q
We have unit tests for testing our challenge solutions, Server APIs and Client User interfaces. These help us test the integration between different components. We have unit tests for testing our challenge solutions, Server APIs and Client User interfaces. These help us test the integration between different components.
> Note: We are also in the process of writing end user tests which will help in replicating real world scenarios like updating an email or making a call to the API or third-party services. > [!NOTE]
> We are also in the process of writing end user tests which will help in replicating real world scenarios like updating an email or making a call to the API or third-party services.
Together these tests help in preventing issues from repeating themselves and ensure we do not introduce a bug while working on another bug or a feature. Together these tests help in preventing issues from repeating themselves and ensure we do not introduce a bug while working on another bug or a feature.
@ -58,7 +51,8 @@ Status of builds and releases are [available here](#build-test-and-deployment-st
Currently, only members on the developer team can push to the production branches. The changes to the `production-*` branches can land only via fast-forward merge to the [`upstream`](https://github.com/freeCodeCamp/freeCodeCamp). Currently, only members on the developer team can push to the production branches. The changes to the `production-*` branches can land only via fast-forward merge to the [`upstream`](https://github.com/freeCodeCamp/freeCodeCamp).
> Note: In the upcoming days we would improve this flow to be done via pull-requests, for better access management and transparency. > [!NOTE]
> In the upcoming days we would improve this flow to be done via pull-requests, for better access management and transparency.
### Pushing changes to Staging Applications. ### Pushing changes to Staging Applications.
@ -113,14 +107,16 @@ Currently, only members on the developer team can push to the production branche
git push upstream git push upstream
``` ```
**Note:** You will not be able to force push and if you have re-written the history in anyway these commands will error out. If they do, you may have done something incorrectly and you should just start over. > [!NOTE]
> You will not be able to force push and if you have re-written the history in anyway these commands will error out.
>
> If they do, you may have done something incorrectly and you should just start over.
The above steps will automatically trigger a run on the build pipeline for the `production-staging` branch. Once the build is complete, the artifacts are saved as `.zip` files in a cold storage to be retrieved and used later. The above steps will automatically trigger a run on the build pipeline for the `production-staging` branch. Once the build is complete, the artifacts are saved as `.zip` files in a cold storage to be retrieved and used later.
The release pipeline is triggered automatically when a fresh artefact is available from the connected build pipeline. For staging platforms, this process does not involve manual approval and the artifacts are pushed to the Client CDN and API servers. The release pipeline is triggered automatically when a fresh artefact is available from the connected build pipeline. For staging platforms, this process does not involve manual approval and the artifacts are pushed to the Client CDN and API servers.
> **Estimates:** > [!TIP|label:Estimates]
>
> Typically the build run takes ~20-25 minutes to complete followed by the release run which takes ~15-20 mins for the client, and ~5-10 mins for the API to be available live. From code push to being live on the staging platforms the whole process takes **~35-45 mins** in total. > Typically the build run takes ~20-25 minutes to complete followed by the release run which takes ~15-20 mins for the client, and ~5-10 mins for the API to be available live. From code push to being live on the staging platforms the whole process takes **~35-45 mins** in total.
### Pushing changes to Production Applications. ### Pushing changes to Production Applications.
@ -147,11 +143,15 @@ The process is mostly the same as the staging platforms, with a few extra checks
git push upstream git push upstream
``` ```
**Note:** You will not be able to force push and if you have re-written the history in anyway these commands will error out. If they do, you may have done something incorrectly and you should just start over. > [!NOTE]
> You will not be able to force push and if you have re-written the history in anyway these commands will error out.
>
> If they do, you may have done something incorrectly and you should just start over.
The above steps will automatically trigger a run on the build pipeline for the `production-current` branch. Once a build artifact is ready, it will trigger a run on the release pipeline. The above steps will automatically trigger a run on the build pipeline for the `production-current` branch. Once a build artifact is ready, it will trigger a run on the release pipeline.
> **Estimates:** Typically the build run takes ~20-25 minutes to complete. > [!TIP|label:Estimates]
> Typically the build run takes ~20-25 minutes to complete.
**Additional Steps for Staff Action** **Additional Steps for Staff Action**
@ -167,8 +167,7 @@ For staff use:
Once one of the staff members approves a release, the pipeline will push the changes live to freeCodeCamp.org's production CDN and API servers. They typically take ~15-20 mins for the client, and ~5 mins for the API servers to be available live. Once one of the staff members approves a release, the pipeline will push the changes live to freeCodeCamp.org's production CDN and API servers. They typically take ~15-20 mins for the client, and ~5 mins for the API servers to be available live.
> **Estimates:** > [!TIP|label:Estimates]
>
> The release run typically takes ~15-20 mins for each client instance, and ~5-10 mins for each API instance to be available live. From code push to being live on the production platforms the whole process takes **~90-120 mins** in total (not counting the wait time for the staff approval). > The release run typically takes ~15-20 mins for each client instance, and ~5-10 mins for each API instance to be available live. From code push to being live on the production platforms the whole process takes **~90-120 mins** in total (not counting the wait time for the staff approval).
## Build, Test and Deployment Status ## Build, Test and Deployment Status
@ -197,9 +196,9 @@ We thank you for reporting bugs that you encounter and help in making freeCodeCa
Currently a public beta testing version is available at: Currently a public beta testing version is available at:
<h3 align="center"><a href='https://www.freecodecamp.dev' _target='blank'><code>www.freecodecamp.dev</code></a></h3> <h1 align="center"><a href='https://www.freecodecamp.dev' _target='blank'><code>www.freecodecamp.dev</code></a></h1>
> **Note:** The domain name is different than **`freeCodeCamp.org`**. This is intentional to prevent search engine indexing and avoid confusion for regular users of the platform. > The domain name is different than **`freeCodeCamp.org`**. This is intentional to prevent search engine indexing and avoid confusion for regular users of the platform.
### Identifying the current version of the platforms ### Identifying the current version of the platforms

View File

@ -1,8 +1,3 @@
<!-- do not translate this -->
| [Read these guidelines in other languages](/docs/i18n-languages) |
|-|
<!-- do not translate this -->
# Catch outgoing emails locally for email workflows # Catch outgoing emails locally for email workflows
> **Note:** This is an **optional** step and is required only when working with email workflows > **Note:** This is an **optional** step and is required only when working with email workflows
@ -100,4 +95,4 @@ All links in the email should be clickable and resolve to their URL.
## Useful Links ## Useful Links
- Check out the [MailHog](https://github.com/mailhog/MailHog) repository for further information related to MailHog. Additional information is also available regarding custom MailHog configurations. - Check out the [MailHog](https://github.com/mailhog/MailHog) repository for further information related to MailHog. Additional information is also available regarding custom MailHog configurations.

View File

@ -1,49 +1,68 @@
<!-- do not translate this --> # How to open a Pull Request (PR)
| [Read these guidelines in other languages](/docs/i18n-languages) |
|-|
<!-- do not translate this -->
# How to open a Pull Request A pull request enables you to send changes from your fork on GitHub to freeCodeCamp.org's main repository. Once you are done making changes to the code, or coding challenges you should follow these guidelines to send a PR.
## How to prepare a good Pull Request title: ## Prepare a good PR title
When opening a Pull Request(PR), use the following scope table to decide what to title your PR in the following format: We recommend using [conventional title and messages](https://www.conventionalcommits.org/) for commits and pull request. The convention has the following format:
`fix/feat/chore/refactor/docs/perf (scope): PR Title`
An example is `fix(learn): Fixed tests for the do...while loop challenge`. > `<type>([optional scope(s)]): <description>`
>
> For example:
>
> `fix(learn): tests for the do...while loop challenge`
| Scope | Documentation | When opening a Pull Request(PR), you can use the below to determine the type, scope (optional) and description.
|---|---|
| `learn`,`curriculum` | For Pull Requests making changes to the curriculum challenges. |
| `client` | For Pull Requests making changes to client platform logic or user interface |
| `guide` | For Pull Requests which make changes to the guide. |
| `docs` | For Pull Requests making changes to the project's documentation. |
## Proposing a Pull Request (PR) **Type:**
| Type | When to select |
| :---- | :--------------------------------------------------------------------------- |
| fix | Changed or updated/improved functionality, tests, verbiage of a lesson, etc. |
| feat | Only if you are adding new functionality, tests, etc. |
| chore | Changes that are not related to code, tests or verbiage of a lesson. |
| docs | Changes to `/docs` directory or the contributing guidelines, etc. |
**Scope:**
You can select a scope from [this list of labels](https://github.com/freeCodeCamp/freeCodeCamp/labels?q=scope).
**Description:**
Keep it short (less than 30 characters) and simple, you can add more information in the PR description box and comments.
Some examples of good PRs titles would be:
- `fix(a11y): improved search bar contrast`
- `feat: add more tests to html and css challenges`
- `fix(api,client): prevent CORS errors on form submission`
- `docs(i18n): Chinese translation of local setup`
## Proposing a Pull Request
1. Once the edits have been committed, you will be prompted to create a pull request on your fork's GitHub Page. 1. Once the edits have been committed, you will be prompted to create a pull request on your fork's GitHub Page.
![Image - Compare pull request prompt on GitHub](/docs/images/github/compare-pull-request-prompt.png) ![Image - Compare pull request prompt on GitHub](./images/github/compare-pull-request-prompt.png)
2. By default, all pull requests should be against the freeCodeCamp main repo, `master` branch. 2. By default, all pull requests should be against the freeCodeCamp main repo, `master` branch.
Make sure that your Base Fork is set to freeCodeCamp/freeCodeCamp when raising a Pull Request. Make sure that your Base Fork is set to freeCodeCamp/freeCodeCamp when raising a Pull Request.
![Image - Comparing forks when making a pull request](/docs/images/github/comparing-forks-for-pull-request.png) ![Image - Comparing forks when making a pull request](./images/github/comparing-forks-for-pull-request.png)
3. Submit the pull request from your branch to freeCodeCamp's `master` branch. 3. Submit the pull request from your branch to freeCodeCamp's `master` branch.
4. In the body of your PR include a more detailed summary of the changes you made and why. 4. In the body of your PR include a more detailed summary of the changes you made and why.
- You will be presented with a pull request template. This is a checklist that you should have followed before opening the pull request. - You will be presented with a pull request template. This is a checklist that you should have followed before opening the pull request.
- Fill in the details as you see fit. This information will be reviewed and the reviewers will decide whether or not your pull request is accepted. - Fill in the details as you see fit. This information will be reviewed and the reviewers will decide whether or not your pull request is accepted.
- If the PR is meant to address an existing GitHub Issue then, at the end of - If the PR is meant to address an existing GitHub Issue then, at the end of
your PR's description body, use the keyword _Closes_ with the issue number to [automatically close that issue if the PR is accepted and merged](https://help.github.com/en/articles/closing-issues-using-keywords). your PR's description body, use the keyword _Closes_ with the issue number to [automatically close that issue if the PR is accepted and merged](https://help.github.com/en/articles/closing-issues-using-keywords).
> Example: `Closes #123` will close issue 123 > Example: `Closes #123` will close issue 123
5. Indicate if you have tested on a local copy of the site or not. 5. Indicate if you have tested on a local copy of the site or not.
This is very important when making changes that are not just edits to text content like documentation or a challenge description. Examples of changes that need local testing include JavaScript, CSS, or HTML which could change the functionality or layout of a page. This is very important when making changes that are not just edits to text content like documentation or a challenge description. Examples of changes that need local testing include JavaScript, CSS, or HTML which could change the functionality or layout of a page.

View File

@ -1,112 +1,121 @@
<!-- do not translate this --> # How to set up freeCodeCamp locally
| [Read these guidelines in other languages](/docs/i18n-languages) |
|-|
<!-- do not translate this -->
# Set up freeCodeCamp locally
Follow these guidelines for setting up freeCodeCamp locally on your system. This is highly recommended if you want to contribute regularly. Follow these guidelines for setting up freeCodeCamp locally on your system. This is highly recommended if you want to contribute regularly.
For some of the contribution workflows, you need to have freeCodeCamp running locally. For example, previewing coding challenges or debugging and fixing bugs in the codebase. For some of the contribution workflows, you need to have freeCodeCamp running locally. For example, previewing coding challenges or debugging and fixing bugs in the codebase.
## Fork the repository on GitHub ## Fork the repository on GitHub
['Forking'](https://help.github.com/articles/about-forks/) is a step where you get your own copy of freeCodeCamp's main repository (a.k.a _repo_) on GitHub.
[Forking](https://help.github.com/articles/about-forks/) is a step where you get your own copy of freeCodeCamp's main repository (a.k.a _repo_) on GitHub.
This is essential, as it allows you to work on your own copy of freeCodeCamp on GitHub, or to download (clone) your repository to work on locally. Later, you will be able to request changes to be pulled into the main repository from your fork via a pull request (PR). This is essential, as it allows you to work on your own copy of freeCodeCamp on GitHub, or to download (clone) your repository to work on locally. Later, you will be able to request changes to be pulled into the main repository from your fork via a pull request (PR).
> **ProTip:** > [!TIP]
> The main repository at `https://github.com/freeCodeCamp/freeCodeCamp` is often referred to as the `upstream` repository. > The main repository at `https://github.com/freeCodeCamp/freeCodeCamp` is often referred to as the `upstream` repository.
>
> Your fork at `https://github.com/YOUR_USER_NAME/freeCodeCamp` is often referred to as the `origin` repository. > Your fork at `https://github.com/YOUR_USER_NAME/freeCodeCamp` is often referred to as the `origin` repository.
#### Follow these steps to fork the `https://github.com/freeCodeCamp/freeCodeCamp` repository: **Follow these steps to fork the `https://github.com/freeCodeCamp/freeCodeCamp` repository:**
1. Go to the freeCodeCamp repository on GitHub: <https://github.com/freeCodeCamp/freeCodeCamp> 1. Go to the freeCodeCamp repository on GitHub: <https://github.com/freeCodeCamp/freeCodeCamp>
2. Click the "Fork" Button in the upper right-hand corner of the interface ([More Details Here](https://help.github.com/articles/fork-a-repo/)) 2. Click the "Fork" Button in the upper right-hand corner of the interface ([More Details Here](https://help.github.com/articles/fork-a-repo/))
3. After the repository has been forked, you will be taken to your copy of the freeCodeCamp repository at `https://github.com/YOUR_USER_NAME/freeCodeCamp` 3. After the repository has been forked, you will be taken to your copy of the freeCodeCamp repository at `https://github.com/YOUR_USER_NAME/freeCodeCamp`
![GIF - How to fork freeCodeCamp on GitHub](/docs/images/github/how-to-fork-freeCodeCamp.gif) ![GIF - How to fork freeCodeCamp on GitHub](./images/github/how-to-fork-freeCodeCamp.gif)
## Prepare your local machine
## Preparing the development environment
Once you have the prerequisites installed, you need to prepare your development environment. This is common for many development workflows, and you will only need to do this once. Once you have the prerequisites installed, you need to prepare your development environment. This is common for many development workflows, and you will only need to do this once.
#### Follow these steps to get your development environment ready: **Follow these steps to get your development environment ready:**
1. Install [Git](https://git-scm.com/) or your favorite Git client, if you haven't already. Update to the latest version; the version that came bundled with your OS may be outdated. 1. Install [Git](https://git-scm.com/) or your favorite Git client, if you haven't already. Update to the latest version; the version that came bundled with your OS may be outdated.
2. (Optional but recommended) [Setup an SSH Key](https://help.github.com/articles/generating-an-ssh-key/) for GitHub. 2. (Optional but recommended) [Setup an SSH Key](https://help.github.com/articles/generating-an-ssh-key/) for GitHub.
3. Install a code editor of your choice. 3. Install a code editor of your choice.
We highly recommend using [VS Code](https://code.visualstudio.com/) or [Atom](https://atom.io/). These are great, free and open source code editors. We highly recommend using [VS Code](https://code.visualstudio.com/) or [Atom](https://atom.io/). These are great, free and open source code editors.
4. Set up linting for your code editor. 4. Set up linting for your code editor.
You should have [ESLint running in your editor](http://eslint.org/docs/user-guide/integrations.html), and it will highlight anything that doesn't conform to [freeCodeCamp's JavaScript Style Guide](http://forum.freecodecamp.org/t/free-code-camp-javascript-style-guide/19121). You should have [ESLint running in your editor](http://eslint.org/docs/user-guide/integrations.html), and it will highlight anything that doesn't conform to [freeCodeCamp's JavaScript Style Guide](http://forum.freecodecamp.org/t/free-code-camp-javascript-style-guide/19121).
> Please do not ignore any linting errors. They are meant to **help** you and to ensure a clean and simple codebase. > [!TIP]
> Please do not ignore any linting errors. They are meant to **help** you and to ensure a clean and simple codebase.
## Clone your copy of freeCodeCamp ## Clone your fork from GitHub
['Cloning'](https://help.github.com/articles/cloning-a-repository/) is where you **download** a copy of a repository from a `remote` location that is either owned by you or by someone else. In your case, this remote location is your `fork` of freeCodeCamp's repository that should be available at `https://github.com/YOUR_USER_NAME/freeCodeCamp`.
[Cloning](https://help.github.com/articles/cloning-a-repository/) is where you **download** a copy of a repository from a `remote` location that is either owned by you or by someone else. In your case, this remote location is your `fork` of freeCodeCamp's repository that should be available at `https://github.com/YOUR_USER_NAME/freeCodeCamp`.
Run these commands on your local machine: Run these commands on your local machine:
1. Open a Terminal / Command Prompt / Shell in your projects directory 1. Open a Terminal / Command Prompt / Shell in your projects directory
_i.e.: `/yourprojectsdirectory/`_ _i.e.: `/yourprojectsdirectory/`_
2. Clone your fork of freeCodeCamp, replacing `YOUR_USER_NAME` with your GitHub Username 2. Clone your fork of freeCodeCamp, replacing `YOUR_USER_NAME` with your GitHub Username
```sh ```sh
git clone --depth=1 https://github.com/YOUR_USER_NAME/freeCodeCamp.git git clone --depth=1 https://github.com/YOUR_USER_NAME/freeCodeCamp.git
``` ```
This will download the entire freeCodeCamp repository to your projects directory. This will download the entire freeCodeCamp repository to your projects directory.
Note: `--depth=1` creates a shallow clone of your fork, with only the most recent history/commit. Note: `--depth=1` creates a shallow clone of your fork, with only the most recent history/commit.
## Setup an `upstream` to the main repository ## Setup syncing from parent
Now that you have downloaded a copy of your fork, you will need to set up an `upstream`.
As mentioned earlier, the main repository at `https://github.com/freeCodeCamp/freeCodeCamp` is often referred to as the `upstream` repository. Your fork at `https://github.com/YOUR_USER_NAME/freeCodeCamp` is often referred to as the `origin` repository. Now that you have downloaded a copy of your fork, you will need to set up an `upstream` remote to the parent repository.
[As mentioned earlier](#fork-the-repo-on-github), the main repository is referred `upstream` repository. Your fork referred to as the `origin` repository.
You need a reference from your local clone to the `upstream` repository in addition to the `origin` repository. This is so that you can sync changes from the main repository without the requirement of forking and cloning repeatedly. You need a reference from your local clone to the `upstream` repository in addition to the `origin` repository. This is so that you can sync changes from the main repository without the requirement of forking and cloning repeatedly.
1. Change directory to the new freeCodeCamp directory: 1. Change directory to the new freeCodeCamp directory:
```sh ```sh
cd freeCodeCamp cd freeCodeCamp
``` ```
2. Add a remote reference to the main freeCodeCamp repository: 2. Add a remote reference to the main freeCodeCamp repository:
```sh ```sh
git remote add upstream https://github.com/freeCodeCamp/freeCodeCamp.git git remote add upstream https://github.com/freeCodeCamp/freeCodeCamp.git
``` ```
3. Ensure the configuration looks correct: 3. Ensure the configuration looks correct:
```sh ```sh
git remote -v git remote -v
``` ```
The output should look something like below: The output should look something like below:
```sh ```sh
origin https://github.com/YOUR_USER_NAME/freeCodeCamp.git (fetch) origin https://github.com/YOUR_USER_NAME/freeCodeCamp.git (fetch)
origin https://github.com/YOUR_USER_NAME/freeCodeCamp.git (push) origin https://github.com/YOUR_USER_NAME/freeCodeCamp.git (push)
upstream https://github.com/freeCodeCamp/freeCodeCamp.git (fetch) upstream https://github.com/freeCodeCamp/freeCodeCamp.git (fetch)
upstream https://github.com/freeCodeCamp/freeCodeCamp.git (push) upstream https://github.com/freeCodeCamp/freeCodeCamp.git (push)
``` ```
## Running freeCodeCamp locally on your machine ## Running freeCodeCamp locally on your machine
Now that you have a local copy of freeCodeCamp, you can follow these instructions to run it locally. This will allow you to: Now that you have a local copy of freeCodeCamp, you can follow these instructions to run it locally. This will allow you to:
- Preview edits to pages as they would appear on the learning platform. - Preview edits to pages as they would appear on the learning platform.
- Work on UI related issues and enhancements. - Work on UI related issues and enhancements.
- Debug and fix issues with the application servers and client apps. - Debug and fix issues with the application servers and client apps.
You can skip running freeCodeCamp locally if you are simply editing files, performing a `rebase`, or resolving `merge` conflicts. You can always return to this part of the instructions later. > [!NOTE]
> You can skip running freeCodeCamp locally if you are simply editing files, for instance, performing a `rebase`, or resolving `merge` conflicts.
[Skip running freeCodeCamp locally](#making-changes-to-your-clone-of-freecodecamp-locally) >
> You can always return to this part of the instructions later. You should **only** skip this step if you do not need to run the apps on your machine.
>
> [Skip to making changes](#making-changes-locally).
There are currently two methods to run freeCodeCamp locally: There are currently two methods to run freeCodeCamp locally:
- Docker (recommended) - Docker (recommended)
- Local - Local
@ -118,32 +127,34 @@ If you are having issues using one method, try using the other. If you do run in
And as always, feel free to hop on to our [Contributors Chat room](https://gitter.im/FreeCodeCamp/Contributors), for quick queries. And as always, feel free to hop on to our [Contributors Chat room](https://gitter.im/FreeCodeCamp/Contributors), for quick queries.
### Installing prerequisites ### Install prerequisites
Start by installing the prerequisite software: Start by installing the prerequisite software:
Software required for both Docker and Local builds: Software required for both Docker and Local builds:
| Prerequisite | Version | Notes | | Prerequisite | Version | Notes |
| ------------ | ------- | ----- | | ----------------------------- | ------- | -------------------------------------------------------------------- |
| [Node.js](http://nodejs.org)| `10.x` | [LTS Schedule](https://github.com/nodejs/Release#release-schedule) | | [Node.js](http://nodejs.org) | `12.x` | [LTS Schedule](https://github.com/nodejs/Release#release-schedule) |
| npm (comes bundled with Node)| `6.x` | Does not have LTS releases, we use the version bundled with Node LTS | | npm (comes bundled with Node) | `6.x` | Does not have LTS releases, we use the version bundled with Node LTS |
**Docker Build additional prerequisite:** **Docker Build additional prerequisite:**
| Prerequisite | Version | Notes | | Prerequisite | Version | Notes |
| ------------ | ------- | ----- | | -------------------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------ |
| [Docker CE](https://docs.docker.com/install/) | `Stable` | - | | [Docker CE](https://docs.docker.com/install/) | `Stable` | - |
| [Docker Compose](https://docs.docker.com/compose/install/) | `Stable` | Must be installed separately if not using macOS or Windows | | [Docker Compose](https://docs.docker.com/compose/install/) | `Stable` | Must be installed separately if not using macOS or Windows |
| [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) | `v19.03.1` | If using Windows 10 Home, use this instead - instructions [here](/docs/how-to-use-docker-on-windows-home.md) | [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) | `v19.03.1` | If using Windows 10 Home, use this instead - instructions [here](how-to-use-docker-on-windows-home.md) |
**Local Build additional prerequisite:** **Local Build additional prerequisite:**
| Prerequisite | Version | Notes | | Prerequisite | Version | Notes |
| ------------ | ------- | ----- | | --------------------------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [MongoDB Community Server](https://docs.mongodb.com/manual/administration/install-community/) | `3.6` | [Release Notes](https://docs.mongodb.com/manual/release-notes/), Note: We are currently on `3.6`, an [upgrade is planned](https://github.com/freeCodeCamp/freeCodeCamp/issues/18275). | | [MongoDB Community Server](https://docs.mongodb.com/manual/administration/install-community/) | `3.6` | [Release Notes](https://docs.mongodb.com/manual/release-notes/), Note: We are currently on `3.6`, an [upgrade is planned](https://github.com/freeCodeCamp/freeCodeCamp/issues/18275). |
#### Important: > [!TIP]
We highly recommend updating to the latest stable releases of the software listed above, also known as Long Term Support (LTS) releases. > We highly recommend updating to the latest stable releases of the software listed above, also known as Long Term Support (LTS) releases.
If Node.js is already installed on your machine, run the following commands to validate the versions: If Node.js is already installed on your machine, run the following commands to validate the versions:
```sh ```sh
@ -151,22 +162,14 @@ node -v
npm -v npm -v
``` ```
If you have a different version, please install the recommended version. We can only support installation issues for recommended versions. > [!DANGER]
> If you have a different version, please install the recommended version. We can only support installation issues for recommended versions. See [troubleshooting](#troubleshooting) for details.
Windows users:
> Make sure the command line tool you use (e.g., cmd, PowerShell, Git Bash for Windows, WSL) has the correct user privileges. If possible, you should launch the tool with the Administrator's privilege. On Windows, you should be able to launch as administrator by right-clicking the application and selecting `Launch as an Administrator`.
#### I am having issues with installing the recommended prerequisites. What should I do?
We regularly develop on the latest or most popular operating systems like macOS 10.12 or later, Ubuntu 16.04 or later and Windows 10. It is recommended to research your specific issue on resources such as Google, Stack Overflow and Stack Exchange. There is a good chance that someone has faced the same issue and there is already an answer to your specific query.
If you are on a different OS and/or are still running into issues, reach out to the [contributors community on our public forum](https://www.freeCodeCamp.org/forum/c/contributors) or the [contributor's chat room](https://gitter.im/freeCodeCamp/Contributors).
**Please avoid creating GitHub issues for prerequisite issues. They are out of the scope of this project.**
### Configuring dependencies ### Configuring dependencies
#### Step 1: Setup the environment variable file #### Step 1: Setup the environment variable file
The default API keys and environment variables are stored in the file `sample.env`. This file needs to be copied to a new file named `.env` that is accessed dynamically during the installation step.
The default API keys and environment variables are stored in the file `sample.env`. This file needs to be copied to a new file named `.env` that is accessed dynamically during the installation step.
```sh ```sh
# Create a copy of the "sample.env" and name it ".env". # Create a copy of the "sample.env" and name it ".env".
@ -179,7 +182,7 @@ cp sample.env .env
copy sample.env .env copy sample.env .env
``` ```
The keys in the `.env` file are *not* required to be changed to run the app locally. You can leave the default values copied over from `sample.env` as-is. The keys in the `.env` file are _not_ required to be changed to run the app locally. You can leave the default values copied over from `sample.env` as-is.
Keep in mind if you want to use additional services, you'll have to acquire your own API keys for those services and edit the entries accordingly in the `.env` file. Keep in mind if you want to use additional services, you'll have to acquire your own API keys for those services and edit the entries accordingly in the `.env` file.
@ -190,6 +193,7 @@ Keep in mind if you want to use additional services, you'll have to acquire your
This step will install the dependencies required for the application to run: This step will install the dependencies required for the application to run:
**Docker Build:** **Docker Build:**
```shell ```shell
npm run docker:run-once npm run docker:run-once
``` ```
@ -215,28 +219,28 @@ npm ci
This step applies to the Local build only; if you are using the Docker build please skip to Step 4. This step applies to the Local build only; if you are using the Docker build please skip to Step 4.
Unless you have MongoDB running in a setup different than the default, the URL stored as the `MONGOHQ_URL` value in the `.env` file should work fine. If you are using a custom configuration, modify this value as needed. Unless you have MongoDB running in a setup different than the default, the URL stored as the `MONGOHQ_URL` value in the `.env` file should work fine. If you are using a custom configuration, modify this value as needed.
Before you can run the application locally, you will need to start the MongoDB service: Before you can run the application locally, you will need to start the MongoDB service:
Start the MongoDB server in a separate terminal: Start the MongoDB server in a separate terminal:
- On macOS & Ubuntu: - On macOS & Ubuntu:
```sh ```sh
mongod mongod
``` ```
- On Windows, you must specify the full path to the `mongod` binary - On Windows, you must specify the full path to the `mongod` binary
```sh ```sh
"C:\Program Files\MongoDB\Server\3.6\bin\mongod" "C:\Program Files\MongoDB\Server\3.6\bin\mongod"
``` ```
Make sure to replace `3.6` with the version you have installed Make sure to replace `3.6` with the version you have installed
> ProTip: > [!TIP]
> You can avoid having to start MongoDB every time by installing it as a background service. > You can avoid having to start MongoDB every time by installing it as a background service. You can [learn more about it in their documentation for your OS](https://docs.mongodb.com/manual/administration/install-community/)
> You can [learn more about it in their documentation for your OS](https://docs.mongodb.com/manual/administration/install-community/)
Next, let's seed the database. In this step, we run the below command that fills the MongoDB server with some initial data sets that are required by services. These include a few schemas, among other things. Next, let's seed the database. In this step, we run the below command that fills the MongoDB server with some initial data sets that are required by services. These include a few schemas, among other things.
@ -245,31 +249,33 @@ npm run seed
``` ```
#### Step 4: Start the freeCodeCamp client application and API server #### Step 4: Start the freeCodeCamp client application and API server
You can now start up the API server and the client applications. You can now start up the API server and the client applications.
**Docker Build:** **Docker Build:**
```shell ```shell
npm run docker:develop npm run docker:develop
``` ```
**Local Build:** **Local Build:**
```sh ```sh
npm run develop npm run develop
``` ```
This single command will fire up all the services, including the API server and the client applications available for you to work on. This single command will fire up all the services, including the API server and the client applications available for you to work on.
Once ready, open a web browser and visit <http://localhost:8000>. If the app loads, congratulations you're all set! > [!NOTE]
> Once ready, open a web browser and **visit <http://localhost:8000>**. If the app loads, congratulations you're all set! You now have a copy of freeCodeCamp's entire learning platform running on your local machine.
> ProTip: > [!TIP]
> The API Server serves APIs at `http://localhost:3000` > The API Server serves APIs at `http://localhost:3000`. The Gatsby app serves the client application at `http://localhost:8000`
> The Gatsby app serves the client application at `http://localhost:8000`
If you visit <http://localhost:3000/explorer> you should see the available APIs. If you visit <http://localhost:3000/explorer> you should see the available APIs.
Congratulations 🎉🎉🎉! You now have a copy of freeCodeCamp's entire learning platform running on your local machine. ## Sign in with a local user
## How to Sign in when working locally
Your local setup automatically populates a local user in the database. Clicking the `Sign In` button will automatically authenticate you into the local application. Your local setup automatically populates a local user in the database. Clicking the `Sign In` button will automatically authenticate you into the local application.
However, accessing the user portfolio page is a little tricky. In development, Gatsby takes over serving the client-side pages and hence you will get a `404` page for the user portfolio when working locally. However, accessing the user portfolio page is a little tricky. In development, Gatsby takes over serving the client-side pages and hence you will get a `404` page for the user portfolio when working locally.
@ -278,219 +284,225 @@ Simply clicking the `Preview Custom 404 Page` button will forward you to the cor
![Image - How to sign in when working locally](https://user-images.githubusercontent.com/29990697/71541249-f63cdf00-2923-11ea-8a85-cefb6f9c9977.gif) ![Image - How to sign in when working locally](https://user-images.githubusercontent.com/29990697/71541249-f63cdf00-2923-11ea-8a85-cefb6f9c9977.gif)
## Quick commands reference when working locally ## Quick commands reference
A quick reference to the commands that you will need when working locally. A quick reference to the commands that you will need when working locally.
**Docker Build:** **Docker Build:**
| command | description | | command | description |
| ------- | ----------- | | ----------------------------------------------------- | ----------------------------------------------------------------------------------- |
| `npm run docker:init` | Prepare containers for installation of dependencies. | | `npm run docker:init` | Prepare containers for installation of dependencies. |
| `npm run docker:install` | Install / re-install all dependencies and bootstraps the different services. | | `npm run docker:install` | Install / re-install all dependencies and bootstraps the different services. |
| `npm run docker:seed` | Parse all the challenge markdown files and inserts them into MongoDB. | | `npm run docker:seed` | Parse all the challenge markdown files and inserts them into MongoDB. |
| `npm run docker:develop` | Start the freeCodeCamp API Server and Client Applications. | | `npm run docker:develop` | Start the freeCodeCamp API Server and Client Applications. |
| `npm run docker:test:init` | Bootstrap the test container, necessary for testing in docker. | | `npm run docker:test:init` | Bootstrap the test container, necessary for testing in docker. |
| `npm run docker:test -- -c "npm run test"` | Run all JS tests in the system, including client, server, lint and challenge tests. | | `npm run docker:test -- -c "npm run test"` | Run all JS tests in the system, including client, server, lint and challenge tests. |
| `npm run docker:test -- -c "npm run test:curriculum"` | Run the curriculum test suite. | | `npm run docker:test -- -c "npm run test:curriculum"` | Run the curriculum test suite. |
| `npm run docker:test -- -c "npm run test:client"` | Run the client test suite. | | `npm run docker:test -- -c "npm run test:client"` | Run the client test suite. |
| `npm run docker:test -- -c "npm run test:server"` | Run the server test suite. | | `npm run docker:test -- -c "npm run test:server"` | Run the server test suite. |
| `npm run docker:clean` | Uninstall all dependencies and cleans up caches. | | `npm run docker:clean` | Uninstall all dependencies and cleans up caches. |
**Local Build:** **Local Build:**
| command | description | | command | description |
| ------- | ----------- | | ------------------------- | ----------------------------------------------------------------------------------- |
| `npm ci` | Installs / re-install all dependencies and bootstraps the different services. | | `npm ci` | Installs / re-install all dependencies and bootstraps the different services. |
| `npm run seed` | Parses all the challenge markdown files and inserts them into MongoDB. | | `npm run seed` | Parses all the challenge markdown files and inserts them into MongoDB. |
| `npm run develop` | Starts the freeCodeCamp API Server and Client Applications. | | `npm run develop` | Starts the freeCodeCamp API Server and Client Applications. |
| `npm test` | Run all JS tests in the system, including client, server, lint and challenge tests. | | `npm test` | Run all JS tests in the system, including client, server, lint and challenge tests. |
| `npm run test:client` | Run the client test suite. | | `npm run test:client` | Run the client test suite. |
| `npm run test:curriculum` | Run the curriculum test suite. | | `npm run test:curriculum` | Run the curriculum test suite. |
| `npm run test:server` | Run the server test suite. | | `npm run test:server` | Run the server test suite. |
| `npm run clean` | Uninstalls all dependencies and cleans up caches. | | `npm run clean` | Uninstalls all dependencies and cleans up caches. |
## Making changes locally
## Making changes to your clone of freeCodeCamp locally
You can now make changes to files and commit your changes to your local clone of your fork. You can now make changes to files and commit your changes to your local clone of your fork.
Follow these steps: Follow these steps:
1. Validate that you are on the `master` branch: 1. Validate that you are on the `master` branch:
```sh ```sh
git status git status
``` ```
You should get an output like this: You should get an output like this:
```sh ```sh
On branch master On branch master
Your branch is up-to-date with 'origin/master'. Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean nothing to commit, working directory clean
``` ```
If you are not on master or your working directory is not clean, resolve any outstanding files/commits and checkout `master`: If you are not on master or your working directory is not clean, resolve any outstanding files/commits and checkout `master`:
```sh ```sh
git checkout master git checkout master
``` ```
2. Sync the latest changes from the freeCodeCamp upstream `master` branch to your local master branch: 2. Sync the latest changes from the freeCodeCamp upstream `master` branch to your local master branch:
**Note:** If you have any outstanding Pull Request that you made from the `master` branch of your fork, you will lose them at the end of this step. You should ensure your pull request is merged by a moderator before performing this step. To avoid this scenario, you should *always* work on a branch separate from master. > [!WARNING]
> If you have any outstanding pull request that you made from the `master` branch of your fork, you will lose them at the end of this step.
>
> You should ensure your pull request is merged by a moderator before performing this step. To avoid this scenario, you should **always** work on a branch other than the `master`.
This step **will sync the latest changes** from the main repository of freeCodeCamp. It is important that you rebase your branch on top of the latest `upstream/master` as often as possible to avoid conflicts later. This step **will sync the latest changes** from the main repository of freeCodeCamp. It is important that you rebase your branch on top of the latest `upstream/master` as often as possible to avoid conflicts later.
Update your local copy of the freeCodeCamp upstream repository: Update your local copy of the freeCodeCamp upstream repository:
```sh
git fetch upstream
```
Hard reset your master branch with the freeCodeCamp master: ```sh
git fetch upstream
```
```sh Hard reset your master branch with the freeCodeCamp master:
git reset --hard upstream/master
```
Push your master branch to your origin to have a clean history on your fork on GitHub: ```sh
git reset --hard upstream/master
```
```sh Push your master branch to your origin to have a clean history on your fork on GitHub:
git push origin master --force
```
You can validate your current master matches the upstream/master by performing a diff: ```sh
git push origin master --force
```
```sh You can validate your current master matches the upstream/master by performing a diff:
git diff upstream/master
```
The resulting output should be empty. ```sh
git diff upstream/master
```
The resulting output should be empty.
3. Create a fresh new branch: 3. Create a fresh new branch:
Working on a separate branch for each issue helps you keep your local work copy clean. You should never work on the `master`. This will soil your copy of freeCodeCamp and you may have to start over with a fresh clone or fork. Working on a separate branch for each issue helps you keep your local work copy clean. You should never work on the `master`. This will soil your copy of freeCodeCamp and you may have to start over with a fresh clone or fork.
Check that you are on `master` as explained previously, and branch off from there: Check that you are on `master` as explained previously, and branch off from there:
```sh ```sh
git checkout -b fix/update-guide-for-xyz git checkout -b fix/update-guide-for-xyz
``` ```
Your branch name should start with a `fix/`, `feat/`, `docs/`, etc. Avoid using issue numbers in branches. Keep them short, meaningful and unique. Your branch name should start with a `fix/`, `feat/`, `docs/`, etc. Avoid using issue numbers in branches. Keep them short, meaningful and unique.
Some examples of good branch names are: Some examples of good branch names are:
```md ```md
fix/update-challenges-for-react fix/update-challenges-for-react
fix/update-guide-for-html-css fix/update-guide-for-html-css
fix/platform-bug-sign-in-issues fix/platform-bug-sign-in-issues
feat/add-guide-article-for-javascript feat/add-guide-article-for-javascript
translate/add-spanish-basic-html translate/add-spanish-basic-html
``` ```
4. Edit pages and work on code in your favorite text editor. 4. Edit pages and work on code in your favorite text editor.
5. Once you are happy with the changes you should optionally run freeCodeCamp locally to preview the changes. 5. Once you are happy with the changes you should optionally run freeCodeCamp locally to preview the changes.
6. Make sure you fix any errors and check the formatting of your changes. We have style guides in the [docs](/docs/) section for the Guide articles and Coding challenges. 6. Make sure you fix any errors and check the formatting of your changes.
7. Check and confirm the files you are updating: 7. Check and confirm the files you are updating:
```sh ```sh
git status git status
``` ```
This should show a list of `unstaged` files that you have edited. This should show a list of `unstaged` files that you have edited.
```sh ```sh
On branch feat/documentation On branch feat/documentation
Your branch is up to date with 'upstream/feat/documentation'. Your branch is up to date with 'upstream/feat/documentation'.
Changes not staged for commit: Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed) (use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) (use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md modified: CONTRIBUTING.md
modified: docs/README.md modified: docs/README.md
modified: docs/how-to-setup-freecodecamp-locally.md modified: docs/how-to-setup-freecodecamp-locally.md
modified: docs/how-to-work-on-guide-articles.md modified: docs/how-to-work-on-guide-articles.md
... ...
``` ```
8. Stage the changes and make a commit: 8. Stage the changes and make a commit:
In this step, you should only mark files that you have edited or added yourself. You can perform a reset and resolve files that you did not intend to change if needed. In this step, you should only mark files that you have edited or added yourself. You can perform a reset and resolve files that you did not intend to change if needed.
```sh ```sh
git add path/to/my/changed/file.ext git add path/to/my/changed/file.ext
``` ```
Or you can add all the `unstaged` files to the staging area: Or you can add all the `unstaged` files to the staging area:
```sh ```sh
git add . git add .
``` ```
Only the files that were moved to the staging area will be added when you make a commit. Only the files that were moved to the staging area will be added when you make a commit.
```sh ```sh
git status git status
``` ```
Output: Output:
```sh
On branch feat/documentation
Your branch is up to date with 'upstream/feat/documentation'.
Changes to be committed: ```sh
(use "git reset HEAD <file>..." to unstage) On branch feat/documentation
Your branch is up to date with 'upstream/feat/documentation'.
modified: CONTRIBUTING.md Changes to be committed:
modified: docs/README.md (use "git reset HEAD <file>..." to unstage)
modified: docs/how-to-setup-freecodecamp-locally.md
modified: docs/how-to-work-on-guide-articles.md
```
Now, you can commit your changes with a short message like so: modified: CONTRIBUTING.md
modified: docs/README.md
modified: docs/how-to-setup-freecodecamp-locally.md
modified: docs/how-to-work-on-guide-articles.md
```
```sh Now, you can commit your changes with a short message like so:
git commit -m "fix: my short commit message"
```
Some examples: ```sh
git commit -m "fix: my short commit message"
```
```md Some examples:
fix: update guide article for Java - for loop
feat: add guide article for alexa skills
```
Optional: ```md
fix: update guide article for Java - for loop
feat: add guide article for alexa skills
```
We highly recommend making a conventional commit message. This is a good practice that you will see on some of the popular Open Source repositories. As a developer, this encourages you to follow standard practices. Optional:
Some examples of conventional commit messages are: We highly recommend making a conventional commit message. This is a good practice that you will see on some of the popular Open Source repositories. As a developer, this encourages you to follow standard practices.
```md Some examples of conventional commit messages are:
fix: update HTML guide article
fix: update build scripts for Travis-CI
feat: add article for JavaScript hoisting
docs: update contributing guidelines
```
Keep these short, not more than 50 characters. You can always add additional information in the description of the commit message. ```md
fix: update HTML guide article
fix: update build scripts for Travis-CI
feat: add article for JavaScript hoisting
docs: update contributing guidelines
```
This does not take any additional time than an unconventional message like 'update file' or 'add index.md' Keep these short, not more than 50 characters. You can always add additional information in the description of the commit message.
You can learn more about why you should use conventional commits [here](https://www.conventionalcommits.org/en/v1.0.0-beta.2/#why-use-conventional-commits). This does not take any additional time than an unconventional message like 'update file' or 'add index.md'
You can learn more about why you should use conventional commits [here](https://www.conventionalcommits.org/en/v1.0.0-beta.2/#why-use-conventional-commits).
9. If you realise that you need to edit a file or update the commit message after making a commit you can do so after editing the files with: 9. If you realise that you need to edit a file or update the commit message after making a commit you can do so after editing the files with:
```sh ```sh
git commit --amend git commit --amend
``` ```
This will open up a default text editor like `nano` or `vi` where you can edit the commit message title and add/edit the description. This will open up a default text editor like `nano` or `vi` where you can edit the commit message title and add/edit the description.
10. Next, you can push your changes to your fork: 10. Next, you can push your changes to your fork:
@ -499,17 +511,25 @@ Follow these steps:
``` ```
## Proposing a Pull Request (PR) ## Proposing a Pull Request (PR)
After you've committed your changes, check here for [how to open a Pull Request](/docs/how-to-open-a-pull-request.md).
## Getting Help After you've committed your changes, check here for [how to open a Pull Request](/how-to-open-a-pull-request.md).
If you are stuck and need help, let us know by asking in the ['Contributors' category on our forum](https://www.freecodecamp.org/forum/c/contributors) or the [Contributors chat room](https://gitter.im/FreeCodeCamp/Contributors) on Gitter.
There might be an error in the console of your browser or in Bash / Terminal / Command Line that will help identify the problem. Provide this error message in your problem description so others can more easily identify the issue and help you find a resolution. ## Troubleshooting
### Issues with installing the recommended prerequisites
We regularly develop on the latest or most popular operating systems like macOS 10.12 or later, Ubuntu 16.04 or later and Windows 10. It is recommended to research your specific issue on resources such as Google, Stack Overflow and Stack Exchange. There is a good chance that someone has faced the same issue and there is already an answer to your specific query.
If you are on a different OS and/or are still running into issues, see [getting help](#getting-help).
**Please avoid creating GitHub issues for prerequisite issues. They are out of the scope of this project.**
### Issues with the UI, Fonts, etc.
### Troubleshooting
If the app launches but you are encountering UI errors such as fonts not being loaded or the code editor not displaying properly, see the following depending on your local setup: If the app launches but you are encountering UI errors such as fonts not being loaded or the code editor not displaying properly, see the following depending on your local setup:
**Docker Build:** **Docker Build:**
```sh ```sh
# We use a mono repo and have multiple components (server, client, tools, plugins, etc.) # We use a mono repo and have multiple components (server, client, tools, plugins, etc.)
# Use this command to clean up all dependencies in all of the components # Use this command to clean up all dependencies in all of the components
@ -526,6 +546,7 @@ npm run docker:develop
``` ```
**Local Build:** **Local Build:**
```sh ```sh
npm run clean npm run clean
npm ci npm ci
@ -533,16 +554,20 @@ npm run seed
npm run develop npm run develop
``` ```
### Issues with API, Login, Challenge Submissions, etc.
If you can't sign in, and instead you see a banner with an error message that it will be reported to freeCodeCamp, please double-check that your local port 3000 is not in use by a different program. If you can't sign in, and instead you see a banner with an error message that it will be reported to freeCodeCamp, please double-check that your local port 3000 is not in use by a different program.
**On Windows - From Elevated PowerShell:** **On Windows - From Elevated PowerShell:**
```powershell ```powershell
netstat -ab | Select-String "3000" netstat -ab | Select-String "3000"
TCP 0.0.0.0:3000 DESKTOP LISTENING TCP 0.0.0.0:3000 DESKTOP LISTENING
``` ```
**On MacOS - From Terminal:** **On Linux/macOS - From Terminal:**
```sh ```sh
netstat -ab | grep "3000" netstat -ab | grep "3000"
@ -550,3 +575,9 @@ tcp4 0 0 0.0.0.0:3000 DESKTOP LISTEN
``` ```
If you get errors while installing the dependencies, please make sure that you are not in a restricted network or your firewall settings do not prevent you from accessing resources. One solution would be to use a VPN service if possible and allowed in your environment. If you get errors while installing the dependencies, please make sure that you are not in a restricted network or your firewall settings do not prevent you from accessing resources. One solution would be to use a VPN service if possible and allowed in your environment.
## Getting Help
If you are stuck and need help, let us know by asking in the ['Contributors' category on our forum](https://www.freecodecamp.org/forum/c/contributors) or the [Contributors chat room](https://gitter.im/FreeCodeCamp/Contributors) on Gitter.
There might be an error in the console of your browser or in Bash / Terminal / Command Line that will help identify the problem. Provide this error message in your problem description so others can more easily identify the issue and help you find a resolution.

View File

@ -1,8 +1,3 @@
<!-- do not translate this -->
| [Read these guidelines in other languages](/docs/i18n-languages) |
|-|
<!-- do not translate this -->
# How to use Docker on Windows Home # How to use Docker on Windows Home
There are a few pitfalls to be avoided when setting up docker on Windows Home. First of all you have to use [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) as Administrator. Unfortunately Windows Home does not support Docker for Windows Desktop, so Toolbox must be used instead. It has to be run as Administrator as the installation uses symlinks, which cannot be created otherwise. There are a few pitfalls to be avoided when setting up docker on Windows Home. First of all you have to use [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) as Administrator. Unfortunately Windows Home does not support Docker for Windows Desktop, so Toolbox must be used instead. It has to be run as Administrator as the installation uses symlinks, which cannot be created otherwise.

View File

@ -1,8 +1,3 @@
<!-- do not translate this -->
| [Read these guidelines in other languages](/docs/i18n-languages) |
|-|
<!-- do not translate this -->
# How to work on coding challenges # How to work on coding challenges
Our goal is to develop a fun and clear interactive learning experience. Our goal is to develop a fun and clear interactive learning experience.
@ -15,7 +10,9 @@ Creating these challenges requires immense creativity and attention to detail. T
With your help we can design an interactive coding curriculum that will help millions of people learn to code for years to come. With your help we can design an interactive coding curriculum that will help millions of people learn to code for years to come.
The content for each challenge is stored in its own markdown file. This markdown file is later converted to HTML using our tools to create interactive web pages. You can find all of freeCodeCamp.org's curricular content in the [`/curriculum`](/curriculum) directory. The content for each challenge is stored in its own markdown file. This markdown file is later converted to HTML using our tools to create interactive web pages.
You can find all of freeCodeCamp.org's curricular content in the [`/curriculum`](/curriculum) directory.
There are two ways you can work on these challenges: There are two ways you can work on these challenges:

71
docs/index.html Normal file
View File

@ -0,0 +1,71 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Contribution Guidelines | freeCodeCamp.org</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Description">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<!-- Theme -->
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsify-themeable@0/dist/css/theme-simple.css"> -->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify/themes/vue.css">
<!-- Custom theme stylesheet -->
<link rel="stylesheet" href="components/theme.css">
</head>
<body>
<div id="app"></div>
<script>
window.$docsify = {
// Main Config
name: 'freeCodeCamp.org',
logo: 'components/logo.svg',
loadSidebar: 'components/sidebar.md',
// Cover Page
/*
coverpage: 'components/cover.md',
onlyCover: true,
*/
// Navigation
auto2top: true,
maxLevel: 2,
subMaxLevel: 2,
// Plugins
search: {
depth: 3,
noData: 'No results!',
placeholder: 'Search...'
},
'flexible-alerts': {
style: 'flat'
},
pagination: {
crossChapter: true,
crossChapterText: true,
},
}
</script>
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
<!-- Theme -->
<!-- <script src="https://cdn.jsdelivr.net/npm/docsify-themeable@0"></script> -->
<!-- Plugins -->
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/emoji.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/zoom-image.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/docsify-copy-code@2"></script>
<script src="https://cdn.jsdelivr.net/npm/docsify@4/lib/plugins/search.js"></script>
<script src="https://cdn.jsdelivr.net/npm/docsify-plugin-flexible-alerts@1"></script>
<script src="//unpkg.com/docsify-pagination/dist/docsify-pagination.min.js"></script>
</html>