Skip to content

Your first contribution

NienkeWessel edited this page Oct 26, 2022 · 30 revisions

Introduction

Welcome! This guide is your first step into the world that we call 'concrexit'. 'concrexit?', yup. It's the name we gave the system that is Thalia's website. In July of 2015 we moved from the archaic Thalia-system to a Concrete5-based website where a lot of work had been put into. However, roughly one year later we were discussing our reluctance to maintaining the system that we had build. We had developed an aversion against Concrete5, its community and the horrible documentation (never mention it's maintainer, Andrew Embler). The CMS was never meant to do the job we wanted it to do. Thus we initiated Project #concrexit (Brexit was in the news at that time, update fall 2019: 4 years later it still is) to make things 'makkelijk en leuk' (easy and fun) again. The name eventually stuck.

Now let's go back to the present. What's 'concrexit' exactly? We based our system on the Django framework, which means that everything is written in Python, specifically Python 3. This choice was made because Python is easy to learn and maintain.

Important apps

Django has some kind of modules that they call 'apps'. concrexit has multiple apps that you can find inside the website directory in the repo. At the time of writing we have 15 of them, but this may change based on the needs of the association.

There are three apps that form the foundation:

  • thaliawebsite This is the entry point of the system, it holds everything together.
  • members Basically everything related to the association member administration.
  • activemembers Holds the code to manage boards, committees and their permissions.

Issues

To manage our work we're using GitHub's built-in issues system and some templates. This list contains the bugs, new features and changes that we are planning on doing some time. We can use tags to differentiate types of issues, some may have a higher priority than others for example. You can find our current issue list here.

Working on your own issue basically goes like this:

  1. Assign the issue to yourself.
  2. Create a branch with the issue name/number.
  3. Make changes in the code.
  4. Create a Pull Request (PR).
  5. Solve potential discussions.
  6. Someone else will merge your changes once they've been checked.

Releases

Once in a while (at the time of writing: roughly each month) we deploy a new version of concrexit. This is most likely coordinated by the committee's chair. They collect all issues that should be included in the release, create a release branch and tag, write release notes and make an announcement. Nothing you should worry about yet :)

Setting up your environment

Before you can dive into the project you need to setup your development environment. We're assuming that you have installed Git and a version of Python. Which version you need depends on when you're reading this. Just check the 'Getting started' section in the README for more details.

Once you have cloned the repository and installed all requirements you can open the project. At the time of writing there is an awesome JetBrains discount for students that offers their products, including PyCharm, for free. But VS Code or Sublime Text would do too. And if you're not really into IDEs you could just use VIM 🤷.

Your first issue

Now that you have the environment ready, you can start working on your first issue:


Labels: feature, priority: low

One-sentence description

Add shoe size to user profiles

Desired behaviour

We would like to know the shoe size of our members so that we can reserve shoes at the bowling alley and skiing resort without asking for the same information each year.

However, the sizes should be restricted to values between 39 and 47, since there are no smaller/larger shoes at those places. Since not everyone might have a size in this range the field can be empty.

We want to edit the field on the member edit page in the admin and show the shoe size on the public user profiles.


Let's analyse this issue:

  • It's about users.
  • We need to add a field to the profile.
  • It's a field for the shoe size.
  • The field should only accept values from 39 until 47.
  • It can be empty.
  • It should be editable on the admin member edit page.
  • It should be visible on the public user profiles.

And now you're on your own. Solve this issue for us and learn the basic in-and-outs of concrexit. Although you can work on your own branch, please don't make a pull request on our repository, just ask a Technicie member to review your work ;)

Help I don't know what to do!

We're not horrible people and you're welcome to ask every question you want. However, we prepared hints that you can use if you're stuck. You can find the first one here.

Implementation

Interested in the final implementation of this issue? Take a look at this commit.