Thank you for your interest in contributing to Ruby Australia! This project welcomes contributors of all experience levels, from those learning to code to seasoned Ruby veterans.
- Getting Started
- Development Workflow
- Project Architecture
- Making Changes
- Submitting Your Contribution
- Getting Help
Before you begin, make sure you have:
- Git installed on your machine
- Ruby - Check the required version in the
.tool-versionsfile (verify withruby -v) - Node.js and Yarn for frontend assets - Check the required version in the
.tool-versionsfile (verify withnode -vandyarn -v) - PostgreSQL for the database
- A GitHub account
- Joined the Ruby Australia Slack (recommended)
-
Fork and clone the repository Fork the repository on GitHub
git clone https://github.com/YOUR-USERNAME/ruby_au.git cd ruby_au -
Install git hooks (before running setup)
bin/install-hooks
-
Run the setup script
bin/setup
This will install dependencies, set up the database, and start the development server.
-
Verify everything works
- Visit
http://localhost:3000in your browser - You should see the Ruby Australia homepage
- Visit
bin/devThis starts Foreman with Vite (frontend assets), Puma (Rails server), and background jobs.
Additional content is available to logged in users. You may create your own users, or use these seeded accounts:
| Account Type | Password | Comments | |
|---|---|---|---|
| Committee Member | committee@example.com |
password123 |
Has access to administration features eg Posts, Campaigns |
| Member | jobseeker@example.com |
password123 |
In Profile, has job seeking status of Currently Seeking Work |
- Browse the GitHub Issues
- Look for issues tagged
beginner friendlyif you're new to the project - Check the Mentored Contributions Program for guided tasks
- Ask in the
#org-webor#mentored-contributionsSlack channel if you're unsure
- Check if someone else is already working on it - Comment on the issue to let others know you're taking it
- Create a new branch from
maingit checkout main git pull origin main git checkout -b your-feature-name
We use automated tools to maintain code quality:
- Ruby linting:
bundle exec rubocop - JavaScript/TypeScript linting:
yarn lint
Please run these before submitting your PR. The git hooks will help catch issues early.
Always run tests before submitting a PR:
# Run full test suite (RSpec + Rubocop for main app and meetup sites)
bin/tests
# Run only RSpec tests
bin/rspec
# Run tests for city site engines only
bin/rspec sites
# Run a specific test file
bundle exec rspec spec/path/to/specific_spec.rbAll tests should pass before you submit your pull request.
This Rails application uses a "lean engines" pattern to manage multiple Ruby community sites:
- Main App: Core Ruby Australia website (
ruby.org.au) - Site Engines: City-specific sites in the
sites/directory- Example:
melbourne.ruby.org.au→sites/melbourne/
- Example:
Each site engine is a minimal Rails::Engine with:
- Its own namespace (e.g.,
Melbourne::) - Its own routes in
sites/[city]/config/routes.rb - Its own MVC structure in
sites/[city]/app/ - Engine definition in
sites/[city]/lib/[city]/engine.rb
Engines are mounted with subdomain constraints in the main app's config/routes.rb.
- Backend: Ruby on Rails
- Frontend: Vite + Hotwire + TailwindCSS
- Database: PostgreSQL
- Background Jobs: Solid Queue
- Authentication: Devise
- Testing: RSpec + Capybara + FactoryBot
- Follow Ruby community standards (enforced by Rubocop)
- Write clear, descriptive variable and method names
- Add comments for complex logic, but prefer self-documenting code
- Keep methods small and focused
- Add tests for new features
- Update tests when modifying existing features
- Use FactoryBot for test data
- Follow existing test patterns in the
spec/directory
- Generate migrations with
bin/rails generate migration - Use
bin/rails db:migrateto apply changes - Make sure migrations are reversible
- City site engines can have their own migrations in
sites/[city]/db/migrate/
- Frontend assets are managed by Vite
- Build assets with
yarn build - The dev server (
bin/dev) includes Vite with hot reloading - Styles use TailwindCSS utility classes
Found a bug?
- Check if it's already reported in GitHub Issues
- If not, open a new issue with:
- Clear, descriptive title
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
- Your environment (OS, Ruby version, browser)
Ready to submit your changes?
-
Make sure your code is ready
- All tests and linting passes (
bin/tests) - You've tested manually in the browser
- All tests and linting passes (
-
Commit your changes
- Write clear, descriptive commit messages
- The subject line should:
- Be limited to 50 characters
- Have a capitalized first letter
- Not end with a full stop
- Use the imperative mood (e.g., "Fix bug," "Add feature," not "Fixed bug" or "Adds feature"). This makes the commit message read as a command or instruction.
- The body should:
- Wrap at 72 characters
- Explain the "what" and "why" of the changes, not necessarily the "how."
- Provide context that might not be immediately obvious from the code changes themselves.
- Make each commit a single, logical unit of work. Avoid combining unrelated changes into one commit, as this complicates tracking, reviewing, and reverting.
-
Push to your fork
git push origin your-feature-name
-
Create a Pull Request
- Go to the Ruby Australia repository
- Click "New Pull Request"
- Choose your fork and branch
- Fill in the PR template with:
- What you changed
- Why you changed it
- Link to the related issue
- Screenshots (for UI changes)
- Any special testing notes
-
Respond to feedback
- Maintainers may request changes
- Push new commits to the same branch to update your PR
- Be patient and respectful in discussions
- Slack: Join Ruby Australia Slack
#org-web- General discussion#mentored-contributions- For the Mentored Contributions Program
- GitHub Issues: Comment on the issue you're working on
If you're new to open source or want structured support:
- Learn more at ruby.org.au/pages/mentored_contributions
- Register for mentoring support
- Get matched with an experienced Rubyist who can guide you
All contributors must follow the Ruby Australia Code of Conduct. We're committed to providing a welcoming and inclusive environment for everyone.
Ruby Australia is entirely volunteer-run. Every contribution—big or small—helps us support events, tools, and community spaces that bring Rubyists together across Australia.
We're glad you're here. Let's build something great together!
Ruby Australia