---
description: Làm thế nào để tham gia một dự án Open Source hiệu quả
---

# Quy trình làm việc với dự án Open Source

## Dự án Open Source là gì

Dự án Open Source (Mã nguồn mở), là những dự án phần mềm được công khai đầy đủ mã nguồn cho cộng đồng các nhà phát triển. Từ đó, các nhà phát triển trên toàn thế giới có thể cùng nhau xây dựng những dự án này ngày một phát triển và hoàn thiện hơn.

{% hint style="info" %}
Dự án Open Source phát triển dựa trên tiêu chí: Đoàn kết là sức mạnh
{% endhint %}

Trong Runway Club, các dự án mã nguồn mở được tạo rất đa dạng và phong phú. Các dự án này đều có mục đích lớn và có tiềm năng phát triển lâu dài trong tương lai. Vì thế, các bạn tham gia phát triển những dự án này, sẽ học hỏi thêm được rất nhiều điều bổ ích.

{% hint style="info" %}
Các tiêu chí của dự án Open Source:

1. Vì cộng đồng và đến từ cộng đồng
2. Không vì lợi nhuận
{% endhint %}

## Lợi ích khi tham gia dự án Open Source

1. Đây là môi trường làm việc không biên giới, giúp các bạn làm quen với nhiều developers.
2. Cơ hội học thêm được kỹ năng, kinh nghiệm của người khác thông qua mã nguồn của họ.
3. Cơ hội việc làm sẽ đến với bạn nhiều hơn, gia tăng sự cạnh tranh của bản thân trong thị trường lao động.
4. Bạn cảm thấy mình là một người có ích với nhiều đóng góp cho cộng đồng... cho sự phát triển của nhân loại.
5. Sử dụng các phần mềm mã nguồn mở này cho nhu cầu của bạn.

## Quy trình làm việc

Để cho cộng đồng các developers làm việc một cách nhịp nhàng và hiệu quả. Cần có một tổ chức chủ quản đứng ra quản lý dự án. Tại Runway Club, các dự án mã nguồn mở của Runway Club đều được quản lý bởi Runway ATC. Đồng thời, ATC sẽ chọn một bạn từ nhóm Corium trở thành Project Manager của dự án. Việc này giúp bạn được chọn có thêm kinh nghiệm khi tham gia quản lý dự án. Đồng thời, dự án sẽ được kiểm soát tốt hơn.

Mỗi project Open Source của Runway Club sẽ có những tài nguyên sau:

1. Repository: Lưu trữ toàn bộ mã nguồn của dự án
2. Issues: Hệ thống post các bài viết báo bug hoặc đề xuất tính năng mới cho dự án.
3. Projects: Thông báo tiến độ của toàn dự án đến cộng đồng. Trạng thái của các công việc sẽ được cập nhật liên tục (Todo, Doing, Done)
4. Discussion: Tham gia trao đổi, thảo luận với cộng đồng. Trong phần Discussion sẽ có những channel sau:
   1. Announcements: Các thông báo đến từ ATC hoặc PM
   2. Q\&A: Nơi các bạn hỏi đáp những thắc mắc
   3. Task Delivery: Nhận và thảo luận về task mà các bạn nhận được

Để đạt được kết quả tốt, các bạn khi tham gia đóng góp vào dự án cần tuân thủ một số quy trình làm việc sau:

### P1. Get Started (Dành cho bạn mới tham gia)

B1: Truy cập đến GitHub của dự án

B2: Đọc hết các thông báo trong Announcements

B3: Thực hiện git clone về máy theo **P3**

B4: Đọc qua toàn bộ code của dự án (Nhánh master trước, các nhánh dev sau)

B5: Nếu có thắc mắc trong quá trình đọc code, đọc thêm các Q\&A và Issues để tìm hiểu thêm. Nếu vẫn thắc mắc, tạo bài viết mới trên Q\&A để được mọi người giải đáp

### P2. Task Booking (Chọn task để triển khai)

B1: Xem bảng chia task (GitHub -> Projects)

B2: Chọn một task chưa được thực hiện nằm trong cột Todo

