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.
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
I then opened PR #1790 on @thedevopsdaily.
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' },
],
},
3. Submitting the Second PR
Following the same Git workflow, I created a new branch, pushed the changes, and opened PR #1807 on @thedevopsdaily.
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
}
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
pnpm quiz:validate
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
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"]
}
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
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
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_TOKENpermissions. Repositories can use read-only defaults for the token. If the workflow needs to write repository contents, explicitly grant the required permission, such ascontents: 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
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
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)
Awesome! Well done 👏