DEV Community

Muhammad Dhiyaul Atha
Muhammad Dhiyaul Atha

Posted on Edited on

My Hacktoberfest 2026 Journey: Contributing to DevOps Daily

Hacktoberfest: Contribution Chronicles

Hacktoberfest is back, and this year I decided to join the 7-Day DevOps Contribution Challenge hosted by @devopsdaily

I’m still learning my way around open-source contribution workflows, so I’m using this challenge as an opportunity to practice working with real repositories, following existing project conventions, and getting more comfortable with the Git workflow.

This article documents my progress so far, including how I tested my changes locally and the pull requests I submitted along the way.


Day 1: Registering as an Expert on DevOps Daily

On Day 1, the challenge focused on adding a personal expert profile to the platform's repository. Here’s what I did:

1. Creating the JSON Profile

I created a data file at content/experts/muhammad-dhiyaul-atha.json containing my professional background, social links, and core specialties in backend development, containerization, and automated deployment infrastructure.

2. Preparing the Avatar

I uploaded my avatar image in .png format to public/images/experts/muhammad-dhiyaul-atha.png to ensure the profile renders correctly.

3. Local Testing

I ran the local development server using pnpm dev to verify that the system successfully read the files.

Local development testing

4. Opening the Pull Request (PR)

After confirming everything was clean, I created a dedicated branch, committed, and pushed the changes:

git checkout -b hacktoberfest/add-muhammad-dhiyaul-atha
git add content/experts/muhammad-dhiyaul-atha.json public/images/experts/muhammad-dhiyaul-atha.png
git commit -m "Add Muhammad Dhiyaul Atha to experts directory"
git push origin hacktoberfest/add-muhammad-dhiyaul-atha
Enter fullscreen mode Exit fullscreen mode

I then opened PR #1790 on @thedevopsdaily.

Pull Request #1790


Day 2: Contributing a Favorite DevOps Tool (Lazydocker)

For Day 2, the challenge was to modify a TypeScript component and add a new tool to the curated Toolbox.

1. Choosing the Tool

I chose Lazydocker, a Go-based terminal user interface (TUI) that makes managing Docker containers and Docker Compose easier from the command line.

2. Modifying app/toolbox/page.tsx

I added a new configuration object to the tools array under the containers category:

{
  name: 'Lazydocker',
  description: 'A simple terminal UI for both docker and docker-compose, written in Go.',
  href: 'https://github.com/jesseduffield/lazydocker',
  category: 'containers',
  icon: Terminal,
  badges: [
    { text: 'Docker', variant: 'outline' },
    { text: 'Open Source', variant: 'secondary' },
  ],
},
Enter fullscreen mode Exit fullscreen mode
3. Submitting the Second PR

Following the same Git workflow, I created a new branch, pushed the changes, and opened PR #1807 on @thedevopsdaily.

Pull Request #1807


Day 3: Adding a Quiz Question to the Linux Quiz

On Day 3, the task was to contribute a multiple-choice question to an existing quiz file on the platform. Here’s what I did:

1. Selecting the Quiz File

I chose content/quizzes/linux-quiz.json and drafted an intermediate-level question focused on modern network troubleshooting in Linux using the ss command.

2. Drafting the Question & Updating Metadata

I added a new question object to the questions array:

{
  "id": "linux-check-listening-ports",
  "title": "Checking Listening Ports",
  "description": "Which command-line tool is commonly used on modern Linux distributions to inspect socket statistics and display active listening ports along with their corresponding process names?",
  "options": [
    "netstat -an",
    "ss -tulpn",
    "lsof -port",
    "ps aux --ports"
  ],
  "correctAnswer": 1,
  "explanation": "ss (socket statistics) is the modern, faster replacement for netstat. The flags -tulpn display TCP/UDP connections, listening sockets, and the numeric PIDs/program names holding them.",
  "difficulty": "intermediate",
  "points": 15
}

Enter fullscreen mode Exit fullscreen mode

I also updated the totalPoints (increased to 202) and incremented the intermediate difficulty level count in the file's metadata.

3. Local Testing & Validation

Before committing, I ran the repository's test and validation commands to verify the quiz schema and metadata:

pnpm test tests/quiz-validation.test.ts
Enter fullscreen mode Exit fullscreen mode

Quiz validation test result

pnpm quiz:validate
Enter fullscreen mode Exit fullscreen mode

Quiz validation

4. Opening the Pull Request (PR)

After confirming everything passed successfully, I created a dedicated branch, committed, and pushed the changes:

git checkout -b hacktoberfest/add-quiz-question
git add content/quizzes/linux-quiz.json
git commit -m "Add quiz question on checking listening ports to linux-quiz"
git push origin hacktoberfest/add-quiz-question

