350 Tests Passed! 🚀 (And 4 to Go...) After setting up CI/CD with GitHub Actions, our test suite just hit 350 passing tests! But here's the thing about software development - you're never truly done. We've got 4 tests still failing (LinkedIn integration, we're looking at you 👀), but that's part of the journey. What worked well: - GitHub Actions for automated testing on every push - PostgreSQL and Redis services in the CI pipeline - Environment variables with dummy data for OAuth providers - Coverage reporting to track our progress What we learned: - Always check your `DATABASE_URL` vs individual database variables - Use `localhost` in CI, not service names like `postgres` - Keep dummy values for all OAuth providers (Google, LinkedIn, etc.) - The `.env` file should stay in `.gitignore` - use GitHub Secrets or dummy values for CI The final 4 tests?They're LinkedIn-related and need proper mocking. But that's tomorrow's problem. Progress over perfection. 350 > 0. 🎯 Abel Marube #Django #Python #GitHubActions #CI/CD #Testing #SoftwareDevelopment #DevOps #analyticsmeta
More Relevant Posts
-
🚀 I Built a Complete Django REST API Course (0 → Advanced) Most tutorials teach theory. But I wanted to build something that actually makes you job-ready. So I created a 15-day structured roadmap to master REST APIs using Django. 💡 What’s inside: ✔ API fundamentals (from scratch) ✔ Real CRUD operations with database ✔ Function-Based & Class-Based Views ✔ ViewSets & Routers (industry-level) ✔ JWT Authentication (login system 🔐) ✔ Pagination & Filtering (performance 🚀) ✔ Deployment + best practices ✔ Interview questions + machine coding 🧠 Why I built this? When I was learning backend, everything felt: ❌ scattered ❌ confusing ❌ not interview-focused So I built this repo like a course + real project combined 📚 Who is this for? Beginners learning backend Students preparing for interviews Anyone switching to backend development 🔗 Check it out here: https://lnkd.in/guKJiQqX If this helps you: ⭐ Star the repo 💬 Share your feedback #python #django #restapi #backenddeveloper #webdevelopment #programming #developers #learning #github #100DaysOfCode
To view or add a comment, sign in
-
You're probably deploying manually. Here's how to stop. GitHub Actions gives you free CI/CD directly in your GitHub repo — no external services needed. Here's a complete workflow that runs on every push to main: ```yaml name: Deploy on: push: branches: [main] jobs: test-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '20' - run: npm install - run: npm test - name: Deploy to server run: | ssh user@yourserver 'cd /app && git pull && npm install && pm2 restart app' ``` Every push to main: 1. Checks out the code 2. Installs dependencies 3. Runs tests 4. Deploys to your server — only if tests pass Free for public repos. 2,000 minutes/month free for private repos. Stop deploying manually. Set this up once. Never think about it again. Link in bio — starter workflow files for Node, Python, and Docker deployments. #GitHubActions #CICD #DevOps #Automation #TechFinSpecial
To view or add a comment, sign in
-
-
🚀 Just built and published my first Go REST API project on GitHub! I built a Library Management System from scratch using Go — no frameworks, no external libraries, just pure Go standard library. What the project does: → Add and list books in the library → Members can borrow books with automatic due date (14 days) → Return books and get fine calculated automatically → Fine system: 5 rupees per day after due date → Full input validation on every route Tech used: → Go (Golang) → net/http — built-in router and server → encoding/json — JSON parsing → In-memory storage using Go slices API Endpoints I built: → GET /books — list all books → POST /books — add a new book → POST /borrow — borrow a book → GET /borrow/{id} — check borrow status → POST /return — return a book → GET /fine/{memberID} — check member fines This project taught me: → How HTTP servers work in Go → JSON encoding and decoding → Routing with ServeMux → Input validation patterns → Writing clean commit messages → Thinking like a backend developer GitHub link in comment👇 #golang #go #backend #restapi #programming #100daysofcode #webdevelopment #opensource #github #coding #softwaredevelopment #beginnerprogrammer #learntocode #india
To view or add a comment, sign in
-
I built a tool that gives git a memory. Git tells you what changed. It has no idea why. After 6 months on a codebase, you're staring at files like middleware.py and old_auth.py with no idea what feature they belong to, whether anyone still uses them, or if they're safe to delete. I built gitmind to fix that. Every time you commit, a post-commit hook runs a local LLM (Ollama — no API costs, your code never leaves your machine) that analyzes the diff and writes structured metadata directly into your repo: → What changed → Why it likely changed → Which feature it belongs to → Which files are part of that feature Six months later you can ask: what's stale? what's safe to remove? when was auth last touched? And get a real answer. The part I'm most proud of: the tool documented its own development. Every commit I made while building it was analyzed by the LLM and stored in metadata.json. The build log on the docs site was written entirely by the AI — no human wrote a single summary. https://lnkd.in/eusR5TqA It also ships with a local web dashboard (python3 cli/dashboard.py) — feature health cards, a commit frequency chart, and a staleness report with an interactive threshold slider. No npm, no Node.js, just Python. Stack: Python · Ollama · qwen2.5-coder:7b · vanilla JS · GitHub Actions for CI + docs Fully open source. Would love feedback from anyone who's felt the pain of undocumented codebases. 🔗 https://lnkd.in/e92UVU5h #buildinpublic #opensource #devtools #python #llm #git
To view or add a comment, sign in
-
-
An open-source project that just dropped a day ago has already become the fastest-growing repo on GitHub. Turns out, it's literally just an implementation of the leaked Claude code. Link: https://lnkd.in/dx-DUMUq
To view or add a comment, sign in
-
"Thou shalt not make unto thee any graven image"(c) Well, I won't. But I still eager to follow the best practices in software engineering (aside all other areas) to create robust, effective and user-friendly systems that help business to solve problems instead of multiplying it. Talking about good role models: guys from wemake-services team have just made another state-of-the-art solution, this time for Django-based REST API development. It is fast, flexible, but still rigorous about data quality controls. I do not tell that you should drop DRF or django-ninja from your existing code immediately, but definitely advice to consider DMR as an alternative for your future projects :) #Python #Django #DRF #REST https://lnkd.in/dNsZu8u9
To view or add a comment, sign in
-
I just shipped dj-signals-panel, a new addition to Django Control Room. it shows: – which signals are registered – which recievers are connected – where they live in your codebase – actual code snippets of recievers All inside your django admin Signals are powerful, but they are notoriously hard to reason about, with developers often guessing if they are even wired correctly. Dj-signals-panel makes this visible so you can work with signals with certainty. Django Control Room is turning the Django admin into a control plane for your system: Django Control Room: https://lnkd.in/eW8MGCCS dj-signals-panel: https://lnkd.in/ewVZw4VA
To view or add a comment, sign in
-
A friend pushed his API key to GitHub by mistake. Within 4 minutes — bots had scraped it. Within 6 minutes — they were making API calls. End of the month bill: $340 All because of one missing line in .gitignore. 👉 What .gitignore actually does: It tells Git: “These files exist locally — but never track or commit them.” 🚨 Why this matters 1. Security Your .env file contains real secrets: → API keys → Database credentials → JWT signing keys If it reaches GitHub → bots scan and exploit it within minutes. This is not rare. It happens daily. 2. Noise & junk files Files like: __pycache__/ • .venv/ • .DS_Store → Auto-generated → Cause merge conflicts → Bloat your repo They should never be committed. ⚡ The pattern most developers miss: .env # ignore real secrets .env.* # ignore all env variants !.env.example # allow template file 👉 The ! means exception .env.example is committed — but only with placeholder values. So anyone cloning your repo knows exactly what to configure. 👁️🗨️ Production-ready .gitignore (Python) # Secrets .env .env.* !.env.example # Python __pycache__/ *.py[cod] # Virtual env venv/ .venv/ # IDE .vscode/ .idea/ # Logs *.log logs/ # Uploads uploads/ *.pdf *.docx ⚠️ If you already exposed a secret: git rm --cached .env echo ".env" >> .gitignore git commit -m "remove .env from tracking" Then rotate the key immediately. Assume it’s already compromised. Building a production GenAI system — one phase at a time. Sharing real mistakes, real fixes, real engineering. What’s the most expensive mistake you’ve seen with secrets? 👇 Curious to hear #AIEngineering #Security #Git #Python #BuildInPublic
To view or add a comment, sign in
-
-
Excited to share my latest project: Advanced GitHub Repo Manager! 💻 Ever found an amazing GitHub repository but lost track of it later? Or wanted a curated list of the best tools out there? I built this platform as a centralized catalog where developers can easily fetch, save, and share popular Git repositories for the whole community to discover and use! ✨ Key Features: 🔹 Live Fetching: Instantly preview GitHub repository metadata using the GitHub API. 🔹 Community Catalog: Search, filter (by language like Python, JS, TypeScript), and sort repositories saved by other users. 🔹 Personal Workspaces: Create an account to bookmark favorites and manage your own uploads. 🔹 Admin Dashboard: Full control over user roles, CSV imports/exports, and platform analytics. 🔹 UI/UX: Built-in Dark Mode 🌙 and responsive design! Building this was a great experience in API integration, database management, and creating a scalable architecture. Check out the video below for a quick walkthrough! 👇 Would love to hear your feedback in the comments. What is one GitHub repository you can't live without? Let me know! #GitHub #WebDevelopment #OpenSource #SoftwareEngineering #DeveloperCommunity #PHP #ProjectShowcase #TechInnovation #Coding
To view or add a comment, sign in
-
Day 25 of my 30-day Claude Code series, and this is the one most developers will bookmark but not act on immediately. Which is exactly right. Because the first thing worth knowing about building a custom MCP server is when not to build one. There are hundreds of pre-built MCP servers already. GitHub, Supabase, Linear, Notion, Stripe — if you need to connect Claude Code to a popular service, someone already built the connector. No prize for rebuilding it. But there are three situations where building your own makes sense. You have an internal tool or private API that doesn't have a public server. No existing server fits your exact workflow. Or you want to package a set of Claude Code capabilities that your whole team shares consistently across projects. If any of those apply — the barrier is much lower than it looks. Here's what a custom MCP server actually is. A program that exposes tools — functions Claude Code can call. Each tool has a name, a description, an input schema, and a handler that runs when Claude calls it. That's it. The official SDK handles all the protocol complexity. You just write the business logic. The one thing worth paying close attention to: the tool description is everything. That's how Claude decides when to call your tool. A vague description means the tool never gets used correctly. Be specific about what it does, what it expects, and what it returns. A practical example I want to build for my own projects: a server that wraps my Supabase queries so Claude Code can ask things like "show me the 10 most recent errors" or "look up the user with this email" and get real database records back. Combined with local codebase context, that's a debugging workflow that didn't exist before. The Python path is noticeably simpler if you know Python at all — FastMCP reduces the whole thing to a function with a docstring. TypeScript works just as well if that's your stack. MCP track complete. Days 22 to 25 covered the full arc from what it is to building your own. Skills track starts tomorrow. Full guide with the minimal working example in both TypeScript and Python: 👉 https://lnkd.in/gPgeQStx
To view or add a comment, sign in
-
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development
Congratulations Snipher ! Keep up the good work