35 |
36 |
37 |
38 |
69 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature-request.yml:
--------------------------------------------------------------------------------
1 | name: Feature Request
2 | description: >-
3 | ✨ Got a feature suggestion for something we can implement to make the project
4 | better?
5 | title: '[FEATURE]: '
6 | body:
7 | - type: markdown
8 | attributes:
9 | value: >-
10 | I'm always looking for ways to improve the project, so if you've got any
11 | feature suggestions at all, I'd love to hear them! If possible, could
12 | you make sure your suggestion is possible to build, and if you have any
13 | links or ideas how it might be implemented that's really help!
14 | - type: textarea
15 | id: suggestion
16 | attributes:
17 | label: Feature Suggestion
18 | description: Please explain your feature suggestion
19 | validations:
20 | required: true
21 | - type: dropdown
22 | id: worky
23 | attributes:
24 | label: Would you be up for working on this?
25 | options:
26 | - 'No'
27 | - Maybe
28 | - Yes, but with support
29 | - Hell yeah!
30 | - type: checkboxes
31 | id: confirmation
32 | attributes:
33 | label: Pre-Submission Checklist
34 | options:
35 | - label: I have checked this issue has [not already been raised](https://github.com/Lissy93/git-into-open-source/issues?q=is%3Aissue)
36 | required: true
37 | - label: I've searched the [docs](https://github.com/Lissy93/git-into-open-source/tree/main/.github) for an answer
38 | required: true
39 | - label: I agree to follow thr [Code of Conduct](https://github.com/Lissy93/git-into-open-source/blob/main/.github/CODE_OF_CONDUCT.md)
40 | required: true
41 | - type: markdown
42 | attributes:
43 | value: >-
44 | 
45 | Thank you for taking the time to complete this ticket!
46 | You should receive a response within 48 hours :)
47 |
--------------------------------------------------------------------------------
/web/src/assets/scss/base/_reset.scss:
--------------------------------------------------------------------------------
1 | // | -------------------------------------------------------------
2 | // | > Reset
3 | // | -------------------------------------------------------------
4 |
5 | html {
6 | box-sizing: border-box;
7 | scroll-behavior: smooth;
8 |
9 | @media (prefers-reduced-motion: reduce) {
10 | scroll-behavior: auto;
11 |
12 | body * {
13 | animation-duration: 0s !important;
14 | animation-delay: 0s !important;
15 | }
16 | }
17 | }
18 |
19 | *,
20 | *::after,
21 | *::before {
22 | box-sizing: inherit;
23 | }
24 |
25 | blockquote,
26 | body,
27 | figure,
28 | h1,
29 | h2,
30 | h3,
31 | h4,
32 | h5,
33 | h6,
34 | hr,
35 | li,
36 | ol,
37 | p,
38 | pre,
39 | ul {
40 | margin: 0;
41 | padding: 0;
42 | }
43 |
44 | button,
45 | input,
46 | select,
47 | textarea {
48 | color: inherit;
49 | letter-spacing: inherit;
50 | font: inherit;
51 | }
52 |
53 | input[type="text"],
54 | textarea {
55 | width: 100%;
56 | }
57 |
58 | fieldset {
59 | padding: 0;
60 | border: none;
61 | }
62 |
63 | legend {
64 | margin-bottom: 0.5rem;
65 | max-width: 100%;
66 | }
67 |
68 | button,
69 | input,
70 | textarea {
71 | border: 1px solid gray;
72 | }
73 |
74 | button {
75 | padding: 0.75em 1em;
76 | border-radius: 0;
77 | background-color: transparent;
78 | line-height: 1;
79 | }
80 |
81 | button * {
82 | pointer-events: none;
83 | }
84 |
85 | button:hover {
86 | cursor: pointer;
87 | }
88 |
89 | embed,
90 | iframe,
91 | img,
92 | object,
93 | svg,
94 | video {
95 | display: block;
96 | max-width: 100%;
97 | }
98 |
99 | table {
100 | width: 100%;
101 | table-layout: fixed;
102 | }
103 |
104 | [hidden] {
105 | display: none !important;
106 | }
107 |
108 | noscript {
109 | display: block;
110 | margin-top: 1em;
111 | margin-bottom: 1em;
112 | }
113 |
114 | [tabindex="-1"] {
115 | outline: none !important;
116 | box-shadow: none !important;
117 | }
118 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug.yml:
--------------------------------------------------------------------------------
1 | name: Bug Report
2 | description: >-
3 | 🐛 Found something that isn't working as expected?
4 | Raise a ticket to get it fixed!
5 | title: '[BUG]: '
6 | assignees:
7 | - lissy93
8 | labels:
9 | - bug
10 | body:
11 | - type: dropdown
12 | id: component
13 | attributes:
14 | label: Component
15 | description: Which part of the project does this relate to?
16 | options:
17 | - lib - Scripts used to generate content
18 | - web - The website displaying content
19 | - guides - The content of the guides
20 | - user data - Something not the .yml files
21 | - other - Not specified
22 | validations:
23 | required: true
24 | - type: textarea
25 | id: issue
26 | attributes:
27 | label: Please describe the issue
28 | description: >-
29 | Give as much information as possible, including steps to reproduce,
30 | expected output and actual output. If relevant, give details of your
31 | system or browser.
32 | placeholder: 'When using XYZ, I do ABC, I expect to see DEF, but I actually see GHI. '
33 | validations:
34 | required: true
35 | - type: checkboxes
36 | id: confirmation
37 | attributes:
38 | label: Pre-Submission Checklist
39 | options:
40 | - label: I have checked this issue has [not already been raised](https://github.com/Lissy93/git-into-open-source/issues?q=is%3Aissue)
41 | required: true
42 | - label: I've searched the [docs](https://github.com/Lissy93/git-into-open-source/tree/main/.github) for an answer
43 | required: true
44 | - label: I agree to follow thr [Code of Conduct](https://github.com/Lissy93/git-into-open-source/blob/main/.github/CODE_OF_CONDUCT.md)
45 | required: true
46 | - type: markdown
47 | attributes:
48 | value: >-
49 | 
50 | Thank you for taking the time to complete this ticket!
51 | You should receive a response within 48 hours :)
52 |
--------------------------------------------------------------------------------
/.github/SUPPORT.md:
--------------------------------------------------------------------------------
1 | # Support
2 |
3 | First and foremost, thank you for using our project! We're committed to providing a welcoming environment and ensuring all users can utilize our work effectively. This document outlines the various avenues available if you need help.
4 |
5 | ## 📖 Documentation
6 |
7 | Before reaching out with your query, we recommend:
8 |
9 | 1. Reviewing the [`README`](/.github/README.md) for an overview of the project.
10 | 2. Checking out our [`CONTRIBUTING`](/.github/CONTRIBUTING.md) guidelines if you're looking to submit changes.
11 | 3. Familiarizing yourself with our [`CODE_OF_CONDUCT`](/.github/CODE_OF_CONDUCT.md) to understand community behavior expectations.
12 |
13 | ## 🐛 Bug Reports & Feature Requests
14 |
15 | If you've identified a bug or want to request a new feature:
16 |
17 | 1. Search the [Issues](https://github.com/lissy93/git-into-open-source/issues) to see if it's already been reported.
18 | 2. If not, open a new issue! Please provide as much information as possible to help us understand and address the issue quickly.
19 |
20 | ## 💬 Discussion & Questions
21 |
22 | For general discussion, questions about the project, or if you're unsure where to start:
23 |
24 | 1. Join our community chat (if applicable).
25 | 2. Start a discussion on the project's [Discussion tab](https://github.com/lissy93/git-into-open-source/discussions).
26 | 3. Reach out to the maintainers or community on [Twitter](https://twitter.com/Lissy_Sykes) or another social platform if you use one.
27 |
28 | ## 🚀 Get Involved!
29 |
30 | If you're excited about our project, there are many ways to get involved:
31 |
32 | 1. Star the repository – it helps boost visibility and shows your support!
33 | 2. Check out "good first issues" or "help wanted" tags in the [Issues section](https://github.com/lissy93/git-into-open-source/issues) to get started with contributions.
34 | 3. Spread the word in your network and community.
35 |
36 | ## 📧 Contact
37 |
38 | If you have specific concerns or need to reach out directly, contact the core maintainers:
39 |
40 | - **Your Name** - [Email](mailto:youremail@example.com)
41 |
42 |
--------------------------------------------------------------------------------
/web/src/layouts/MarkdownLayout.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import DefaultLayout from './DefaultLayout.astro'
3 |
4 | const { frontmatter } = Astro.props
5 | ---
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
78 |
--------------------------------------------------------------------------------
/.github/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | We currently support the latest version of our repository for security updates.
6 | As the repository mainly consists of static files and scripts, only the latest state is considered for patches.
7 |
8 | ## Reporting a Vulnerability
9 |
10 | Your security is paramount to us. If you discover any security-related issues or vulnerabilities, we encourage you to report them responsibly.
11 |
12 | Please do not report exploitable security vulnerabilities through public GitHub issues.
13 |
14 | ### How to Report
15 |
16 | - **Email**: Send your findings to security@mail.alicia.omg.lol. Please provide as much information as possible about the vulnerability, steps to reproduce, and its potential impact.
17 | - **Expect a Confirmation**: We will acknowledge receipt of your vulnerability report within 48 hours.
18 | - **Discussion**: After initial triage, we'll engage in further discussion with you about the issue, if necessary.
19 | - **Disclosure**: Once we've assessed the issue, we'll work on a fix. We appreciate your discretion, and we will strive to address and deploy fixes in a timely manner. We will also give credit for the reported vulnerability as per your preference.
20 |
21 | ## Scope
22 |
23 | We're especially interested in vulnerabilities in:
24 |
25 | - **Data Integrity**: Manipulations or unintended uses of the data in git-in-here.yml and resources.yml.
26 | - **Scripts in /lib/**: Any issues that could lead to data corruption, leak, or other security concerns.
27 | - **Static Website in /web/**: Vulnerabilities that might expose user data, lead to misinformation, or can manipulate the content displayed.
28 | - **Guides in /guides/**: Though these are mainly markdown files, any misuse that could lead to confusion or misinformation is crucial.
29 |
30 | While these are our primary areas of interest, any security-related concerns in other parts of the repository are also welcome.
31 | Safe Harbor
32 |
33 | We aim to encourage the responsible disclosure of security vulnerabilities. We will not take legal action against individuals who provide such reports. We consider ethical hacking activities conducted consistent with this policy a "permitted" action.
34 |
--------------------------------------------------------------------------------
/web/src/components/ResponsiveToggle.astro:
--------------------------------------------------------------------------------
1 |
11 |
12 |
37 |
38 |
63 |
--------------------------------------------------------------------------------
/guides/submit-your-first-pr-ui.md:
--------------------------------------------------------------------------------
1 | # Submit your first PR (UI)
2 |
3 | > This page is a work in progress. PRs welcome!
4 | > TODO: I'm going to make instructions clearer, and add screenshots
5 |
6 | ### 1. Fork the Repository
7 |
8 | - Start by visiting the GitHub page of the repository you want to contribute to.
9 | - In the top-right corner of the page, you'll see a button labeled "Fork". Click it.
10 | - This creates a copy of the repository under your GitHub account. You'll be redirected to your fork.
11 |
12 |
13 | ### 2. Make Changes
14 |
15 | - Browse through the repository files and directories by clicking on them.
16 | - Once you've located the file, click on it to view its contents.
17 | - Click on the pencil icon (it'll be labeled "Edit this file" when you hover over it) in the top-right corner of the file viewer.
18 | - Make your changes to the file in the editor that appears.
19 |
20 | ### 3. Commit the Changes
21 |
22 | - Scroll down to the bottom of the page. You'll see a section titled "Commit changes".
23 | - Enter a short, descriptive title for your changes in the "Commit changes" box.
24 | - Optionally, provide a more detailed description in the larger text box below.
25 | - Ensure the radio button "Create a new branch for this commit and start a pull request." is selected.
26 | - Click on the green "Commit changes" button.
27 |
28 | ### 4. Open a Pull Request (PR)
29 |
30 | - After committing, you'll be taken to a new page titled "Open a pull request".
31 | - GitHub will automatically fill in some details for the PR based on your commit message.
32 | - If you want, edit the title and description of the PR to provide more context or information about your changes. The more detailed and clear you are, the easier it will be for the maintainers.
33 | - Once you're ready, click on the green "Create pull request" button.
34 |
35 | ### 5. Await Feedback
36 |
37 | - The maintainers of the original repository will be notified of your pull request.
38 | - They might provide feedback or ask for changes. Make sure to keep an eye on the PR for any comments or notifications.
39 | - If changes are requested, you can make them directly in your forked repo through the GitHub UI, and they will automatically be added to the open PR.
40 |
41 | ### 6. Celebrate!
42 |
43 | - Once your pull request is approved and merged, you've officially contributed to the project!
44 |
--------------------------------------------------------------------------------
/.github/PRIVACY.md:
--------------------------------------------------------------------------------
1 | # Privacy Policy
2 |
3 | ## Our Commitment to Privacy
4 |
5 | We take your privacy seriously. Our primary goal is to be transparent and foster trust.
6 | We believe that you have the right to understand how your information is used and given the power to make informed decisions.
7 |
8 | ## Data We Collect
9 |
10 | The nature of our project means we inherently collect very minimal data:
11 |
12 | First-Party Services
13 | - **Plausible**: The website uses a self-hosted instance Plausible Analytics solely for hit counting. It respects the "Do Not Track" browser setting and does not collect any personal data. Learn more about how Plausible respects user privacy [here](https://plausible.io/privacy-focused-web-analytics).
14 |
15 | Third-Party Services
16 | - **GitHub**: Hosting our project on GitHub might subject you to their privacy practices. We don't have any additional tracking or data collection on top of what GitHub provides.
17 | - **Netlify**: Our website is hosted on Netlify. Any interactions with our site might be subjected to Netlify's privacy policy.
18 | - **CloudFlare**: We use CloudFlare to protect our website from malicious attacks. Any interactions with our site might be subjected to CloudFlare's privacy policy.
19 |
20 | ## No Personal Data Collection
21 |
22 | We promise we don't and won't ever collect personal data from our users. Your privacy is paramount, and we aim to respect it at every level of our project.
23 |
24 | ## Addressing Concerns
25 |
26 | If you have any concerns about privacy or data security, we are here to address them:
27 |
28 | - **Prompt Response**: Reach out to us, and we'll address your concerns as swiftly as possible.
29 | - **Openness to Questions**: Anything unclear? Any part of our setup you're curious about? Ask us. We're committed to clarity and transparency.
30 | - **Feedback Welcomed**: We're always striving to do better. If you see areas where we can improve in terms of privacy or have suggestions, we're all ears.
31 |
32 | ## Your Rights
33 |
34 | You have the right to:
35 |
36 | - **Ask Questions**: We're here to clarify, explain, and justify any of our practices.
37 | - **Request Removal**: If you ever feel your privacy might have been compromised or just want to ensure your data is not stored, let us know. We'll act promptly.
38 |
39 | Your trust is important to us, and we are committed to protecting your privacy and data at all times.
40 |
--------------------------------------------------------------------------------
/guides/open-source-for-businesses.md:
--------------------------------------------------------------------------------
1 |
2 | # Open Source for Business
3 |
4 | Wish you could do more open source work at your day job?
5 | The following article should give you some pointers that you can use to help you explain the business benefits of open source to your company or boss.
6 |
7 | ### Key Benefits
8 | - Attract a higher calibre of talent
9 | - Improve reputation and brand recognition among development circles
10 | - Reflects well on you from a technological and ethical perspective
11 | - Great experience for junior developers to contribute and learn
12 | - Opportunity to showcase and share your tech standards
13 | - Cost saving potential, as once a project is off the ground, external contributors often do the bulk of maintenance and improvements
14 | - Helps you innovate quicker, the open source code and content tends to move a lot faster than corporate and propriety alternatives
15 |
16 | ### Key Disadvantages / Considerations
17 | - Comprehensive review process needs to be in place, to ensure that any content you put out is correct, ethical and able to be shared publicly
18 | - Time constraints - This will take a bit of time to get setup and going
19 |
20 | ### Case Studies
21 | - [GCHQ](https://github.com/gchq) - They've made a number of their internal tools open source (like the famous [CyberChef](https://github.com/gchq/CyberChef)), now the majority of maintenance is done by the community
22 | - [ElseWhen](https://github.com/elsewhencode/) - A small digital consultancy, which published [project-guidelines](https://github.com/elsewhencode/project-guidelines) helping them get a reputation for good coding standards
23 | - [Novu](https://novu.co/) - They [write great posts](https://dev.to/novu) on dev.to, to share knowledge
24 | - [React](https://github.com/facebook/react) - Started by Facebook, React.JS has now seen over 1000 community contributors, helping with bug fixes, docs and feature development
25 | - RedHat - A multinational company who open source the majority of their offerings, were valued at $34b (by IBM, as of 2019)
26 |
27 | ### Methods
28 | - A GitHub organisation where employees can collate and share public components, utils and knowledge
29 | - By sponsoring existing projects, which are either up and coming, or that you rely upon to do our job
30 | - By contributing to existing projects, when the opportunity to do so arises
31 | - Writing blog posts on a developer-focused site, like Dev.to
32 |
33 |
--------------------------------------------------------------------------------
/web/src/components/Hero.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { Icon } from 'astro-icon'
3 | ---
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Git into
12 | Open Source
13 |
14 |
15 |
Tools, guides and resources to help you kickstart your open source journey
16 |
17 | Not sure where to start? Why not submit a PR adding your username to
18 |
19 | git-in-here.yml
20 | !
21 |
23 | An example of a blog with dynamic content fetched from JSONPlaceholder using the title, body and userId. The Accessible Astro Card Component is used here to display al the posts.
26 |
27 |
28 |
29 |
30 |
31 |
Post {page.start + 1} through {page.end + 1} of {page.total} total posts
32 |
33 | {
34 | page.data.map((post) => (
35 |
36 |
41 | {post.body}
42 |
43 |
44 | ))
45 | }
46 |
47 |
48 |
56 |
57 |
58 |
59 |
60 |
61 |
77 |
--------------------------------------------------------------------------------
/web/src/assets/img/octocat.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/resource-addition.yml:
--------------------------------------------------------------------------------
1 | name: Resource Addition
2 | description: 📚 Found a great resource we should include on in the list? Suggest it here!
3 | title: '[RESOURCE_ADDITION]: '
4 | body:
5 | - type: markdown
6 | attributes:
7 | value: >-
8 | Did you know you can submit resources directly, by editing
9 | [`resources.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/resources.yml)
10 | and opening a PR? If it's your first time, you might find [this
11 | guide](https://github.com/Lissy93/git-into-open-source/blob/main/guides/submit-your-first-pr-ui.md)
12 | helpful.
13 | - type: input
14 | id: resource-url
15 | attributes:
16 | label: Resource URL
17 | description: >-
18 | Please provide the URL to the resource you'd like considered for
19 | addition
20 | validations:
21 | required: true
22 | - type: input
23 | id: resource-description
24 | attributes:
25 | label: Resource Description
26 | description: Please provide a short description of the resource
27 | validations:
28 | required: true
29 | - type: textarea
30 | id: resource-justification
31 | attributes:
32 | label: Reasoning
33 | description: >-
34 | Please justify the addition of the resource. Why is it valuable to the
35 | community, what does it provide which isn't yet covered by existing
36 | resources
37 | - type: input
38 | id: resource-affiliation
39 | attributes:
40 | label: Affiliation
41 | description: >-
42 | Are you associated with this website or resource in any way? Declaring
43 | affiliation helps us keep things transparent.
44 | validations:
45 | required: true
46 | - type: dropdown
47 | id: worky
48 | attributes:
49 | label: Would you be up for submitting a PR for this?
50 | options:
51 | - 'No'
52 | - Maybe
53 | - Yes, but with support
54 | - Hell yeah!
55 | - type: checkboxes
56 | id: confirmation
57 | attributes:
58 | label: Pre-Submission Checklist
59 | options:
60 | - label: I have checked this issue has [not already been raised](https://github.com/Lissy93/git-into-open-source/issues?q=is%3Aissue)
61 | required: true
62 | - label: I've searched the [docs](https://github.com/Lissy93/git-into-open-source/tree/main/.github) for an answer
63 | required: true
64 | - label: I agree to follow thr [Code of Conduct](https://github.com/Lissy93/git-into-open-source/blob/main/.github/CODE_OF_CONDUCT.md)
65 | required: true
66 | - type: markdown
67 | attributes:
68 | value: >-
69 | 
70 | Thank you for taking the time to complete this ticket!
71 | You should receive a response within 48 hours :)
72 |
73 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/user-addition.yml:
--------------------------------------------------------------------------------
1 | name: Add your Name
2 | description: 👤 Contributor addition
3 | title: '[USER_ADDITION]: '
4 | body:
5 | - type: markdown
6 | attributes:
7 | value: >-
8 | If you want your name to be listed in the readme, you should submit a
9 | pull request, editing
10 | [`git-in-here.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/git-in-here.yml)
11 | and following the guidelines in the [contributing
12 | doc](https://github.com/Lissy93/git-into-open-source/blob/main/.github/CONTRIBUTING.md).
13 | If you're unsure how to get started, there are plenty of
14 | [guides](https://github.com/Lissy93/git-into-open-source#open-source-guides)
15 | and resources linked to in the readme
16 |
17 |
18 | You're welcome to proceed with submitting a ticket to get your response
19 | listed, but it may take much longer, and the preferred method is a PR
20 | (plus it's a great learning opportunity!)
21 | - type: dropdown
22 | id: worky
23 | attributes:
24 | label: Would you be up for submitting a PR for this?
25 | options:
26 | - 'No'
27 | - Maybe
28 | - Yes, but with support
29 | - Hell yeah!
30 | - type: dropdown
31 | id: question
32 | attributes:
33 | label: Question
34 | description: Reference of question you wish to answer (see git-in-here.yml for list)
35 | options:
36 | - Q1
37 | - Q2
38 | - Q3
39 | - Q4
40 | - Q5
41 | - Q6
42 | - Q7
43 | - Q8
44 | - Q9
45 | validations:
46 | required: true
47 | - type: input
48 | id: answer
49 | attributes:
50 | label: Answer
51 | description: The answer you wish to submit to your selected question
52 | validations:
53 | required: true
54 | - type: dropdown
55 | id: worky
56 | attributes:
57 | label: Would you be up for submitting a PR for this?
58 | options:
59 | - 'No'
60 | - Maybe
61 | - Yes, but with support
62 | - Hell yeah!
63 | - type: checkboxes
64 | id: confirmation
65 | attributes:
66 | label: Pre-Submission Checklist
67 | options:
68 | - label: I have checked this issue has [not already been raised](https://github.com/Lissy93/git-into-open-source/issues?q=is%3Aissue)
69 | required: true
70 | - label: I've searched the [docs](https://github.com/Lissy93/git-into-open-source/tree/main/.github) for an answer
71 | required: true
72 | - label: I agree to follow thr [Code of Conduct](https://github.com/Lissy93/git-into-open-source/blob/main/.github/CODE_OF_CONDUCT.md)
73 | required: true
74 | - type: markdown
75 | attributes:
76 | value: >-
77 | 
78 | Thank you for taking the time to complete this ticket!
79 | You should receive a response within 48 hours :)
80 |
81 |
--------------------------------------------------------------------------------
/web/src/pages/guides/submit-your-first-pr-ui.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: ../../layouts/MarkdownLayout.astro
3 | title: Submit your first PR (UI)
4 | description: Learn how to submit your first pull-request via the GitHub UI.
5 | author: None
6 | icon: 'fa:github'
7 | tags: 'None'
8 | index: '1'
9 | created: None
10 | updated: 2023-10-08
11 | ---
12 |
13 |
17 |
18 | # Submit your first PR (UI)
19 |
20 | > This page is a work in progress. PRs welcome!
21 | > TODO: I'm going to make instructions clearer, and add screenshots
22 |
23 | ### 1. Fork the Repository
24 |
25 | - Start by visiting the GitHub page of the repository you want to contribute to.
26 | - In the top-right corner of the page, you'll see a button labeled "Fork". Click it.
27 | - This creates a copy of the repository under your GitHub account. You'll be redirected to your fork.
28 |
29 |
30 | ### 2. Make Changes
31 |
32 | - Browse through the repository files and directories by clicking on them.
33 | - Once you've located the file, click on it to view its contents.
34 | - Click on the pencil icon (it'll be labeled "Edit this file" when you hover over it) in the top-right corner of the file viewer.
35 | - Make your changes to the file in the editor that appears.
36 |
37 | ### 3. Commit the Changes
38 |
39 | - Scroll down to the bottom of the page. You'll see a section titled "Commit changes".
40 | - Enter a short, descriptive title for your changes in the "Commit changes" box.
41 | - Optionally, provide a more detailed description in the larger text box below.
42 | - Ensure the radio button "Create a new branch for this commit and start a pull request." is selected.
43 | - Click on the green "Commit changes" button.
44 |
45 | ### 4. Open a Pull Request (PR)
46 |
47 | - After committing, you'll be taken to a new page titled "Open a pull request".
48 | - GitHub will automatically fill in some details for the PR based on your commit message.
49 | - If you want, edit the title and description of the PR to provide more context or information about your changes. The more detailed and clear you are, the easier it will be for the maintainers.
50 | - Once you're ready, click on the green "Create pull request" button.
51 |
52 | ### 5. Await Feedback
53 |
54 | - The maintainers of the original repository will be notified of your pull request.
55 | - They might provide feedback or ask for changes. Make sure to keep an eye on the PR for any comments or notifications.
56 | - If changes are requested, you can make them directly in your forked repo through the GitHub UI, and they will automatically be added to the open PR.
57 |
58 | ### 6. Celebrate!
59 |
60 | - Once your pull request is approved and merged, you've officially contributed to the project!
61 |
62 |
63 |
71 |
--------------------------------------------------------------------------------
/web/src/pages/guides/open-source-for-businesses.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: ../../layouts/MarkdownLayout.astro
3 | title: Open Source for Businesses
4 | description: See all the ways embracing open source can benefit your company.
5 | author: None
6 | icon: 'ic:round-business-center'
7 | tags: 'None'
8 | index: '4'
9 | created: None
10 | updated: 2023-10-08
11 | ---
12 |
13 |
17 |
18 |
19 | # Open Source for Business
20 |
21 | Wish you could do more open source work at your day job?
22 | The following article should give you some pointers that you can use to help you explain the business benefits of open source to your company or boss.
23 |
24 | ### Key Benefits
25 | - Attract a higher calibre of talent
26 | - Improve reputation and brand recognition among development circles
27 | - Reflects well on you from a technological and ethical perspective
28 | - Great experience for junior developers to contribute and learn
29 | - Opportunity to showcase and share your tech standards
30 | - Cost saving potential, as once a project is off the ground, external contributors often do the bulk of maintenance and improvements
31 | - Helps you innovate quicker, the open source code and content tends to move a lot faster than corporate and propriety alternatives
32 |
33 | ### Key Disadvantages / Considerations
34 | - Comprehensive review process needs to be in place, to ensure that any content you put out is correct, ethical and able to be shared publicly
35 | - Time constraints - This will take a bit of time to get setup and going
36 |
37 | ### Case Studies
38 | - [GCHQ](https://github.com/gchq) - They've made a number of their internal tools open source (like the famous [CyberChef](https://github.com/gchq/CyberChef)), now the majority of maintenance is done by the community
39 | - [ElseWhen](https://github.com/elsewhencode/) - A small digital consultancy, which published [project-guidelines](https://github.com/elsewhencode/project-guidelines) helping them get a reputation for good coding standards
40 | - [Novu](https://novu.co/) - They [write great posts](https://dev.to/novu) on dev.to, to share knowledge
41 | - [React](https://github.com/facebook/react) - Started by Facebook, React.JS has now seen over 1000 community contributors, helping with bug fixes, docs and feature development
42 | - RedHat - A multinational company who open source the majority of their offerings, were valued at $34b (by IBM, as of 2019)
43 |
44 | ### Methods
45 | - A GitHub organisation where employees can collate and share public components, utils and knowledge
46 | - By sponsoring existing projects, which are either up and coming, or that you rely upon to do our job
47 | - By contributing to existing projects, when the opportunity to do so arises
48 | - Writing blog posts on a developer-focused site, like Dev.to
49 |
50 |
51 |
52 |
60 |
--------------------------------------------------------------------------------
/guides/submit-your-first-pr-cli.md:
--------------------------------------------------------------------------------
1 | # Submit your first PR (Terminal)
2 |
3 | > This page is a work in progress. PRs welcome!
4 | > TODO: I'm going to make instructions clearer, and add screenshots
5 |
6 |
7 | ### 1. Fork the Repository
8 |
9 | - Start by visiting the GitHub page of the repository you wish to contribute to.
10 | - In the top-right corner of the page, click the "Fork" button. This will create a copy of the repository under your GitHub account.
11 |
12 | ### 2. Clone Your Forked Repository
13 |
14 | - On your forked repository's main page, click the green "Code" button. Copy the URL provided.
15 | - Open your terminal or command prompt and navigate to the directory where you want to clone the repository.
16 | Enter:
17 |
18 | ```bash
19 | git clone [URL you copied]
20 | ```
21 |
22 | This will create a local copy of your forked repository on your machine.
23 |
24 |
25 | ### 3. Navigate to the Repository's Directory
26 |
27 | Enter:
28 |
29 | ```bash
30 | cd [repository-name]
31 | ```
32 |
33 | ### 4. Set Upstream Remote
34 |
35 | To keep track of the original repository (often called the "upstream"), enter:
36 |
37 | ```bash
38 | git remote add upstream [original repository's URL]
39 | ```
40 |
41 | ### 5. Create a New Branch
42 |
43 | Always make changes in a new branch instead of directly on main or master. To create and switch to a new branch, enter:
44 |
45 | ```bash
46 | git checkout -b [branch-name]
47 | ```
48 |
49 | Choose a descriptive branch name related to the changes you're planning to make.
50 |
51 | ### 6. Make Your Changes
52 |
53 | Edit, add, or remove files as needed using your preferred text editor or IDE.
54 |
55 | ### 7. Stage and Commit Changes
56 |
57 | Stage your changes with:
58 |
59 | ```bash
60 | git add .
61 | ```
62 |
63 | Commit your changes with a descriptive message:
64 |
65 | ```bash
66 | git commit -m "Brief description of changes made"
67 | ```
68 |
69 | ### 8. Push Changes to Your Fork
70 |
71 | Push your changes to your forked repository on GitHub:
72 |
73 | ```bash
74 | git push origin [branch-name]
75 | ```
76 |
77 | ### 9. Open a Pull Request (PR)
78 |
79 | - Go back to your forked repository on GitHub.
80 | - Click the "New pull request" button (often GitHub will also present a quick link to create a PR from your recently pushed branch).
81 | - Ensure the base repository is the original repository you want to contribute to, and the head repository is your fork. Also, make sure the branch shown for your fork is the one you just pushed.
82 | - Fill in the PR title and description, detailing your changes and the reason for them.
83 | - Click "Create pull request".
84 |
85 | ### 10. Await Feedback
86 |
87 | - The maintainers of the original repository will review your PR.
88 | - They might request some changes. If they do, repeat steps 6-8, and the PR will automatically update with your new changes.
89 | - Engage in any discussions, answer questions, and make necessary changes as needed.
90 |
91 | ### 11. Keep Your Fork Synced
92 |
93 | Before starting new work, it's a good practice to fetch and merge changes from the upstream (original) repository:
94 |
95 | ```bash
96 | git checkout main
97 | git fetch upstream
98 | git merge upstream/main
99 | git push origin main
100 | ```
101 |
102 | ### 12. Celebrate!
103 |
104 | Once your PR is merged, you've made a successful contribution!
105 |
--------------------------------------------------------------------------------
/lib/insert_resource_list.py:
--------------------------------------------------------------------------------
1 | """
2 | Reads list of resources from the resources.yml
3 | Then inserts a link to each into the README.md
4 | """
5 |
6 | import os
7 | import yaml
8 | import logging
9 | from urllib.parse import urlparse
10 |
11 | # Configure Logging
12 | LOG_LEVEL = os.environ.get("LOG_LEVEL", "INFO").upper()
13 | logging.basicConfig(level=LOG_LEVEL)
14 | logger = logging.getLogger(__name__)
15 |
16 | # Determine the project root based on the script's location
17 | project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
18 | resources_file_path = os.path.join(project_root, 'resources.yml')
19 | guides_directory = os.path.join(project_root, 'guides')
20 | readme_path = os.path.join(project_root, '.github/README.md')
21 | icon_size=20
22 |
23 | logger.info("Reading the resources.yml file...")
24 | # Read the resources.yml
25 | with open(resources_file_path, 'r') as file:
26 | data = yaml.safe_load(file)
27 |
28 | # Check which guide files exist and prepare their markdown links
29 | guide_links = []
30 |
31 | for guide in data.get("guides", []):
32 | guide_file_path = os.path.join(guides_directory, f"{guide['file']}.md")
33 | if os.path.exists(guide_file_path):
34 | iconParams = f"?height={icon_size}&color=%23{guide.get('color', '00BBF9')}"
35 | icon = f'' if guide.get("icon") else ""
36 | guide_links.append(f"- {icon} [{guide['title']}](/guides/{guide['file']}.md)")
37 | logger.info(f"Guide file found and link prepared: {guide_file_path}")
38 | else:
39 | logger.warning(f"Guide file not found: {guide_file_path}")
40 |
41 | # Prepare markdown links for external resources
42 | logger.info("Preparing external resource links...")
43 | resource_links = []
44 | for resource in data.get("resources", []):
45 | resource_host = urlparse(resource['url']).hostname
46 | icon_tag = f""
47 | resource_links.append(f"- {icon_tag} [{resource['title']}]({resource['url']})")
48 |
49 | # Update the README.md between markers
50 | logger.info("Reading README.md file...")
51 | with open(readme_path, 'r') as file:
52 | readme_content = file.read()
53 |
54 | def update_content_between_markers(content, start_marker, end_marker, new_content):
55 | logger.info(f"Updating content between {start_marker} and {end_marker} markers...")
56 | start_index = content.find(start_marker)
57 | end_index = content.find(end_marker)
58 |
59 | if start_index != -1 and end_index != -1:
60 | before_section = content[:start_index + len(start_marker)]
61 | after_section = content[end_index:]
62 | updated_content = before_section + '\n' + '\n'.join(new_content) + '\n' + after_section
63 | return updated_content
64 | else:
65 | logger.error(f"Markers {start_marker} and {end_marker} not found.")
66 | return content
67 |
68 | # Update guides and resources in README.md
69 | readme_content = update_content_between_markers(readme_content, "", "", guide_links)
70 | readme_content = update_content_between_markers(readme_content, "", "", resource_links)
71 |
72 | # Write back the updated content to README.md
73 | logger.info("Writing back to README.md...")
74 | with open(readme_path, 'w') as file:
75 | file.write(readme_content)
76 |
77 | logger.info("Script completed successfully!")
78 |
--------------------------------------------------------------------------------
/web/src/assets/scss/base/_button.scss:
--------------------------------------------------------------------------------
1 | // | -------------------------------------------------------------
2 | // | Button
3 | // | -------------------------------------------------------------
4 |
5 | .button {
6 | display: inline-block;
7 | padding: 0.75rem 1rem;
8 | font-weight: bold;
9 | text-decoration: none;
10 | text-align: center;
11 | color: var(--neutral-900);
12 | background-color: var(--primary-100);
13 | border: 3px solid var(--primary-100);
14 | border-radius: 3px;
15 | transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
16 |
17 | &:hover,
18 | &:focus {
19 | text-decoration: underline;
20 | background-color: var(--primary-200);
21 | border-color: var(--primary-200);
22 | }
23 |
24 | &:visited {
25 | color: var(--neutral-900);
26 | }
27 |
28 | &.color-secondary {
29 | background-color: var(--secondary-100);
30 | border-color: (var(--secondary-100));
31 |
32 | &:hover,
33 | &:focus {
34 | background-color: var(--secondary-400);
35 | border-color: var(--secondary-400);
36 | }
37 | }
38 |
39 | &.color-neutral {
40 | background-color: var(--neutral-500);
41 | border-color: (var(--neutral-500));
42 |
43 | &:hover,
44 | &:focus {
45 | background-color: var(--neutral-400);
46 | border-color: var(--neutral-400);
47 | }
48 | }
49 |
50 | &.color-info {
51 | background-color: var(--info-300);
52 | border-color: (var(--info-300));
53 |
54 | &:hover,
55 | &:focus {
56 | background-color: var(--info-200);
57 | border-color: var(--info-200);
58 | }
59 | }
60 |
61 | &.color-success {
62 | background-color: var(--success-400);
63 | border-color: (var(--success-400));
64 |
65 | &:hover,
66 | &:focus {
67 | background-color: var(--success-300);
68 | border-color: var(--success-300);
69 | }
70 | }
71 |
72 | &.color-warning {
73 | background-color: var(--warning-400);
74 | border-color: (var(--warning-400));
75 |
76 | &:hover,
77 | &:focus {
78 | background-color: var(--warning-300);
79 | border-color: var(--warning-300);
80 | }
81 | }
82 |
83 | &.color-error {
84 | background-color: var(--error-300);
85 | border-color: (var(--error-300));
86 |
87 | &:hover,
88 | &:focus {
89 | background-color: var(--error-200);
90 | border-color: var(--error-200);
91 | }
92 | }
93 |
94 | &.size-tiny {
95 | padding: 0.125rem 0.25rem;
96 | font-size: 0.75rem;
97 | line-height: 1.125rem;
98 | }
99 |
100 | &.size-small {
101 | padding: 0.25rem 0.5rem;
102 | font-size: 0.875rem;
103 | line-height: 1.3125rem;
104 | }
105 |
106 | &.size-large {
107 | padding: 0.75rem 1rem;
108 | font-size: 1.125rem;
109 | line-height: 1.6875rem;
110 | }
111 |
112 | &.size-huge {
113 | padding: 1rem 2rem;
114 | font-size: 1.25rem;
115 | line-height: 1.875rem;
116 | }
117 |
118 | &.behavior-full {
119 | display: block;
120 | width: 100%;
121 | }
122 |
123 | &.type-secondary {
124 | background-color: transparent;
125 |
126 | &:hover,
127 | &:focus {
128 | background-color: transparent;
129 | }
130 | }
131 |
132 | &.has-icon {
133 | display: flex;
134 | align-items: center;
135 | gap: 0.5rem;
136 |
137 | [astro-icon] {
138 | width: 30px;
139 | }
140 | }
141 | }
142 |
143 | .darkmode .button.type-secondary {
144 | color: var(--neutral-100);
145 | }
146 |
--------------------------------------------------------------------------------
/web/src/layouts/DefaultLayout.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import '../assets/scss/globals.scss'
3 | import SiteMeta from '../components/SiteMeta.astro'
4 | import Header from '../components/Header.astro'
5 | import Footer from '../components/Footer.astro'
6 |
7 | const {
8 | title = 'Git into Open Source',
9 | description = 'Guides and resources to help you get started with open source software development.',
10 | url,
11 | image = '/social-preview-image.png',
12 | author = 'Alicia Sykes',
13 | } = Astro.props
14 | ---
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
111 |
112 |
113 |
--------------------------------------------------------------------------------
/resources.yml:
--------------------------------------------------------------------------------
1 |
2 |
3 | # A list of guides to display on the homepage + readme
4 | # Required Fields:
5 | # title - the title of the guide (max 60 chars)
6 | # description - a short description of the guide (max 120 chars)
7 | # file - filename of the doc must correspond to a file within the /guides directory
8 |
9 | # Optional Fields:
10 | # icon - group and name, find an icon here: https://icones.js.org/
11 | # color - a hex code but without the hash (#)
12 | # author - can be set to your name, or GH username if you want to be credited
13 | # tags - a list of strings that make searching for guides easier
14 | # index - a number that determines the order of the guides
15 | # created - date the guide was created, in the format YYYY-MM-DD
16 |
17 | guides:
18 | - title: Why Open Source?
19 | description: How open source can help you learn and grow as a developer.
20 | file: why-open-source
21 | icon: raphael:opensource
22 | color: 9B5DE5
23 | index: 0
24 |
25 | - title: Submit your first PR (UI)
26 | description: Learn how to submit your first pull-request via the GitHub UI.
27 | file: submit-your-first-pr-ui
28 | icon: fa:github
29 | color: F15BB5
30 | index: 1
31 |
32 | - title: Full Local Git Setup
33 | description: Step-by-step instructions for getting all prerequisites installed.
34 | file: local-git-setup
35 | icon: mdi:git
36 | color: FEE440
37 | index: 2
38 |
39 | - title: Submit your first PR (CLI)
40 | description: Learn how to submit your first code change to a project.
41 | file: submit-your-first-pr-cli
42 | icon: ion:git-branch
43 | color: 00BBF9
44 | index: 3
45 |
46 | - title: Other open source contributions
47 | description: Not a developer? There's many other ways you can contribute without coding!
48 | file: other-open-source-contributions
49 | icon: 'fa:heart'
50 |
51 | - title: Open Source for Businesses
52 | description: See all the ways embracing open source can benefit your company.
53 | file: open-source-for-businesses
54 | icon: ic:round-business-center
55 | color: 00F5D4
56 | index: 4
57 |
58 | # A list of helpful external resources
59 | resources:
60 | - title: Simple Introduction to Git
61 | url: https://rogerdudler.github.io/git-guide/
62 | - title: Open Source Guides from GitHub
63 | url: https://opensource.guide/
64 | - title: Good First Issue - Find beginner-friendly tickets
65 | url: https://goodfirstissue.dev/
66 | - title: First Contributions - Find projects to contribute to
67 | url: https://firstcontributions.github.io/
68 | - title: Code Triage - Find Projects to Contribute to
69 | url: https://www.codetriage.com/
70 | - title: Outreachy - Paid Open Source Internships for Beginners
71 | url: https://www.outreachy.org/
72 | - title: Learn Git - Comprehensive yet simple guide from BitBucket
73 | url: https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud
74 | - title: Git Immersion - Quick walk through of Git
75 | url: https://gitimmersion.com
76 | - title: Git Tips & Tricks
77 | url: https://github.com/git-tips/tips
78 | - title: GitHub Cheatsheet and Hidden Features
79 | url: https://github.com/tiimgreen/github-cheat-sheet
80 | - title: Git GUIs for Windows, Mac and Linux
81 | url: https://git-scm.com/downloads/guis
82 | - title: All about Git Hooks
83 | url: https://githooks.com/
84 | - title: Effective branching patterns of larger teams
85 | url: https://martinfowler.com/articles/branching-patterns.html
86 | - title: Choose an open source license
87 | url: https://choosealicense.com/
88 | - title: Git Command Explorer
89 | url: https://gitexplorer.com/
90 |
91 |
--------------------------------------------------------------------------------
/web/src/assets/scss/base/_font.scss:
--------------------------------------------------------------------------------
1 | // | -------------------------------------------------------------
2 | // | Font
3 | // | -------------------------------------------------------------
4 |
5 | @use 'breakpoint' as *;
6 |
7 | @font-face {
8 | font-family: 'Open Sans';
9 | src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url('/fonts/OpenSans-ExtraBold.woff2') format('woff2'),
10 | url('/fonts/OpenSans-ExtraBold.woff') format('woff');
11 | font-weight: bold;
12 | font-style: normal;
13 | font-display: swap;
14 | }
15 |
16 | @font-face {
17 | font-family: 'Open Sans';
18 | src: local('Open Sans Bold'), local('OpenSans-Bold'), url('/fonts/OpenSans-Bold.woff2') format('woff2'),
19 | url('/fonts/OpenSans-Bold.woff') format('woff');
20 | font-weight: bold;
21 | font-style: normal;
22 | font-display: swap;
23 | }
24 |
25 | @font-face {
26 | font-family: 'Open Sans';
27 | src: local('Open Sans Italic'), local('OpenSans-Italic'), url('/fonts/OpenSans-Italic.woff2') format('woff2'),
28 | url('/fonts/OpenSans-Italic.woff') format('woff');
29 | font-weight: normal;
30 | font-style: italic;
31 | font-display: swap;
32 | }
33 |
34 | @font-face {
35 | font-family: 'Open Sans';
36 | src: local('Open Sans Regular'), local('OpenSans-Regular'), url('/fonts/OpenSans-Regular.woff2') format('woff2'),
37 | url('/fonts/OpenSans-Regular.woff') format('woff');
38 | font-weight: normal;
39 | font-style: normal;
40 | font-display: swap;
41 | }
42 |
43 | body {
44 | font-family: var(--font-family-default);
45 | text-shadow: rgba(0, 0, 0, 0.01) 0 0 1px;
46 | text-rendering: optimizeLegibility;
47 | font-synthesis: none;
48 | font-size: 1rem;
49 | line-height: 1.5rem;
50 | -webkit-text-size-adjust: 100%;
51 | -moz-osx-font-smoothing: grayscale;
52 | -webkit-font-smoothing: antialiased;
53 |
54 | a:not(.button) {
55 | color: var(--action-color);
56 | text-decoration: underline;
57 |
58 | &:visited {
59 | color: var(--action-color);
60 | }
61 |
62 | &:hover,
63 | &:focus {
64 | color: var(--action-color-state);
65 | text-decoration: none;
66 | }
67 | }
68 |
69 | :where(main) a {
70 | word-wrap: break-word;
71 | word-break: break-word;
72 | }
73 |
74 | :where(h1, h2) {
75 | font-family: var(--font-family-special);
76 | }
77 |
78 | h1,
79 | h2 {
80 | font-weight: 800;
81 | }
82 |
83 | h3,
84 | h4,
85 | h5,
86 | h6 {
87 | font-weight: 600;
88 | }
89 |
90 | h1 {
91 | font-size: 2.25rem;
92 | line-height: 3.375rem;
93 |
94 | @include breakpoint(medium) {
95 | font-size: 3rem;
96 | line-height: 3.625rem;
97 | }
98 | }
99 |
100 | h2 {
101 | font-size: 1.875rem;
102 | line-height: 2.8125rem;
103 |
104 | @include breakpoint(medium) {
105 | font-size: 2.25rem;
106 | line-height: 3.375rem;
107 | }
108 | }
109 |
110 | h3 {
111 | font-size: 1.5rem;
112 | line-height: 2.25rem;
113 |
114 | @include breakpoint(medium) {
115 | font-size: 1.875rem;
116 | line-height: 2.8125rem;
117 | }
118 | }
119 |
120 | h4 {
121 | font-size: 1.25rem;
122 | line-height: 1.875rem;
123 |
124 | @include breakpoint(medium) {
125 | font-size: 1.5rem;
126 | line-height: 2.25rem;
127 | }
128 | }
129 |
130 | h5 {
131 | font-size: 1.125rem;
132 | line-height: 1.6875rem;
133 |
134 | @include breakpoint(medium) {
135 | font-size: 1.25rem;
136 | line-height: 1.875rem;
137 | h6 {
138 | font-size: 1rem;
139 | }
140 | }
141 |
142 | line-height: 1.5rem;
143 |
144 | @include breakpoint(medium) {
145 | font-size: 1.125rem;
146 | line-height: 1.6875rem;
147 | }
148 | }
149 | }
150 |
--------------------------------------------------------------------------------
/guides/roadmap.mmd:
--------------------------------------------------------------------------------
1 | %%{
2 | init: {
3 | 'theme': 'base',
4 | 'themeVariables': {
5 | 'primaryColor': '#d494ff',
6 | 'primaryTextColor': '#161618',
7 | 'primaryBorderColor': '#161618',
8 | 'lineColor': '#6befe0',
9 | 'secondaryColor': '#5F54D5',
10 | 'tertiaryColor': '#fff'
11 | }
12 | }
13 | }%%
14 |
15 | graph LR
16 |
17 | style A fill:#759ad5;
18 | style B fill:#9c86ee;
19 | style C fill:#9c86ee;
20 | style D fill:#9c86ee;
21 | style E fill:#9c86ee;
22 | style F fill:#9c86ee;
23 | style G fill:#9c86ee;
24 | style H fill:#9c86ee;
25 |
26 | A(fa:fa-code-branch Open Source Developer Roadmap)
27 |
28 | %% Stage 1
29 | A ==> B(fa:fa-play Stage 1: Introduction)
30 | B ==> B1(What is Open Source?)
31 | B1 --> B1a(Philosophy & Principles)
32 | B1 --> B1b(Benefits - Collaboration, Transparency, Community)
33 | B1 --> B1c(Challenges - Licensing, Governance, Sustainability)
34 |
35 | %% Stage 2
36 | A ==> C(fa:fa-wrench Stage 2: Fundamental Tools)
37 | C ==> C1(Version Control with Git)
38 | C1 --> C1a(Basics - Init, Add, Commit, Push, Pull)
39 | C1 --> C1b(Branching & Merging)
40 | C1 --> C1c(Handling Conflicts)
41 | C1 --> C1d(Best Practices)
42 |
43 | C ==> C2(Using GitHub/GitLab/Bitbucket)
44 | C2 --> C2a(Repositories, Issues & PRs)
45 | C2 --> C2b(Forking vs Cloning)
46 | C2 --> C2c(GitHub Actions - CI/CD Basics)
47 |
48 | %% Stage 3
49 | A ==> D(fa:fa-code Stage 3: Dive into Coding)
50 | D --> D1(Pick a Language)
51 | D1 --> D1a(Basics & Advanced Topics)
52 | D1 --> D1b(Libraries & Frameworks)
53 | D1 --> D1c(Community & Support)
54 |
55 | D ==> D2(Project Structure & Design Patterns)
56 | D2 --> D2a(Understanding Open Source Codebase)
57 | D2 --> D2b(Common Architectural Patterns)
58 | D2 --> D2c(Code Quality & Standards)
59 |
60 | %% Stage 4
61 | A ==> E(fa:fa-people-line Stage 4: Engaging with the Community)
62 | E ==> E1(Finding the Right Project)
63 | E1 --> E1a(Good First Issue & Beginner Friendly)
64 | E1 --> E1b(Project's Vision, Goals, and Roadmap)
65 |
66 | E ==> E2(Communication Skills)
67 | E2 --> E2a(Engaging in Discussions)
68 | E2 --> E2b(Reporting Bugs & Enhancements)
69 | E2 --> E2c(Code Review Ethics & Best Practices)
70 |
71 | %% Stage 5
72 | A ==> F(fa:fa-hands-holding-child Stage 5: Make Contributions)
73 | F ==> F1(Documentation & Testing)
74 | F1 --> F1a(Writing Clear Documentation)
75 | F1 --> F1b(Unit Testing & Test-Driven Development)
76 |
77 | F ==> F2(Bug Fixes & Feature Enhancements)
78 | F2 --> F2a(Debugging Strategies)
79 | F2 --> F2b(Collaborating with Project Maintainers)
80 |
81 | F ==> F3(Project Governance & Management)
82 | F3 --> F3a(Understanding Project's Governance Model)
83 | F3 --> F3b(Role of Maintainers, Contributors, and Users)
84 |
85 | %% Stage 6
86 | A ==> G(fa:fa-brain Stage 6: Advanced Topics)
87 | G ==> G1(Open Source Licensing)
88 | G1 --> G1a(Common Licenses - MIT, GPL, Apache)
89 | G1 --> G1b(Choosing a License for Your Project)
90 |
91 | G ==> G2(Sustainability & Monetization)
92 | G2 --> G2a(Donations, Crowdfunding, Grants)
93 | G2 --> G2b(Open Core, Dual Licensing, Paid Support Models)
94 |
95 | %% Stage 7
96 | A ==> H(fa:fa-rocket Stage 7: Your Own Project)
97 | H ==> H1(Starting a New Project)
98 | H1 --> H1a(Defining Vision & Scope)
99 | H1 --> H1b(Community Building & Management)
100 |
101 | H ==> H2(Continuous Integration & Deployment)
102 | H2 --> H2a(CI/CD Pipelines for Open Source)
103 | H2 --> H2b(Tools - Travis CI, CircleCI, GitHub Actions)
104 |
105 | H ==> H3(Project Leadership & Mentoring)
106 | H3 --> H3a(Nurturing New Contributors)
107 | H3 --> H3b(Setting & Managing Expectations)
108 |
--------------------------------------------------------------------------------
/lib/insert_roadmap.py:
--------------------------------------------------------------------------------
1 | """
2 | Inserts the dynamic roadmap into the readme, as a mermaid diagram.
3 | Also adds fallback .png with pako-encoded link to mermaid.live.
4 | """
5 |
6 | import os
7 | import json
8 | import zlib
9 | import base64
10 | import logging
11 |
12 | # Configure Logging
13 | LOG_LEVEL = os.environ.get("LOG_LEVEL", "INFO").upper()
14 | logging.basicConfig(level=LOG_LEVEL)
15 | logger = logging.getLogger(__name__)
16 |
17 | # Determine the project root based on the script's location
18 | project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
19 | mermaid_file = os.path.join(project_root, 'guides/roadmap.mmd')
20 | readme_path = os.path.join(project_root, '.github/README.md')
21 |
22 |
23 | def js_string_to_byte(data: str) -> bytes:
24 | """Convert a string to bytes using ascii encoding."""
25 | return bytes(data, 'ascii')
26 |
27 |
28 | def js_bytes_to_string(data: bytes) -> str:
29 | """Decode bytes to a string using ascii decoding."""
30 | return data.decode('ascii')
31 |
32 |
33 | def js_btoa(data: bytes) -> bytes:
34 | """Encode bytes to base64."""
35 | return base64.b64encode(data)
36 |
37 |
38 | def pako_deflate(data: bytes) -> bytes:
39 | """Compress the given bytes using zlib."""
40 | compress = zlib.compressobj(9, zlib.DEFLATED, 15, 8, zlib.Z_DEFAULT_STRATEGY)
41 | compressed_data = compress.compress(data)
42 | compressed_data += compress.flush()
43 | return compressed_data
44 |
45 |
46 | def encode_to_pako(graphMarkdown: str) -> str:
47 | """Encode the graph markdown to a pako format."""
48 | jGraph = {
49 | "code": graphMarkdown,
50 | "mermaid": {"theme": "default"}
51 | }
52 | byteStr = js_string_to_byte(json.dumps(jGraph))
53 | deflated = pako_deflate(byteStr)
54 | dEncode = js_btoa(deflated)
55 | return js_bytes_to_string(dEncode)
56 |
57 |
58 | def insert_mermaid_into_readme(mermaid_content: str) -> None:
59 | """Insert the mermaid content into the readme file."""
60 | logger.info("Preparing to insert mermaid content into readme")
61 |
62 | encoded_pako = encode_to_pako(mermaid_content)
63 | view_link = f"https://mermaid.live/view#pako:{encoded_pako}"
64 | edit_link = f"https://mermaid.live/edit#pako:{encoded_pako}"
65 | # image_link = f"https://mermaid.ink/img/pako:{encoded_pako}?type=png"
66 | # Todo: Dynamically generated png link doesn't seem to be working...
67 | image_link = "https://tinyurl.com/open-source-roadmap"
68 |
69 | try:
70 | with open(readme_path, "r") as f:
71 | readme_content = f.read()
72 |
73 | start_tag = ""
74 | end_tag = ""
75 |
76 | start_idx = readme_content.index(start_tag) + len(start_tag)
77 | end_idx = readme_content.index(end_tag)
78 |
79 | before = (
80 | "\n\n"
81 | "🦯 Click here if you cannot see the chart\n\n"
82 | f"This diagram is written using Mermaid- [view the chart source here]({edit_link})\n\n"
83 | f"[]({view_link})\n"
84 | "\n"
85 | "\n```mermaid\n"
86 | )
87 |
88 | after = "\n```\n"
89 |
90 | new_content = (
91 | readme_content[:start_idx] +
92 | before +
93 | mermaid_content +
94 | after +
95 | readme_content[end_idx:]
96 | )
97 |
98 | with open(readme_path, "w") as f:
99 | f.write(new_content)
100 |
101 | logger.info("Mermaid content successfully inserted into readme")
102 |
103 | except Exception as e:
104 | logger.error(f"Error inserting mermaid content: {e}")
105 | raise
106 |
107 |
108 | if __name__ == "__main__":
109 | try:
110 | logger.info("Starting the process...")
111 |
112 | with open(mermaid_file, 'r') as f:
113 | mermaid_content = f.read()
114 |
115 | insert_mermaid_into_readme(mermaid_content)
116 | logger.info("All Done!")
117 |
118 | except Exception as e:
119 | logger.error(f"An error occurred: {e}")
120 |
--------------------------------------------------------------------------------
/web/src/pages/guides/submit-your-first-pr-cli.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: ../../layouts/MarkdownLayout.astro
3 | title: Submit your first PR (CLI)
4 | description: Learn how to submit your first code change to a project.
5 | author: None
6 | icon: 'ion:git-branch'
7 | tags: 'None'
8 | index: '3'
9 | created: None
10 | updated: 2023-10-08
11 | ---
12 |
13 |
17 |
18 | # Submit your first PR (Terminal)
19 |
20 | > This page is a work in progress. PRs welcome!
21 | > TODO: I'm going to make instructions clearer, and add screenshots
22 |
23 |
24 | ### 1. Fork the Repository
25 |
26 | - Start by visiting the GitHub page of the repository you wish to contribute to.
27 | - In the top-right corner of the page, click the "Fork" button. This will create a copy of the repository under your GitHub account.
28 |
29 | ### 2. Clone Your Forked Repository
30 |
31 | - On your forked repository's main page, click the green "Code" button. Copy the URL provided.
32 | - Open your terminal or command prompt and navigate to the directory where you want to clone the repository.
33 | Enter:
34 |
35 | ```bash
36 | git clone [URL you copied]
37 | ```
38 |
39 | This will create a local copy of your forked repository on your machine.
40 |
41 |
42 | ### 3. Navigate to the Repository's Directory
43 |
44 | Enter:
45 |
46 | ```bash
47 | cd [repository-name]
48 | ```
49 |
50 | ### 4. Set Upstream Remote
51 |
52 | To keep track of the original repository (often called the "upstream"), enter:
53 |
54 | ```bash
55 | git remote add upstream [original repository's URL]
56 | ```
57 |
58 | ### 5. Create a New Branch
59 |
60 | Always make changes in a new branch instead of directly on main or master. To create and switch to a new branch, enter:
61 |
62 | ```bash
63 | git checkout -b [branch-name]
64 | ```
65 |
66 | Choose a descriptive branch name related to the changes you're planning to make.
67 |
68 | ### 6. Make Your Changes
69 |
70 | Edit, add, or remove files as needed using your preferred text editor or IDE.
71 |
72 | ### 7. Stage and Commit Changes
73 |
74 | Stage your changes with:
75 |
76 | ```bash
77 | git add .
78 | ```
79 |
80 | Commit your changes with a descriptive message:
81 |
82 | ```bash
83 | git commit -m "Brief description of changes made"
84 | ```
85 |
86 | ### 8. Push Changes to Your Fork
87 |
88 | Push your changes to your forked repository on GitHub:
89 |
90 | ```bash
91 | git push origin [branch-name]
92 | ```
93 |
94 | ### 9. Open a Pull Request (PR)
95 |
96 | - Go back to your forked repository on GitHub.
97 | - Click the "New pull request" button (often GitHub will also present a quick link to create a PR from your recently pushed branch).
98 | - Ensure the base repository is the original repository you want to contribute to, and the head repository is your fork. Also, make sure the branch shown for your fork is the one you just pushed.
99 | - Fill in the PR title and description, detailing your changes and the reason for them.
100 | - Click "Create pull request".
101 |
102 | ### 10. Await Feedback
103 |
104 | - The maintainers of the original repository will review your PR.
105 | - They might request some changes. If they do, repeat steps 6-8, and the PR will automatically update with your new changes.
106 | - Engage in any discussions, answer questions, and make necessary changes as needed.
107 |
108 | ### 11. Keep Your Fork Synced
109 |
110 | Before starting new work, it's a good practice to fetch and merge changes from the upstream (original) repository:
111 |
112 | ```bash
113 | git checkout main
114 | git fetch upstream
115 | git merge upstream/main
116 | git push origin main
117 | ```
118 |
119 | ### 12. Celebrate!
120 |
121 | Once your PR is merged, you've made a successful contribution!
122 |
123 |
124 |
132 |
--------------------------------------------------------------------------------
/lib/copy_resources_to_site.py:
--------------------------------------------------------------------------------
1 | """
2 | Reads the list of resources from the ./resources.yml
3 | For each file, metadata will be inserted as a header
4 | Then copies it over to the website's pages directory
5 | """
6 |
7 | import os
8 | import yaml
9 | import logging
10 | from pathlib import Path
11 | from datetime import datetime
12 |
13 |
14 | # Configure Logging
15 | LOG_LEVEL = os.environ.get("LOG_LEVEL", "INFO").upper()
16 | logging.basicConfig(level=LOG_LEVEL)
17 | logger = logging.getLogger(__name__)
18 |
19 |
20 | def read_file(file_path: str, mode: str = "r") -> str:
21 | try:
22 | with open(file_path, mode) as file:
23 | logger.info(f"Reading file: {file_path}")
24 | return yaml.safe_load(file)
25 | except FileNotFoundError:
26 | logger.error(f"Error: File {file_path} not found.")
27 | exit(1)
28 |
29 |
30 | def write_file(file_path: str, content: str, mode: str = "w") -> None:
31 | with open(file_path, mode) as f:
32 | logging.info(f"Writing to file: {file_path}")
33 | f.write(content)
34 |
35 |
36 | def main():
37 | # Get the project root, from location of this script
38 | project_root = Path(__file__).parent.parent
39 | # The location of the YAML file to read resource list from
40 | resources_file_path = project_root / "resources.yml"
41 | # The location of the source guide files
42 | guides_directory = project_root / "guides"
43 | # The location of the destination for the guide files
44 | destination_directory = project_root / "web/src/pages/guides"
45 |
46 | data = read_file(resources_file_path)
47 |
48 | for guide in data["guides"]:
49 | source_file_path = guides_directory / f"{guide['file']}.md"
50 |
51 | if source_file_path.exists():
52 | destination_file_path = destination_directory / f"{guide['file']}.md"
53 |
54 | header = (
55 | f"---\n"
56 | f"layout: ../../layouts/MarkdownLayout.astro\n"
57 | f"title: {guide.get('title')}\n"
58 | f"description: {guide.get('description')}\n"
59 | f"author: {guide.get('author')}\n"
60 | f"icon: '{guide.get('icon')}'\n"
61 | f"tags: '{guide.get('tags')}'\n"
62 | f"index: '{guide.get('index')}'\n"
63 | f"created: {guide.get('created')}\n"
64 | f"updated: {datetime.now().strftime('%Y-%m-%d')}\n"
65 | f"---\n\n"
66 |
67 | f"\n\n"
69 | )
70 |
71 | footer = (
72 | f"\n\n\n"
80 | )
81 |
82 | content = header + source_file_path.read_text() + footer
83 | write_file(destination_file_path, content)
84 | logging.info(f"Copied {source_file_path} to {destination_file_path}")
85 | else:
86 | logging.warning(f"Skipping {guide['file']} as doc could not be found in {source_file_path}")
87 |
88 | # Copy the contributing guidleines from ./CONTRIBUTING.md to /web/src/pages/contributing.md
89 | contributing_source_path = project_root / ".github/CONTRIBUTING.md"
90 | contributing_destination_path = project_root / "web/src/pages/contributing.md"
91 | content = contributing_source_path.read_text()
92 | contributing_headers = (
93 | f"---\n"
94 | f"layout: ../layouts/MarkdownLayout.astro\n"
95 | f"title: Contributing Guidelines\n"
96 | f"---\n\n"
97 | f"\n\n"
98 | )
99 | write_file(contributing_destination_path, contributing_headers + content)
100 | logging.info(f"Copied {contributing_source_path} to {contributing_destination_path}")
101 |
102 |
103 | if __name__ == "__main__":
104 | main()
105 |
--------------------------------------------------------------------------------
/web/public/favicon.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/web/src/assets/img/octocat-colored.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/web/src/components/Contributors.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import yaml from 'js-yaml';
3 |
4 | const GITHUB_TOKEN = process.env.GH_ACCESS_TOKEN;
5 |
6 | const repo = 'lissy93/git-into-open-source';
7 |
8 | const contributorCommentsUrl = `https://raw.githubusercontent.com/${repo}/main/git-in-here.yml`;
9 |
10 | const placeholderImage = 'https://i.ibb.co/X231Rq8/octo-no-one.png';
11 |
12 | const fetchGitHubUserInfo = async (username) => {
13 | const headers = GITHUB_TOKEN ? { 'Authorization': `token ${GITHUB_TOKEN}` } : undefined;
14 | const response = await fetch(`https://api.github.com/users/${username}`, { headers });
15 | if (!response.ok) return null;
16 | const userInfo = await response.json();
17 | return {
18 | fullName: userInfo.name || username,
19 | avatarUrl: userInfo.avatar_url || placeholderImage,
20 | };
21 | };
22 |
23 | const fetchContributorComments = async () => {
24 | const response = await fetch(contributorCommentsUrl);
25 | const textData = await response.text();
26 | const data = yaml.load(textData);
27 |
28 | if (!data || !data.contributors) return [];
29 |
30 | // Fetch GitHub user info for each contributor
31 | for (const contributor of data.contributors) {
32 | contributor.profile = `https://github.com/${contributor.username}`;
33 | const userInfo = await fetchGitHubUserInfo(contributor.username);
34 | if (userInfo) {
35 | contributor.fullName = userInfo.fullName;
36 | contributor.avatarUrl = userInfo.avatarUrl;
37 | }
38 | }
39 |
40 | return data.contributors.reverse();
41 | };
42 |
43 | const fetchStargazers = async (): Promise => {
44 | const headers = GITHUB_TOKEN ? { 'Authorization': `token ${GITHUB_TOKEN}` } : undefined;
45 | let url = `https://api.github.com/repos/${repo}/stargazers?per_page=100`;
46 | let stargazers = [];
47 |
48 | const getNextLink = (linkHeader) => {
49 | if (!linkHeader) return null;
50 | const links = linkHeader.split(',');
51 | const nextLink = links.find(link => link.includes('rel="next"'));
52 | if (!nextLink) return null;
53 | const match = nextLink.match(/<(.*)>/);
54 | return match ? match[1] : null;
55 | };
56 |
57 | while (url) {
58 | const response = await fetch(url, { headers });
59 | const data = await response.json();
60 |
61 | if (Array.isArray(data)) {
62 | stargazers = stargazers.concat(data.map(stargazer => stargazer.login.toLowerCase()));
63 | } else if (data.message && data.message.includes('API rate limit exceeded')) {
64 | console.warn("GitHub API rate limit exceeded");
65 | break;
66 | }
67 |
68 | url = getNextLink(response.headers.get('Link'));
69 | }
70 |
71 | return stargazers;
72 | };
73 |
74 | const contributors = await fetchContributorComments();
75 |
76 | const stargazers = await fetchStargazers();
77 |
78 | const stargazerClass = (username) => stargazers.includes(username.toLowerCase()) ? 'stargazer' : '';
79 |
80 | ---
81 |
82 |
83 |
84 | Want to be included here?
85 | Just add your name to git-in-here.yml,
86 | then check out the contributing guide to submit a PR.
87 |
104 |
105 |
106 |
187 |
--------------------------------------------------------------------------------
/guides/why-open-source.md:
--------------------------------------------------------------------------------
1 | # *Why Open Source Matters*
2 |
3 | *Open source software* refers to software whose source code is made freely available to the public. It's not just about the code; it encompasses a set of principles and practices that promote collaboration, transparency, and accessibility. 🌐🚀
4 |
5 | ## Collaborative Power 🤝👥
6 |
7 | | **Key Benefits** | **Description** |
8 | |-----------------------------|---------------------------------------------------------------|
9 | | Diverse Collaboration | Open source projects thrive on collaboration. Developers, designers, and enthusiasts from around the world come together to contribute their skills and expertise. |
10 | | Innovation Catalyst | This collaborative spirit leads to innovative solutions that may not have been possible in isolated environments. Different perspectives drive creative problem-solving. |
11 |
12 | ## Transparency and Trust 🔍✅
13 |
14 | | **Key Features** | **Description** |
15 | |-----------------------------|---------------------------------------------------------------|
16 | | Code Review | Transparency is a core principle of open source. Anyone can review the source code, ensuring it's secure, reliable, and aligned with its stated purpose. |
17 | | Building Trust | This transparency builds trust among users and contributors. Knowing that code is open to scrutiny instills confidence. |
18 |
19 | ## Learning and Skill Development 📚👨🎓
20 |
21 | | **Advantages** | **Description** |
22 | |-----------------------------|---------------------------------------------------------------|
23 | | Hands-On Learning | Open source services as an invaluable educational resource. Developers can study the code, learn best practices, and enhance their skills through hands-on experience. |
24 | | Community Mentorship | The open source community often provides mentorship and guidance to newcomers, fostering a culture of continuous learning. |
25 |
26 | ## Cost Reduction 💰📉
27 |
28 | | **Benefits** | **Description** |
29 | |-----------------------------|---------------------------------------------------------------|
30 | | Economic Benefits | Organizations can significantly reduce their software development costs by leveraging open source solutions. Instead of building from scratch, they can build upon existing projects, saving time and financial resources. |
31 | | Resource Optimization | Cost savings extend beyond development. Organizations can allocate resources to other critical areas while benefiting from high-quality open source tools. |
32 |
33 | ## Innovation and Rapid Development 🚀🔬
34 |
35 | | **Advantages** | **Description** |
36 | |-----------------------------|---------------------------------------------------------------|
37 | | Accelerated Development | Open source accelerates the pace of software development. Developers can build upon existing projects, leveraging the collective knowledge of the community. |
38 | | Fast Iteration | Rapid development cycles allow for quick iterations and feature enhancements, resulting in the creation of innovative solutions. |
39 |
40 | ## Accessibility and Inclusivity 🌍🌈
41 |
42 | | **Benefits** | **Description** |
43 | |-----------------------------|---------------------------------------------------------------|
44 | | Universal Access | Open source software is often free to use, making it accessible to a diverse global audience, regardless of financial constraints. |
45 | | Inclusive Development | The open source community welcomes contributors from various backgrounds, promoting inclusivity and diversity in technology. |
46 |
47 | ## Longevity and Sustainability 🕰️🌱
48 |
49 | | **Advantages** | **Description** |
50 | |-----------------------------|---------------------------------------------------------------|
51 | | Sustainability | Open source projects have the potential to thrive for years or even decades. This sustainability is made possible through the support of a dedicated community of contributors. |
52 | | Community Commitment | A strong community is invested in the project's success, ensuring its longevity and continuous improvement. |
53 |
54 | ## Customization and Flexibility 🛠️🧩
55 |
56 | | **Benefits** | **Description** |
57 | |-----------------------------|---------------------------------------------------------------|
58 | | Tailored Solutions | Organizations can customize open source software to meet their specific needs and requirements, ensuring that the software aligns perfectly with their goals. |
59 | | Flexible Workflows | The flexibility of open source tools allows organizations to adapt and optimize their workflows for maximum efficiency. |
60 |
61 | ## Ethical and Philosophical Considerations 🌟📜
62 |
63 | | **Aspects** | **Description** |
64 | |-----------------------------|---------------------------------------------------------------|
65 | | Values and Principles | Open source embodies ethical and philosophical values such as openness, freedom, and sharing for the greater good. |
66 | | Alignment with Principles | Some individuals and organizations are drawn to open source not only for its practical benefits but also because it aligns with their principles and beliefs. |
67 |
68 | In conclusion, open source is a powerful force in the world of technology, promoting collaboration, transparency, and innovation. It offers numerous advantages, from cost reduction to educational opportunities, and contributes to a global community that shares a common passion for creating and improving software. 🌍👏
69 |
70 |
--------------------------------------------------------------------------------
/.github/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | > This is our code of conduct, based upon the [Contributor Covenant](https://www.contributor-covenant.org/).
4 | > It outlines a set of core values and norms that are essential in a just and equitable software commons.
5 | > You must abide by these if you wish to contribute to this project.
6 | > For contributing guidelines - see [`CONTRIBUTING.md`](https://github.com/Lissy93/git-into-open-source/blob/main/.github/CONTRIBUTING.md)
7 | >
8 | > **TLDR; Don't be a d!ck**
9 |
10 | ## Our Pledge
11 |
12 | We as members, contributors, and leaders pledge to make participation in our
13 | community a harassment-free experience for everyone, regardless of age, body
14 | size, visible or invisible disability, ethnicity, sex characteristics, gender
15 | identity and expression, level of experience, education, socio-economic status,
16 | nationality, personal appearance, race, religion, or sexual identity
17 | and orientation.
18 |
19 | We pledge to act and interact in ways that contribute to an open, welcoming,
20 | diverse, inclusive, and healthy community.
21 |
22 | ## Our Standards
23 |
24 | Examples of behavior that contributes to a positive environment for our
25 | community include:
26 |
27 | * Demonstrating empathy and kindness toward other people
28 | * Being respectful of differing opinions, viewpoints, and experiences
29 | * Giving and gracefully accepting constructive feedback
30 | * Accepting responsibility and apologizing to those affected by our mistakes,
31 | and learning from the experience
32 | * Focusing on what is best not just for us as individuals, but for the
33 | overall community
34 |
35 | Examples of unacceptable behavior include:
36 |
37 | * The use of sexualized language or imagery, and sexual attention or
38 | advances of any kind
39 | * Trolling, insulting or derogatory comments, and personal or political attacks
40 | * Public or private harassment
41 | * Publishing others' private information, such as a physical or email
42 | address, without their explicit permission
43 | * Other conduct which could reasonably be considered inappropriate in a
44 | professional setting
45 |
46 | ## Enforcement Responsibilities
47 |
48 | Community leaders are responsible for clarifying and enforcing our standards of
49 | acceptable behavior and will take appropriate and fair corrective action in
50 | response to any behavior that they deem inappropriate, threatening, offensive,
51 | or harmful.
52 |
53 | Community leaders have the right and responsibility to remove, edit, or reject
54 | comments, commits, code, wiki edits, issues, and other contributions that are
55 | not aligned to this Code of Conduct, and will communicate reasons for moderation
56 | decisions when appropriate.
57 |
58 | ## Scope
59 |
60 | This Code of Conduct applies within all community spaces, and also applies when
61 | an individual is officially representing the community in public spaces.
62 | Examples of representing our community include using an official e-mail address,
63 | posting via an official social media account, or acting as an appointed
64 | representative at an online or offline event.
65 |
66 | ## Enforcement
67 |
68 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
69 | reported to the community leaders responsible for enforcement at
70 | alicia .
71 | All complaints will be reviewed and investigated promptly and fairly.
72 |
73 | All community leaders are obligated to respect the privacy and security of the
74 | reporter of any incident.
75 |
76 | ## Enforcement Guidelines
77 |
78 | Community leaders will follow these Community Impact Guidelines in determining
79 | the consequences for any action they deem in violation of this Code of Conduct:
80 |
81 | ### 1. Correction
82 |
83 | **Community Impact**: Use of inappropriate language or other behavior deemed
84 | unprofessional or unwelcome in the community.
85 |
86 | **Consequence**: A private, written warning from community leaders, providing
87 | clarity around the nature of the violation and an explanation of why the
88 | behavior was inappropriate. A public apology may be requested.
89 |
90 | ### 2. Warning
91 |
92 | **Community Impact**: A violation through a single incident or series
93 | of actions.
94 |
95 | **Consequence**: A warning with consequences for continued behavior. No
96 | interaction with the people involved, including unsolicited interaction with
97 | those enforcing the Code of Conduct, for a specified period of time. This
98 | includes avoiding interactions in community spaces as well as external channels
99 | like social media. Violating these terms may lead to a temporary or
100 | permanent ban.
101 |
102 | ### 3. Temporary Ban
103 |
104 | **Community Impact**: A serious violation of community standards, including
105 | sustained inappropriate behavior.
106 |
107 | **Consequence**: A temporary ban from any sort of interaction or public
108 | communication with the community for a specified period of time. No public or
109 | private interaction with the people involved, including unsolicited interaction
110 | with those enforcing the Code of Conduct, is allowed during this period.
111 | Violating these terms may lead to a permanent ban.
112 |
113 | ### 4. Permanent Ban
114 |
115 | **Community Impact**: Demonstrating a pattern of violation of community
116 | standards, including sustained inappropriate behavior, harassment of an
117 | individual, or aggression toward or disparagement of classes of individuals.
118 |
119 | **Consequence**: A permanent ban from any sort of public interaction within
120 | the community.
121 |
122 | ## Attribution
123 |
124 | This Code of Conduct is adapted from the [Contributor Covenant][homepage],
125 | version 2.0, available at
126 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
127 |
128 | Community Impact Guidelines were inspired by [Mozilla's code of conduct
129 | enforcement ladder](https://github.com/mozilla/diversity).
130 |
131 | [homepage]: https://www.contributor-covenant.org
132 |
133 | For answers to common questions about this code of conduct, see the FAQ at
134 | https://www.contributor-covenant.org/faq. Translations are available at
135 | https://www.contributor-covenant.org/translations.
136 |
--------------------------------------------------------------------------------
/guides/local-git-setup.md:
--------------------------------------------------------------------------------
1 | # Complete Git Setup
2 |
3 |
4 | > This page is a work in progress. PRs welcome!
5 | > TODO: I'm going to make instructions clearer, and add screenshots
6 |
7 | This document covers:
8 | - [Creating a GitHub Account](#creating-a-github-account)
9 | - [Installing Git](#installing-git)
10 | - [Setting up SSH keys](#setting-up-ssh-keys)
11 | - [Configuring the gitconfig](#configuring-the-gitconfig)
12 |
13 |
14 | ## Creating a GitHub Account
15 |
16 | ---
17 |
18 | ## Installing Git
19 |
20 | For official installation downloads and docs, see [git-scm.com/downloads](https://git-scm.com/downloads)
21 |
22 | ### Installing Git on Windows
23 |
24 | [Git for Windows](https://gitforwindows.org/) is a complete package of all the basic git tools you'll need, with an easy GUI installer.
25 |
26 | 1. Download the latest executable from [the Git for Windows Releases](https://github.com/git-for-windows/git/releases)
27 | 2. Run the installer (by double clicking on the downloaded .exe file)
28 | 3. Follow the on-screen instructions to install git onto your machine
29 | 4. Restart explorer.exe (so the new git executable can be found)
30 | 5. Run `git --version` to verify that git has been installed correctly
31 |
32 | ### Installing Git on Mac
33 |
34 | The easiest way to install Git on MacOS is via Homebrew.
35 |
36 | 1. If you don't yet have Brew installed, install it with:
37 | `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`
38 | 2. Then install git with
39 | `brew install git`
40 | 3. Finally, verify git has been installed
41 | `git --version`
42 |
43 | ### Installing Git on Linux
44 |
45 | On Linux, the best method for installing git is using your system's native package manager. Be sure to update your repositories first. You may need to run install commands as `sudo`
46 |
47 | - Debian / Ubuntu: `apt install git`
48 | - Fedora: `dnf install git`
49 | - OpenSUSE: `zypper install git`
50 | - Gentoo: `emerge --ask --verbose dev-vcs/git`
51 | - Arch: `pacman -S git`
52 | - NixOS: `nix-env -i git`
53 | - FreeBSD: `pkg install git`
54 | - OpenBSD: `pkg_add git`
55 | - Alpine: `apk add git`
56 |
57 | ---
58 |
59 | ## Setting up SSH keys
60 |
61 |
62 | ### Intro to SSH
63 |
64 | When you push to a repo, or make any changes from your local machine, you've got two options for auth, HTTPS or SSH. With HTTPS you'll be prompted to enter a username + password each time you push, whereas with SSH you are authenticated automatically if once your key is setup.
65 |
66 | #### What is SSH Auth?
67 | SSH (or Secure Shell) authentication is a method used to establish a secure connection between a client and a server using cryptographic key pairs: a public key (which you share) and a private key (kept secret on your machine).
68 |
69 | #### How It Works:
70 | 1. You generate an SSH key pair (a public key and a private key).
71 | 2. You add the public key to GitHub (or another platform).
72 | 3. When connecting to GitHub, it will challenge the client to prove they have the corresponding private key.
73 | 4. Your machine uses its private key to respond correctly, verifying your identity without ever revealing the key itself.
74 |
75 | #### Benefits Over HTTPS Clone:
76 | - **Security**: Keys are typically more complex than passwords, making them harder to crack.
77 | - **Convenience**: Once set up, no need to enter a username/password with each interaction.
78 | - **Access Control**: Key-based authentication allows finer-grained control, like read-only or full access.
79 |
80 | #### Note for New Users:
81 | It's essential to keep your private key secure and never share it. If someone gains access to it, they have access to everything the key provides access to. Also, using a passphrase when generating SSH keys adds an extra layer of security.
82 |
83 |
84 | ### Setting up SSH
85 |
86 | #### Generating an SSH key
87 |
88 | You may already have a key, in which case you can skip this step. If you do, it'll likely be in a directory named `~/.ssh/`, you can check this by running `ls -al ~/.ssh` - if you see output, and a file ending in `.pub` then you've already got a key!
89 |
90 | Otherwise, we'll generate a new key by running:
91 |
92 | ```bash
93 | ssh-keygen -t ed25519 -C "your_email@example.com"
94 | ```
95 |
96 | Note for legacy systems
97 | For legacy systems which does not support Ed25519 algorithm, use:
98 |
99 | ```bash
100 | ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
101 | ```
102 |
103 |
104 |
105 | When prompted, complete the form (if you choose to set a password, be sure to remember or make note of it!)
106 |
107 | Next we should to ensure that the SSH agent is running, and that the key is added to it.
108 |
109 | ```
110 | eval "$(ssh-agent -s)"
111 | ssh-add ~/.ssh/id_rsa
112 | ```
113 |
114 | #### Adding your key to GitHub
115 |
116 | Next we need to add the public key to your GitHub profile.
117 |
118 | Copy the contents of your newly generated SSH public key (the one ending in `.pub`). You can view the file by running `cat ~/.ssh/id_ed25519.pub` (if you named your key something else, update that accordingly)
119 |
120 | Next head over to GitHub, and log into your account:
121 | 1. Click on your profile photo, then click on Settings.
122 | 2. In the left sidebar, click on SSH and GPG keys.
123 | 3. Click the New SSH key button.
124 | 4. Paste Your Key
125 | 5. In the "Title" field, enter a descriptive label (like "My Laptop" or "Work PC").
126 | 6. Paste your key into the "Key" field.
127 | 7. Click Add SSH key.
128 |
129 |
130 | ---
131 |
132 | ## Configuring the gitconfig
133 |
134 |
135 | Like other applications and services, git is configurable through a dotfile. You'll likely find your git config in `~/.gitconfig` - but it can be managed using the `git config` command.
136 |
137 | Before we make our first commit, there's a few things we need to setup in the git config. We can do this by running the following commands:
138 |
139 | ```bash
140 | git config --global user.name "Your Full Name"
141 | git config --global user.email "youremail@example.com"
142 | ```
143 |
144 | That's all you need for now, but there's many other settings which can be tweaked here, such as setting shorthand aliases, default editor/ conflict / diff programs, enabling features, using plugins, etc. It's also possible (and sometimes preferable) to have different git configurations for different projects.
145 |
146 | To learn about those, see the [Git Configuration](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration).
147 |
--------------------------------------------------------------------------------
/web/src/pages/guides/why-open-source.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: ../../layouts/MarkdownLayout.astro
3 | title: Why Open Source?
4 | description: How open source can help you learn and grow as a developer.
5 | author: None
6 | icon: 'raphael:opensource'
7 | tags: 'None'
8 | index: '0'
9 | created: None
10 | updated: 2023-10-08
11 | ---
12 |
13 |
17 |
18 | # *Why Open Source Matters*
19 |
20 | *Open source software* refers to software whose source code is made freely available to the public. It's not just about the code; it encompasses a set of principles and practices that promote collaboration, transparency, and accessibility. 🌐🚀
21 |
22 | ## Collaborative Power 🤝👥
23 |
24 | | **Key Benefits** | **Description** |
25 | |-----------------------------|---------------------------------------------------------------|
26 | | Diverse Collaboration | Open source projects thrive on collaboration. Developers, designers, and enthusiasts from around the world come together to contribute their skills and expertise. |
27 | | Innovation Catalyst | This collaborative spirit leads to innovative solutions that may not have been possible in isolated environments. Different perspectives drive creative problem-solving. |
28 |
29 | ## Transparency and Trust 🔍✅
30 |
31 | | **Key Features** | **Description** |
32 | |-----------------------------|---------------------------------------------------------------|
33 | | Code Review | Transparency is a core principle of open source. Anyone can review the source code, ensuring it's secure, reliable, and aligned with its stated purpose. |
34 | | Building Trust | This transparency builds trust among users and contributors. Knowing that code is open to scrutiny instills confidence. |
35 |
36 | ## Learning and Skill Development 📚👨🎓
37 |
38 | | **Advantages** | **Description** |
39 | |-----------------------------|---------------------------------------------------------------|
40 | | Hands-On Learning | Open source services as an invaluable educational resource. Developers can study the code, learn best practices, and enhance their skills through hands-on experience. |
41 | | Community Mentorship | The open source community often provides mentorship and guidance to newcomers, fostering a culture of continuous learning. |
42 |
43 | ## Cost Reduction 💰📉
44 |
45 | | **Benefits** | **Description** |
46 | |-----------------------------|---------------------------------------------------------------|
47 | | Economic Benefits | Organizations can significantly reduce their software development costs by leveraging open source solutions. Instead of building from scratch, they can build upon existing projects, saving time and financial resources. |
48 | | Resource Optimization | Cost savings extend beyond development. Organizations can allocate resources to other critical areas while benefiting from high-quality open source tools. |
49 |
50 | ## Innovation and Rapid Development 🚀🔬
51 |
52 | | **Advantages** | **Description** |
53 | |-----------------------------|---------------------------------------------------------------|
54 | | Accelerated Development | Open source accelerates the pace of software development. Developers can build upon existing projects, leveraging the collective knowledge of the community. |
55 | | Fast Iteration | Rapid development cycles allow for quick iterations and feature enhancements, resulting in the creation of innovative solutions. |
56 |
57 | ## Accessibility and Inclusivity 🌍🌈
58 |
59 | | **Benefits** | **Description** |
60 | |-----------------------------|---------------------------------------------------------------|
61 | | Universal Access | Open source software is often free to use, making it accessible to a diverse global audience, regardless of financial constraints. |
62 | | Inclusive Development | The open source community welcomes contributors from various backgrounds, promoting inclusivity and diversity in technology. |
63 |
64 | ## Longevity and Sustainability 🕰️🌱
65 |
66 | | **Advantages** | **Description** |
67 | |-----------------------------|---------------------------------------------------------------|
68 | | Sustainability | Open source projects have the potential to thrive for years or even decades. This sustainability is made possible through the support of a dedicated community of contributors. |
69 | | Community Commitment | A strong community is invested in the project's success, ensuring its longevity and continuous improvement. |
70 |
71 | ## Customization and Flexibility 🛠️🧩
72 |
73 | | **Benefits** | **Description** |
74 | |-----------------------------|---------------------------------------------------------------|
75 | | Tailored Solutions | Organizations can customize open source software to meet their specific needs and requirements, ensuring that the software aligns perfectly with their goals. |
76 | | Flexible Workflows | The flexibility of open source tools allows organizations to adapt and optimize their workflows for maximum efficiency. |
77 |
78 | ## Ethical and Philosophical Considerations 🌟📜
79 |
80 | | **Aspects** | **Description** |
81 | |-----------------------------|---------------------------------------------------------------|
82 | | Values and Principles | Open source embodies ethical and philosophical values such as openness, freedom, and sharing for the greater good. |
83 | | Alignment with Principles | Some individuals and organizations are drawn to open source not only for its practical benefits but also because it aligns with their principles and beliefs. |
84 |
85 | In conclusion, open source is a powerful force in the world of technology, promoting collaboration, transparency, and innovation. It offers numerous advantages, from cost reduction to educational opportunities, and contributes to a global community that shares a common passion for creating and improving software. 🌍👏
86 |
87 |
88 |
89 |
97 |
--------------------------------------------------------------------------------
/web/src/pages/guides/local-git-setup.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: ../../layouts/MarkdownLayout.astro
3 | title: Full Local Git Setup
4 | description: Step-by-step instructions for getting all prerequisites installed.
5 | author: None
6 | icon: 'mdi:git'
7 | tags: 'None'
8 | index: '2'
9 | created: None
10 | updated: 2023-10-08
11 | ---
12 |
13 |
17 |
18 | # Complete Git Setup
19 |
20 |
21 | > This page is a work in progress. PRs welcome!
22 | > TODO: I'm going to make instructions clearer, and add screenshots
23 |
24 | This document covers:
25 | - [Creating a GitHub Account](#creating-a-github-account)
26 | - [Installing Git](#installing-git)
27 | - [Setting up SSH keys](#setting-up-ssh-keys)
28 | - [Configuring the gitconfig](#configuring-the-gitconfig)
29 |
30 |
31 | ## Creating a GitHub Account
32 |
33 | ---
34 |
35 | ## Installing Git
36 |
37 | For official installation downloads and docs, see [git-scm.com/downloads](https://git-scm.com/downloads)
38 |
39 | ### Installing Git on Windows
40 |
41 | [Git for Windows](https://gitforwindows.org/) is a complete package of all the basic git tools you'll need, with an easy GUI installer.
42 |
43 | 1. Download the latest executable from [the Git for Windows Releases](https://github.com/git-for-windows/git/releases)
44 | 2. Run the installer (by double clicking on the downloaded .exe file)
45 | 3. Follow the on-screen instructions to install git onto your machine
46 | 4. Restart explorer.exe (so the new git executable can be found)
47 | 5. Run `git --version` to verify that git has been installed correctly
48 |
49 | ### Installing Git on Mac
50 |
51 | The easiest way to install Git on MacOS is via Homebrew.
52 |
53 | 1. If you don't yet have Brew installed, install it with:
54 | `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`
55 | 2. Then install git with
56 | `brew install git`
57 | 3. Finally, verify git has been installed
58 | `git --version`
59 |
60 | ### Installing Git on Linux
61 |
62 | On Linux, the best method for installing git is using your system's native package manager. Be sure to update your repositories first. You may need to run install commands as `sudo`
63 |
64 | - Debian / Ubuntu: `apt install git`
65 | - Fedora: `dnf install git`
66 | - OpenSUSE: `zypper install git`
67 | - Gentoo: `emerge --ask --verbose dev-vcs/git`
68 | - Arch: `pacman -S git`
69 | - NixOS: `nix-env -i git`
70 | - FreeBSD: `pkg install git`
71 | - OpenBSD: `pkg_add git`
72 | - Alpine: `apk add git`
73 |
74 | ---
75 |
76 | ## Setting up SSH keys
77 |
78 |
79 | ### Intro to SSH
80 |
81 | When you push to a repo, or make any changes from your local machine, you've got two options for auth, HTTPS or SSH. With HTTPS you'll be prompted to enter a username + password each time you push, whereas with SSH you are authenticated automatically if once your key is setup.
82 |
83 | #### What is SSH Auth?
84 | SSH (or Secure Shell) authentication is a method used to establish a secure connection between a client and a server using cryptographic key pairs: a public key (which you share) and a private key (kept secret on your machine).
85 |
86 | #### How It Works:
87 | 1. You generate an SSH key pair (a public key and a private key).
88 | 2. You add the public key to GitHub (or another platform).
89 | 3. When connecting to GitHub, it will challenge the client to prove they have the corresponding private key.
90 | 4. Your machine uses its private key to respond correctly, verifying your identity without ever revealing the key itself.
91 |
92 | #### Benefits Over HTTPS Clone:
93 | - **Security**: Keys are typically more complex than passwords, making them harder to crack.
94 | - **Convenience**: Once set up, no need to enter a username/password with each interaction.
95 | - **Access Control**: Key-based authentication allows finer-grained control, like read-only or full access.
96 |
97 | #### Note for New Users:
98 | It's essential to keep your private key secure and never share it. If someone gains access to it, they have access to everything the key provides access to. Also, using a passphrase when generating SSH keys adds an extra layer of security.
99 |
100 |
101 | ### Setting up SSH
102 |
103 | #### Generating an SSH key
104 |
105 | You may already have a key, in which case you can skip this step. If you do, it'll likely be in a directory named `~/.ssh/`, you can check this by running `ls -al ~/.ssh` - if you see output, and a file ending in `.pub` then you've already got a key!
106 |
107 | Otherwise, we'll generate a new key by running:
108 |
109 | ```bash
110 | ssh-keygen -t ed25519 -C "your_email@example.com"
111 | ```
112 |
113 | Note for legacy systems
114 | For legacy systems which does not support Ed25519 algorithm, use:
115 |
116 | ```bash
117 | ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
118 | ```
119 |
120 |
121 |
122 | When prompted, complete the form (if you choose to set a password, be sure to remember or make note of it!)
123 |
124 | Next we should to ensure that the SSH agent is running, and that the key is added to it.
125 |
126 | ```
127 | eval "$(ssh-agent -s)"
128 | ssh-add ~/.ssh/id_rsa
129 | ```
130 |
131 | #### Adding your key to GitHub
132 |
133 | Next we need to add the public key to your GitHub profile.
134 |
135 | Copy the contents of your newly generated SSH public key (the one ending in `.pub`). You can view the file by running `cat ~/.ssh/id_ed25519.pub` (if you named your key something else, update that accordingly)
136 |
137 | Next head over to GitHub, and log into your account:
138 | 1. Click on your profile photo, then click on Settings.
139 | 2. In the left sidebar, click on SSH and GPG keys.
140 | 3. Click the New SSH key button.
141 | 4. Paste Your Key
142 | 5. In the "Title" field, enter a descriptive label (like "My Laptop" or "Work PC").
143 | 6. Paste your key into the "Key" field.
144 | 7. Click Add SSH key.
145 |
146 |
147 | ---
148 |
149 | ## Configuring the gitconfig
150 |
151 |
152 | Like other applications and services, git is configurable through a dotfile. You'll likely find your git config in `~/.gitconfig` - but it can be managed using the `git config` command.
153 |
154 | Before we make our first commit, there's a few things we need to setup in the git config. We can do this by running the following commands:
155 |
156 | ```bash
157 | git config --global user.name "Your Full Name"
158 | git config --global user.email "youremail@example.com"
159 | ```
160 |
161 | That's all you need for now, but there's many other settings which can be tweaked here, such as setting shorthand aliases, default editor/ conflict / diff programs, enabling features, using plugins, etc. It's also possible (and sometimes preferable) to have different git configurations for different projects.
162 |
163 | To learn about those, see the [Git Configuration](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration).
164 |
165 |
166 |
174 |
--------------------------------------------------------------------------------
/.github/GOVERNANCE.md:
--------------------------------------------------------------------------------
1 | # Governance
2 |
3 | ## Introduction
4 |
5 | This document describes the governance principles and guidelines for [Your Repository Name]. The purpose is to ensure clarity and consistency in how the project progresses and evolves.
6 | Project Maintainers
7 |
8 | The project is overseen by a group of maintainers. These individuals have the final say on technical decisions, feature implementations, and overall project direction.
9 |
10 | **Current Maintainers:**
11 | - [@Lissy93](https://github.com/Lissy93)
12 |
13 | **Maintainers have the following responsibilities:**
14 | - Review and merge pull requests.
15 | - Address and moderate any disputes or conflicts.
16 | - Ensure the sustainability and consistency of the project.
17 | - Announce major decisions, updates, or changes to the community.
18 |
19 | ## Contributing
20 |
21 | Anyone can contribute to the project. Contributions can come in the form of code, documentation, design, and more. All contributors are encouraged to create a pull request and engage in discussions. For more information, refer to our [CONTRIBUTING.md](https://github.com/Lissy93/git-into-open-source/blob/main/.github/CONTRIBUTING.md).
22 |
23 | ## Decision Making
24 |
25 | - **Consensus**: For most decisions, we seek a consensus among contributors. If there's disagreement, we encourage discussion to reach an agreement.
26 | - **Voting**: In rare instances where consensus cannot be reached, project maintainers may use a voting system. A simple majority will determine the outcome.
27 | - **Veto Power**: Project maintainers reserve the right to unilaterally make decisions on critical issues or veto proposals they believe are not in the best interest of the project.
28 |
29 |
30 | ## Licensing and Attribution
31 |
32 | This project is licensed under the MIT License, which allows for reuse of the code for any purpose with proper attribution and without warranty. The details of the MIT License can be found in our [LICENSE](https://github.com/Lissy93/git-into-open-source/blob/main/LICENSE) file.
33 |
34 | ### Raising a Dispute
35 | If you believe there's been a violation of the licensing terms, or you have any concerns regarding the project's use of code, assets, or intellectual property:
36 |
37 | - Initial Contact: Please reach out to the project maintainers directly via governance@mail.alicia.omg.lol detailing your concerns.
38 | - Provide Evidence: Attach any relevant documentation or evidence that supports your claim.
39 | - Await Response: The maintainers will review your claim and respond in a timely manner.
40 |
41 | ### Request for Removal
42 |
43 | If you're a contributor and wish to have your contributions removed from the project, or if this project is using or linking to your assets and you would like this removed
44 |
45 | - **Raise an Issue**: Create an issue in our GitHub repository detailing which contributions you'd like removed and your reasons.
46 | - **Maintainer Review**: The maintainers will review your request, considering project stability and other implications.
47 | - **Final Decision**: Post review, the maintainers will communicate the decision and next steps, if applicable.
48 |
49 | ### Request for Attribution
50 |
51 | We aim to give proper credit for all contributions. If you believe you have not been adequately credited for your work:
52 |
53 | - **Reach Out**: Contact the project maintainers at governance@mail.alicia.omg.lol.
54 | - **Provide Details**: Mention the specific contributions you're referring to and how you'd like to be attributed.
55 | - **Attribution Adjustment**: After verification, the maintainers will ensure proper attribution is provided in subsequent releases or documentation updates.
56 |
57 | ## Transparency and Impartiality
58 |
59 | ### Commitment to Transparency
60 |
61 | Our project thrives on open collaboration and trust. We believe in fostering an environment where decisions, processes, and actions stand up to public scrutiny. To this end:
62 |
63 | - **Clear Affiliations**: If you are submitting a PR or an issue that promotes, links to, or benefits a product/service you're affiliated with, you must clearly disclose this relationship.
64 | - **Maintainer Pledge**: We, the maintainers, pledge not to censor, alter, or delete any content to protect our personal interests. Our actions are always in the best interest of the community.
65 |
66 | ### Conflict of Interest
67 |
68 | A conflict of interest arises when personal interests may compromise the ability to act in the best interests of the project and its community. Both maintainers and contributors should be vigilant in recognizing and handling conflicts of interest:
69 |
70 | - **Declaration**: If you perceive a potential conflict of interest, declare it openly. For maintainers, this may be in a public space such as the project's communication channels. For contributors, this might be within the relevant PR or issue.
71 | - **Recusal**: In cases where a conflict of interest is determined, the affected individual should refrain from the decision-making process or from the action in question.
72 | - **Third-Party Mediation**: In situations where the path forward is unclear, consider seeking external opinions or mediation to ensure impartiality.
73 |
74 | ### Community at Heart
75 |
76 | Our primary allegiance is to the community and the collective good. We promise to:
77 |
78 | - **Prioritize Community**: Decisions are made with the community's best interest in mind.
79 | - **Open Discussions**: Encourage open discussions and feedback. Every voice, whether in agreement or dissent, is valuable and should be heard.
80 | - **Clear Documentation**: All decisions, especially those that affect the project's direction, are documented and accessible.
81 | - **Acknowledge Mistakes**: We are human, and mistakes will happen. When they do, we'll own up to them, learn, and act to rectify.
82 |
83 | By adhering to these principles, we hope to foster a transparent, impartial, and trusting environment for all our contributors and users.
84 |
85 |
86 | ## Conflict Resolution
87 |
88 | In the case of conflicts or disputes among contributors:
89 | - Try to settle differences through direct communication between parties involved.
90 | - If unresolved, bring the issue to the larger community for discussion.
91 | - As a last resort, project maintainers will intervene and make a final decision.
92 |
93 | ## Code of Conduct
94 |
95 | All contributors, maintainers, and participants in are expected to follow the project's [Code of Conduct](https://github.com/Lissy93/git-into-open-source/blob/main/.github/CODE_OF_CONDUCT.md). This code provides guidance on how to interact respectfully and inclusively within our community.
96 |
97 | Failure to adhere to the Code of Conduct will not be taken lightly. Potential consequences for violating the Code of Conduct include:
98 |
99 | - **Warning**: For minor infractions, an official warning may be issued, reminding the individual of the Code of Conduct and the behavior expected.
100 | - **Temporary Ban**: For repeated violations or more severe infractions, an individual may be temporarily banned from contributing or participating in project discussions.
101 | - **Permanent Ban**: In extreme cases, or after multiple violations, an individual may be permanently banned from the project.
102 |
103 | Any actions taken due to violations of the Code of Conduct will be at the discretion of the project maintainers. We are committed to creating a positive and inclusive environment and will take necessary actions to ensure it remains so.
104 |
105 | ## Changes to Governance
106 |
107 | Any changes to this governance document require a consensus among project maintainers. Significant changes should be communicated to the community.
108 |
--------------------------------------------------------------------------------
/lib/insert_contributor_content.py:
--------------------------------------------------------------------------------
1 | """
2 | This script generates markdown from the user-contributed YAML file,
3 | enriched with data from the GitHub API, and inserts it into the readme.
4 | Python 3.6+ is required
5 |
6 | Environment Variables (all optional)
7 | - LOG_LEVEL: The log level to use: info | warn | error (default: INFO).
8 | - GH_ACCESS_TOKEN: The GitHub API token used for authentication.
9 | - REPO_OWNER: The username / org where the repository is located.
10 | - REPO_NAME: The name of the repository.
11 | """
12 |
13 | # Imports
14 | import os
15 | import yaml
16 | import requests
17 | import logging
18 | from typing import Dict, List, Union, Optional
19 | from requests.exceptions import RequestException
20 |
21 | # Constants
22 | """ The username / org where the repository is located """
23 | REPO_OWNER = os.environ.get("REPO_OWNER", "lissy93")
24 | """ The name of the repository """
25 | REPO_NAME = os.environ.get("REPO_NAME", "git-into-open-source")
26 | """ A GitHub access token, required for higher rate-limit when fetching data """
27 | GH_ACCESS_TOKEN = os.environ.get("GH_ACCESS_TOKEN", None)
28 | """ Used for users who don't have a GitHub profile picture """
29 | PLACEHOLDER_PROFILE_PICTURE = "https://i.ibb.co/X231Rq8/octo-no-one.png"
30 | """ The directory where this script is located """
31 | SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
32 | """ The relative path to the markdown file to update"""
33 | README_PATH = os.path.join(SCRIPT_DIR, "..", ".github/README.md")
34 | """ The relative path to the YAML file containing the user-contributed content """
35 | CONTRIBUTORS_FILE_PATH = os.path.join(SCRIPT_DIR, "..", "git-in-here.yml")
36 |
37 | # Configure Logging
38 | LOG_LEVEL = os.environ.get("LOG_LEVEL", "INFO").upper()
39 | logging.basicConfig(level=LOG_LEVEL)
40 | logger = logging.getLogger(__name__)
41 |
42 |
43 | def read_file(file_path: str, mode: str = "r") -> str:
44 | """
45 | Opens, reads and returns the contents of a given file.
46 | :param file_path: The path to the file.
47 | :param mode: The mode to open the file in.
48 | :return: The contents of the file.
49 | """
50 | try:
51 | with open(file_path, mode) as f:
52 | logger.info(f"Reading file: {file_path}")
53 | return f.read()
54 | except FileNotFoundError:
55 | logger.error(f"Error: File {file_path} not found.")
56 | exit(1)
57 |
58 |
59 | def write_file(file_path: str, content: str, mode: str = "w") -> None:
60 | """
61 | Opens a given file and writes the given content to it.
62 | :param file_path: The path to the file.
63 | :param content: The content to write to the file.
64 | :param mode: The mode to open the file in.
65 | """
66 | with open(file_path, mode) as f:
67 | logging.info(f"Writing to file: {file_path}")
68 | f.write(content)
69 |
70 |
71 | def fetch_github_info(username: str) -> Dict[str, Union[str, None]]:
72 | """
73 | Fetches the name and avatar URL of a GitHub user.
74 | :param username: The username of the GitHub user.
75 | :return: A dictionary containing the name and avatar URL of the GitHub user.
76 | """
77 | logging.info(f"Fetching GitHub info for user: {username}")
78 | headers = {"Accept": "application/vnd.github.v3+json"}
79 | if GH_ACCESS_TOKEN:
80 | headers["Authorization"] = f"token {GH_ACCESS_TOKEN}"
81 |
82 | url = f"https://api.github.com/users/{username}"
83 | response = requests.get(url, headers=headers)
84 | print(response)
85 | if response.status_code != 200:
86 | logger.error(f"GitHub API returned status code {response.status_code} for user {username}.")
87 | return {"name": username, "avatar_url": PLACEHOLDER_PROFILE_PICTURE}
88 | return response.json()
89 |
90 |
91 | def map_question_to_heading(question: str) -> str:
92 | """
93 | Maps the question to a heading that will be displayed in the README.
94 | :param question: The question to map.
95 | :return: The mapped question.
96 | """
97 | question_mappings = {
98 | "What's your 'Aha!' moment with open source?": "My 'Aha!' moment in open source was:",
99 | "What's the coolest open source project you've ever used or contributed to?": "The coolest open source project I've ever used or contributed to is:",
100 | "What advice would you give to someone new to open source?": "The advice I would give to someone new to open source is:",
101 | }
102 | return question_mappings.get(question, question)
103 |
104 |
105 | def fetch_all_stargazers(
106 | repo_owner: str, repo_name: str, access_token: Optional[str] = None
107 | ) -> List[str]:
108 | """
109 | Fetches all stargazers of a given GitHub repository.
110 | :param repo_owner: The owner of the repository.
111 | :param repo_name: The name of the repository.
112 | :param access_token: An optional access token to authenticate with the GitHub API.
113 | :return: A list of all stargazers of the repository.
114 | """
115 | logging.info("Fetching all stargazers of the repository")
116 | stargazers: List[str] = []
117 | url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/stargazers"
118 | headers = {"Accept": "application/vnd.github.v3+json"}
119 |
120 | def get_next_url(headers: dict) -> Optional[str]:
121 | links = headers.get("Link", "").split(",")
122 | for link in links:
123 | if 'rel="next"' in link:
124 | return link.split(";")[0].replace("<", "").replace(">", "").strip()
125 | return None
126 |
127 | if GH_ACCESS_TOKEN:
128 | headers["Authorization"] = f"token {GH_ACCESS_TOKEN}"
129 |
130 | while url:
131 | try:
132 | res = requests.get(url, headers=headers, params={"per_page": 100})
133 | if res.status_code == 200:
134 | stargazers += [user["login"] for user in res.json()]
135 | url = get_next_url(res.headers)
136 | else:
137 | break
138 | except RequestException:
139 | break
140 | return stargazers
141 |
142 |
143 | def build_markdown_content(
144 | contributors: List[Dict[str, str]], stargazers: List[str]
145 | ) -> str:
146 | """
147 | Use the content returned from the YAML + complimentary data (like stargazers),
148 | to build the markdown content that will be inserted into the README.
149 | :param contributors: The list of contributors from the YAML file.
150 | :param stargazers: The list of stargazers of the repository.
151 | :return: The markdown content to be inserted into the README.
152 | """
153 |
154 | if not contributors:
155 | logger.info(f"No contributors found yet, cancelling markdown generation")
156 | return ""
157 |
158 | md_content = "User | Contribution\n---|---\n"
159 | for contributor in reversed(contributors):
160 | username = contributor["username"]
161 | question = contributor["question"]
162 | response = contributor["response"]
163 | question_heading = map_question_to_heading(question)
164 | info = fetch_github_info(username)
165 | name = info["name"] if info["name"] else username
166 | picture = info.get("avatar_url", PLACEHOLDER_PROFILE_PICTURE)
167 | is_stargazer = "⭐ " if username.lower() in [sg.lower() for sg in stargazers] else ""
168 | md_content += (
169 | f"{is_stargazer}{name} "
170 | f" | "
171 | f"**{question_heading}** {response}\n"
172 | )
173 | return md_content
174 |
175 |
176 |
177 | """ The main entrypoint of the script """
178 | if __name__ == "__main__":
179 | # Fetch list of stargazers (to insert special emoji next to name)
180 | all_stargazers = fetch_all_stargazers(REPO_OWNER, REPO_NAME, GH_ACCESS_TOKEN)
181 | # Read YAML
182 | yaml_content = yaml.safe_load(read_file(CONTRIBUTORS_FILE_PATH))
183 | # Read current README
184 | readme_content = read_file(README_PATH)
185 | # Generate content to be inserted
186 | new_md_content = build_markdown_content(
187 | yaml_content["contributors"], all_stargazers
188 | )
189 | # Locate and replace content in README
190 | start_marker = ""
191 | end_marker = ""
192 | start_index = readme_content.find(start_marker) + len(start_marker)
193 | end_index = readme_content.find(end_marker)
194 | # Create new readme (from old readme + new content)
195 | new_readme_content = (
196 | readme_content[:start_index]
197 | + "\n"
198 | + new_md_content
199 | + readme_content[end_index:]
200 | )
201 | # Write readme content back to file
202 | write_file(README_PATH, new_readme_content)
203 | logging.info("All Done!")
204 |
205 | """
206 | Okay, you've got this far...
207 | As you can tell this is a pretty quickly-put-together and hacky script
208 | And there's definitely plenty of room for improvement!
209 | So if you're up for it, feel free to submit a PR :)
210 | """
211 |
--------------------------------------------------------------------------------
/.github/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 |
2 | ## Introduction
3 |
4 | One of the biggest barriers to entry for first-time and newer contributors is the Git and GitHub process. The aim of this repo is to provide an easy and safe space for you to get more comfortable with the contribution process. We welcome PRs from developers of all levels and experiences, and we've tried to make the process as straightforward as possible.
5 |
6 | | ⚠️ Important: Before submitting your pull request, please ensure you're following [these Guidelines](#guidelines)! |
7 | |--|
8 |
9 | ---
10 |
11 | ## How
12 |
13 | You've got two options: The easiest, and sometimes best for just small changes is to use the GitHub UI, or Codespaces - this is explained in [this step-by-step tutorial](https://github.com/Lissy93/git-into-open-source/blob/main/guides/submit-your-first-pr-ui.md).
14 | In the longer term, and especially once you're working on larger changes, you'll want to have Git installed on your system, and make changes locally, again instructions for which are [outlined here](https://github.com/Lissy93/git-into-open-source/blob/main/guides/submit-your-first-pr-cli.md).
15 |
16 | Prerequisites: You will need a GitHub account. If you're planning on making changes via the terminal, you'll also need Git installed, and an SSH key setup on your local system.
17 | For a step-by-step guide, see [setting up Git, GitHub, SSH](https://github.com/Lissy93/git-into-open-source/blob/main/guides/local-git-setup.md)
18 |
19 | ---
20 |
21 | ## Areas for Contribution
22 |
23 | Not sure what to add or work on? Here's 10 ideas to get you started!
24 |
25 | ### Add your Name!
26 |
27 | This is probably the easiest place to start for first-time contributors. On the readme, there's a list of names and comments from developers, and you can add yours in there too!
28 |
29 | It's important to note that you don't put this in the readme directly, but rather edit the [`git-in-here.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/git-in-here.yml) file instead (there's a template at the top), this is then fetches some additional info from the GitHub API (like your name, picture and stargazer status) and inserts it into the readme using [this workflow](https://github.com/Lissy93/git-into-open-source/blob/main/.github/workflows/insert-comments.yml) running on GitHub Actions.
30 |
31 | ### Guides
32 |
33 | I'm working on putting together a series of guides, aimed at helping new developers get up to speed with Git, and get into Open Source.
34 |
35 | These can be found in the [`/guides`](https://github.com/Lissy93/git-into-open-source/tree/main/guides) directory, and any contributions would be much appreciated! If you're adding a new guide, it also needs to be listed in the [`resources.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/resources.yml) file, for it to be shown on the website and in the readme.
36 |
37 | ### Resources
38 |
39 | The readme and website also list to some helpful external resources, as there's no point reinventing the wheel when there are already some excellent guides and tools out there.
40 |
41 | If you know of any sites that are not already listed, which you think could be helpful, you can add these into the [`resources.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/resources.yml) file (under the `resources` section), and they'll be automatically inserted into the readme (using [this workflow](https://github.com/Lissy93/git-into-open-source/blob/main/.github/workflows/insert-resources.yml)).
42 |
43 | Keep in mind - I would ideally like to keep the resources list short, with only the best tools and websites listed, so if you're adding something ensure it meets this criteria, and provide justification.
44 |
45 | ### Website
46 |
47 | We've also got a simple static site, that makes it easier to read some of the guides; it's hosted on GitHub Pages, at [lissy93.github.io/git-into-open-source](https://lissy93.github.io/git-into-open-source/)
48 |
49 | It's built using [Astro](https://astro.build/), so is very easy to get up to speed with quickly. The source, as well as setup docs can be found in the [`web/`](https://github.com/Lissy93/git-into-open-source/tree/main/web) directory.
50 |
51 | ### Scripting
52 |
53 | The repo is held together with a set of pretty simple Python scripts that insert the user-contributed content in the readme, and make it available via the website.
54 |
55 | These can be found in the [`/lib`](https://github.com/Lissy93/git-into-open-source/tree/main/lib) directory.
56 |
57 | If you're a Python developer, you'll see that there's plenty of room for improvement here! Whether it's refactoring, writing tests, fixing a bug, adding a feature or anything else - PRs here are very much welcome!
58 |
59 | ### Docs
60 |
61 | Have you noticed anything not right in the readme or any of the other docs here? Whether it's correcting spelling / grammar, improving instructions or fixing formatting - pull requests are always appreciated!
62 |
63 | ### Translations
64 |
65 | // TODO: I need to first add the architecture for this!
66 |
67 | ### Something Else?
68 |
69 | I'm up for reviewing pull requests for other areas of this repository, not listed above. If you're unsure if your intended contribution would be a good fit or not, feel free to open an issue first, and we can chat about it :)
70 |
71 | ### Not a coder?
72 |
73 | There's plenty of other ways you can support open source projects!
74 |
75 | - Open an issue to report a bug
76 | - Write a tutorial or blog post
77 | - Leaving constructive feedback
78 | - Reviewing open pull requests
79 | - Contributing to docs
80 | - Adding international translations
81 | - Helping with testing
82 | - Assisting with UI, UX or asset design
83 | - Sponsoring the project or author
84 | - Sharing the project within your network
85 |
86 | ### Still nothing?
87 |
88 | There's plenty of other repositories on GitHub looking for contributors! Whatever your skill set or level, there will surly be the perfect project for your first few open source contributions. Take a look at this guide: [Finding Projects to Contribute to](https://github.com/Lissy93/git-into-open-source/blob/main/guides/finding-projects-to-contribute-to.md)
89 |
90 | ---
91 |
92 | ## Guidelines
93 |
94 | > ‼️ Please familiarise yourself with this checklist **before** submitting your pull request.
95 | > ❌ PRs which do not follow these guidelines, or that are low-effort will **not be merged**.
96 | > ⭕ These requirements are in place in order to keep the content in this repo high quality :)
97 |
98 | When submitting a pull request, you must:
99 | - Complete the PR template appropriately
100 | - Agree to follow the Code of Conduct
101 | - Not submit low-effort or AI-generated content
102 |
103 | When adding your name and response to [`git-in-here.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/git-in-here.yml),
104 | you must ensure that:
105 | - Your addition must be appended to the end of the file
106 | - The file must end in a single blank line
107 | - The username must match YOUR GitHub username
108 | - The question must exist in the list
109 | - The response should be between 64 and 512 characters
110 | - The response should be wrapped onto the next line if it's over 100 chars
111 | - The response must not be spammy, low effort or AI-generated (important!)
112 | - The response must be in English, with correct spelling and grammar
113 |
114 | Top tips for adding a great response:
115 | - **Be imaginative!** Ensure your response is something that will engage, educate, or delight those who read it in the future 
116 | - Great advice, insightful thoughts, jokes and fun facts are all awesome
117 | - **Markdown is supported!** So you can include links and basic formatting
118 | - Feel free to link to your projects, website or helpful (SFW) resources
119 | - Hyperlinks (`[text to display](https://example.com)`), new lines (` `) as well as `**bold**` and `_italic_` all work
120 | - **Get a gold star by your name!** Drop a star on this repo, and you'll automatically get a star next to your response
121 |
122 | When adding a resource to [`resources.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/resources.yml),
123 | you must:
124 | - Not submit blog posts or articles, unless they provide considerable value to the reader
125 | - Not submit anything which is duplicate content, or very similar to an existing resource
126 | - Disclose any association you may have to that website
127 | - Provide a short sentence of justification in your PR, explaining why it should be included
128 |
129 | When submitting additions or changes to the guides in [`guides/`](https://github.com/Lissy93/git-into-open-source/tree/main/guides),
130 | you must:
131 | - Ensure all new information is, to the best of your knowledge accurate and correct
132 | - Spell and grammar check your new additions, and ensure that any included links are functional
133 | - Not provide links to content you own, manage or are affiliated with, without disclosing your association when submitting the pull request
134 | - If you're adding a new guide, don't forget to also list it in the resources file, so it can be indexed
135 |
136 | When submitting changes to the website in [`web/`](https://github.com/Lissy93/git-into-open-source/tree/main/web),
137 | you must:
138 | - Ensure the application is still fully deployable
139 | - Ensure there are no regressions / no new bugs introduced
140 | - Ensure all lint checks, tests and build scripts still pass
141 |
142 | When submitting changes to the website in [`lib/`](https://github.com/Lissy93/git-into-open-source/tree/main/lib),
143 | you must:
144 | - Ensure that all scripts still run as expected
145 | - Ensure there are no regressions / no new bugs introduced
146 | - Ensure all lint checks, tests and build scripts still pass
147 |
148 | There's a few no-go zones, where changes will be overridden by the dynamically inserted content. Therefore:
149 | - When editing markdown, do not manually submit any content between the `` and `` tags - this is auto-generated, and so will be overridden!
150 | - Don't edit the markdown within the `web/` directory, as this is generated using the content from `/guides`, and metadata from `resources.yml`
151 | - Only submit pull requests to the repo on GitHub (lissy93/git-into-open-source), as our Codeberg mirror is one-way, so changes will be overridden
152 |
--------------------------------------------------------------------------------
/web/src/pages/contributing.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: ../layouts/MarkdownLayout.astro
3 | title: Contributing Guidelines
4 | ---
5 |
6 |
7 |
8 |
9 | ## Introduction
10 |
11 | One of the biggest barriers to entry for first-time and newer contributors is the Git and GitHub process. The aim of this repo is to provide an easy and safe space for you to get more comfortable with the contribution process. We welcome PRs from developers of all levels and experiences, and we've tried to make the process as straightforward as possible.
12 |
13 | | ⚠️ Important: Before submitting your pull request, please ensure you're following [these Guidelines](#guidelines)! |
14 | |--|
15 |
16 | ---
17 |
18 | ## How
19 |
20 | You've got two options: The easiest, and sometimes best for just small changes is to use the GitHub UI, or Codespaces - this is explained in [this step-by-step tutorial](https://github.com/Lissy93/git-into-open-source/blob/main/guides/submit-your-first-pr-ui.md).
21 | In the longer term, and especially once you're working on larger changes, you'll want to have Git installed on your system, and make changes locally, again instructions for which are [outlined here](https://github.com/Lissy93/git-into-open-source/blob/main/guides/submit-your-first-pr-cli.md).
22 |
23 | Prerequisites: You will need a GitHub account. If you're planning on making changes via the terminal, you'll also need Git installed, and an SSH key setup on your local system.
24 | For a step-by-step guide, see [setting up Git, GitHub, SSH](https://github.com/Lissy93/git-into-open-source/blob/main/guides/local-git-setup.md)
25 |
26 | ---
27 |
28 | ## Areas for Contribution
29 |
30 | Not sure what to add or work on? Here's 10 ideas to get you started!
31 |
32 | ### Add your Name!
33 |
34 | This is probably the easiest place to start for first-time contributors. On the readme, there's a list of names and comments from developers, and you can add yours in there too!
35 |
36 | It's important to note that you don't put this in the readme directly, but rather edit the [`git-in-here.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/git-in-here.yml) file instead (there's a template at the top), this is then fetches some additional info from the GitHub API (like your name, picture and stargazer status) and inserts it into the readme using [this workflow](https://github.com/Lissy93/git-into-open-source/blob/main/.github/workflows/insert-comments.yml) running on GitHub Actions.
37 |
38 | ### Guides
39 |
40 | I'm working on putting together a series of guides, aimed at helping new developers get up to speed with Git, and get into Open Source.
41 |
42 | These can be found in the [`/guides`](https://github.com/Lissy93/git-into-open-source/tree/main/guides) directory, and any contributions would be much appreciated! If you're adding a new guide, it also needs to be listed in the [`resources.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/resources.yml) file, for it to be shown on the website and in the readme.
43 |
44 | ### Resources
45 |
46 | The readme and website also list to some helpful external resources, as there's no point reinventing the wheel when there are already some excellent guides and tools out there.
47 |
48 | If you know of any sites that are not already listed, which you think could be helpful, you can add these into the [`resources.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/resources.yml) file (under the `resources` section), and they'll be automatically inserted into the readme (using [this workflow](https://github.com/Lissy93/git-into-open-source/blob/main/.github/workflows/insert-resources.yml)).
49 |
50 | Keep in mind - I would ideally like to keep the resources list short, with only the best tools and websites listed, so if you're adding something ensure it meets this criteria, and provide justification.
51 |
52 | ### Website
53 |
54 | We've also got a simple static site, that makes it easier to read some of the guides; it's hosted on GitHub Pages, at [lissy93.github.io/git-into-open-source](https://lissy93.github.io/git-into-open-source/)
55 |
56 | It's built using [Astro](https://astro.build/), so is very easy to get up to speed with quickly. The source, as well as setup docs can be found in the [`web/`](https://github.com/Lissy93/git-into-open-source/tree/main/web) directory.
57 |
58 | ### Scripting
59 |
60 | The repo is held together with a set of pretty simple Python scripts that insert the user-contributed content in the readme, and make it available via the website.
61 |
62 | These can be found in the [`/lib`](https://github.com/Lissy93/git-into-open-source/tree/main/lib) directory.
63 |
64 | If you're a Python developer, you'll see that there's plenty of room for improvement here! Whether it's refactoring, writing tests, fixing a bug, adding a feature or anything else - PRs here are very much welcome!
65 |
66 | ### Docs
67 |
68 | Have you noticed anything not right in the readme or any of the other docs here? Whether it's correcting spelling / grammar, improving instructions or fixing formatting - pull requests are always appreciated!
69 |
70 | ### Translations
71 |
72 | // TODO: I need to first add the architecture for this!
73 |
74 | ### Something Else?
75 |
76 | I'm up for reviewing pull requests for other areas of this repository, not listed above. If you're unsure if your intended contribution would be a good fit or not, feel free to open an issue first, and we can chat about it :)
77 |
78 | ### Not a coder?
79 |
80 | There's plenty of other ways you can support open source projects!
81 |
82 | - Open an issue to report a bug
83 | - Write a tutorial or blog post
84 | - Leaving constructive feedback
85 | - Reviewing open pull requests
86 | - Contributing to docs
87 | - Adding international translations
88 | - Helping with testing
89 | - Assisting with UI, UX or asset design
90 | - Sponsoring the project or author
91 | - Sharing the project within your network
92 |
93 | ### Still nothing?
94 |
95 | There's plenty of other repositories on GitHub looking for contributors! Whatever your skill set or level, there will surly be the perfect project for your first few open source contributions. Take a look at this guide: [Finding Projects to Contribute to](https://github.com/Lissy93/git-into-open-source/blob/main/guides/finding-projects-to-contribute-to.md)
96 |
97 | ---
98 |
99 | ## Guidelines
100 |
101 | > ‼️ Please familiarise yourself with this checklist **before** submitting your pull request.
102 | > ❌ PRs which do not follow these guidelines, or that are low-effort will **not be merged**.
103 | > ⭕ These requirements are in place in order to keep the content in this repo high quality :)
104 |
105 | When submitting a pull request, you must:
106 | - Complete the PR template appropriately
107 | - Agree to follow the Code of Conduct
108 | - Not submit low-effort or AI-generated content
109 |
110 | When adding your name and response to [`git-in-here.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/git-in-here.yml),
111 | you must ensure that:
112 | - Your addition must be appended to the end of the file
113 | - The file must end in a single blank line
114 | - The username must match YOUR GitHub username
115 | - The question must exist in the list
116 | - The response should be between 64 and 512 characters
117 | - The response should be wrapped onto the next line if it's over 100 chars
118 | - The response must not be spammy, low effort or AI-generated (important!)
119 | - The response must be in English, with correct spelling and grammar
120 |
121 | Top tips for adding a great response:
122 | - **Be imaginative!** Ensure your response is something that will engage, educate, or delight those who read it in the future 
123 | - Great advice, insightful thoughts, jokes and fun facts are all awesome
124 | - **Markdown is supported!** So you can include links and basic formatting
125 | - Feel free to link to your projects, website or helpful (SFW) resources
126 | - Hyperlinks (`[text to display](https://example.com)`), new lines (` `) as well as `**bold**` and `_italic_` all work
127 | - **Get a gold star by your name!** Drop a star on this repo, and you'll automatically get a star next to your response
128 |
129 | When adding a resource to [`resources.yml`](https://github.com/Lissy93/git-into-open-source/blob/main/resources.yml),
130 | you must:
131 | - Not submit blog posts or articles, unless they provide considerable value to the reader
132 | - Not submit anything which is duplicate content, or very similar to an existing resource
133 | - Disclose any association you may have to that website
134 | - Provide a short sentence of justification in your PR, explaining why it should be included
135 |
136 | When submitting additions or changes to the guides in [`guides/`](https://github.com/Lissy93/git-into-open-source/tree/main/guides),
137 | you must:
138 | - Ensure all new information is, to the best of your knowledge accurate and correct
139 | - Spell and grammar check your new additions, and ensure that any included links are functional
140 | - Not provide links to content you own, manage or are affiliated with, without disclosing your association when submitting the pull request
141 | - If you're adding a new guide, don't forget to also list it in the resources file, so it can be indexed
142 |
143 | When submitting changes to the website in [`web/`](https://github.com/Lissy93/git-into-open-source/tree/main/web),
144 | you must:
145 | - Ensure the application is still fully deployable
146 | - Ensure there are no regressions / no new bugs introduced
147 | - Ensure all lint checks, tests and build scripts still pass
148 |
149 | When submitting changes to the website in [`lib/`](https://github.com/Lissy93/git-into-open-source/tree/main/lib),
150 | you must:
151 | - Ensure that all scripts still run as expected
152 | - Ensure there are no regressions / no new bugs introduced
153 | - Ensure all lint checks, tests and build scripts still pass
154 |
155 | There's a few no-go zones, where changes will be overridden by the dynamically inserted content. Therefore:
156 | - When editing markdown, do not manually submit any content between the `` and `` tags - this is auto-generated, and so will be overridden!
157 | - Don't edit the markdown within the `web/` directory, as this is generated using the content from `/guides`, and metadata from `resources.yml`
158 | - Only submit pull requests to the repo on GitHub (lissy93/git-into-open-source), as our Codeberg mirror is one-way, so changes will be overridden
159 |
--------------------------------------------------------------------------------