Enter fullscreen mode Exit fullscreen mode

I then opened the Pull Request on @thedevopsdaily.


Day 4: Adding Flashcards to Linux Fundamentals

On Day 4, the objective was to contribute one or two study flashcards to an existing set to help others learn DevOps and system administration concepts. Here’s what I did:

1. Selecting the Flashcard Set

I chose content/flashcards/linux-fundamentals.json since it covers essential Linux topics and fits well with my background in Linux system administration.

2. Drafting and Adding the Flashcards

I added two new flashcard objects to the end of the cards array, covering network troubleshooting with ss and systemd logs with journalctl:

{
  "id": "linux-check-listening-ports",
  "front": "How do you inspect active listening ports and their processes on modern Linux?",
  "back": "Use the ss command with flags -tulpn (ss -tulpn). It is the modern, faster replacement for netstat, displaying TCP/UDP connections, listening sockets, and the numeric PIDs/program names holding them.",
  "category": "Networking",
  "tags": ["ss", "ports", "networking", "troubleshooting"]
},
{
   "id": "journalctl-systemd-logs",
   "front": "How do you query and follow systemd logs using journalctl?",
   "back": "journalctl -u service-name views logs for a specific service. Add -f to follow live output (like tail -f), -n 50 for the last 50 lines, and --since today for recent logs. It reads binary journal logs maintained by systemd.",
   "category": "Monitoring",
   "tags": ["journalctl", "systemd", "logs", "troubleshooting"]
    }

Enter fullscreen mode Exit fullscreen mode

I also updated the cardCount metadata at the top of the file, increasing it from 20 to 22.

3. Local Testing & Preview

I started the local development server to test the flashcards page and ensure the new cards rendered correctly:

pnpm dev
Enter fullscreen mode Exit fullscreen mode

4. Opening the Pull Request (PR)

After confirming everything passed successfully, I created a dedicated branch, committed, and pushed the changes:

git checkout -b hacktoberfest/add-flashcard
git add content/flashcards/linux-fundamentals.json
git commit -m "Add flashcard for checking listening ports using ss to linux-fundamentals"
git push origin hacktoberfest/add-flashcard

Enter fullscreen mode Exit fullscreen mode

I then opened the Pull Request on @thedevopsdaily.


Day 5: Sharing a Practical DevOps Gotcha on CI/CD Security

On Day 5, the objective shifted from adding static data (like quizzes or flashcards) to sharing a practical tip, "gotcha," or lesson learned the hard way by improving an existing guide on the platform.

1. Choosing the Right Article to Improve

I browsed through content/guides/introduction-to-cicd/ and selected 09-security-best-practices-and-production-patterns.md. Having dealt firsthand with workflow permission issues while setting up automated tasks and repository stats updaters, I knew exactly what kind of pitfall often catches developers off guard.

2. Drafting the Gotcha Section

Inside the section covering Least Privilege Access, I inserted a concise and technically accurate warning regarding GitHub Actions default token permissions:

Gotcha: If your GitHub Actions workflow fails with a "403 Forbidden" error when trying to push commits or update repository files, check the GITHUB_TOKEN permissions. Repositories can use read-only defaults for the token. If the workflow needs to write repository contents, explicitly grant the required permission, such as contents: write, in the workflow.

3. Verifying and Isolating the Branch

To keep my contribution clean and prevent stray build artifacts or previous commits from leaking into this pull request, I made sure to check out a dedicated branch from a clean state:

git checkout main
git pull origin main
git checkout -b hacktoberfest/add-tip
Enter fullscreen mode Exit fullscreen mode
4. Committing and Opening the Pull Request

After verifying the changes locally, I staged only the modified guide file, committed with a clear message, and pushed to my fork:

git add content/guides/introduction-to-cicd/09-security-best-practices-and-production-patterns.md
git commit -m "docs: add github token permission gotcha"
git push -u origin hacktoberfest/add-tip
Enter fullscreen mode Exit fullscreen mode

I then opened the Pull Request on @thedevopsdaily.

Conclusion

So far, this challenge has been a useful way to practice the basics of contributing to an existing open-source project.

The work itself has been relatively small, but there have still been things to learn: understanding an unfamiliar codebase, following its existing structure, testing changes locally, creating focused branches, and preparing pull requests.

I’m still in the middle of the challenge, so there is a lot more to learn and contribute. I’ll continue updating this article as I work through the remaining days of the challenge.

If you're also participating in Hacktoberfest this year, I'd be interested to hear what you've been working on.

Happy hacking! 🌟

Top comments (1)

Collapse
 
devopsdaily profile image
DevOps Daily •

Awesome! Well done 👏