B3: Viết một Yêu cầu nhận task tại phần Discussion -> Task Delivery

B4: ATC & PM sẽ phản hồi và giải đáp những thắc mắc của bạn về task. Sau đó, đưa ra những yêu cầu về chất lượng cũng như deadline cho task.

B5: Thực hiện task trên mã nguồn đã clone dựa trên những yêu cầu đã chốt với ATC & PM.

### P3. Code Contribution (Thực hiện code và submit lên hệ thống)

#### Đối với lần đầu tiên

B1. Fork dự án về tài khoản GitHub của cá nhân

B2. Clone dự án từ tài khoản cá nhân

```bash
git clone <Link đến Repo ở GitHub cá nhân>
```

B3. Gõ lệnh tạo upstream đến Repository gốc trên GitHub

```bash
git remote add upstream <Link đến Repo của Runway Club>
```

#### Đối với quá trình thực hiện task

B1. Thực hiện đồng bộ Repo tại máy của bạn với Repo chính của Runway Club

```bash
git fetch upstream <tên nhánh>
git pull upstream <tên nhánh>
```

Tên nhánh sẽ được RWC & PM yêu cầu bạn sử dụng trong quá trình giao task

B2. Thực hiện task của bạn. Trong quá trình thực hiện, thường xuyên commit và push code lên trang GitHub cá nhân.

B3. Sau khi đã hoàn thành task. Commit và push code lên GitHub cá nhân của bạn

```bash
git add *
git commit -m "Hoàn thành tính năng X"
git push origin <tên nhánh>
```

B4. Thực hiện tạo Pull Request trên GitHub cá nhân đến Repo gốc của Runway, và nhớ chọn đúng nhánh của bạn.

B5. Nếu quá trình tạo Pull Request thành công, ATC & PM sẽ trao đổi và kiểm duyệt kết quả của bạn.

B6. Bạn sẽ được ghi nhận là Done task khi **Pull Request được Merge** vào Repo gốc

### P4. Bug Report (Báo cáo Bug)

Trong quá trình đọc và viết code, nếu phát hiện thấy bug không do bản thân gây ra (hoặc do những đóng góp từ quá khứ của mình gây ra), các bạn cần nhanh chóng đến GitHub -> Issues để khai báo bug

B1. Phát hiện bug trong mã nguồn

B2. Nếu trong danh sách Issue chưa có báo cáo về con bug này, thì tạo một Issue mới theo template Bug Report

B3. Viết đầy đủ thông tin theo yêu cầu của template

B4. Issue chỉ được chấp nhận khi được viết theo đúng chỉ dẫn của template

Các bạn sẽ được ghi nhận cống hiến nếu phát hiện được bug.

### P5. Bug Fixing (Sửa bug được tìm thấy)

B1. Các issue về bug sẽ được biến đổi thành các task và được đưa vào Todo List

B2. Các bạn chọn thực hiện các task này như quy trình **P3**

### P6. Feature Suggestion (Đề xuất tính năng mới)

Trong quá trình phát triển hệ thống, nếu bạn có ý tưởng hay muốn đề xuất để triển khai cho dự án, các bạn cần mô tả ý tưởng đó cho mọi người được biết.

B1. Có thể thảo luận thêm cùng mọi người tại Discussion

B2. Tạo một Issue Yêu cầu tính năng mới theo template

B3. Viết ý tưởng theo yêu cầu cùa template

B4. Cộng đồng sẽ cùng thảo luận về ý tưởng này

B5. Nếu ATC & PM thông qua, ý tưởng của bạn sẽ được phân rã thành các task để phát triển

Các bạn sẽ được ghi nhận cống hiến nếu có ý tưởng được thông qua.

### P7. Q\&A (Giải đáp thắc mắc trong quá trình code)

Trong quá trình làm việc, nếu có bất kỳ thắc mắc nào, các bạn có thể hỏi đáp với mọi người

B1. Xem những thắc mắc đã tồn tại trên hệ thống để tìm câu trả lời

B2. Nếu chưa tìm được câu trả lời, tạo mới một câu hỏi
