This project is a web tool for tracking MFC (merges to stable branches) state of Subversion commits. For now it's supposed to be used by FreeBSD developers but can easily be adopted to any Sunbversion repository with organization simmilar to FreeBSD's one.
MFCTracker stack consists of Django, Python2, PostgreSQL. Production deployment is built using Nginx, uWSGI, and supervisord. The stack is generally OS-agnostic but automation scripts assume FreeBSD. Python2 was chosen because uWSGI on FreeBSD is built with Python2 support and I didn't want to generate custom packages for this project.
Development VM can be created using vagrant tool. Run
vagrant up to start VM, then
vagrant ssh to log in. The project sources are located in
/app directory which is mounted over NFS from host machine. To populate database run
sh scripts/setup.sh in that directory followed by
python manage.py importcommits command.
To start web app run
python manage.py runserver 0:8000, web UI should be available at http://localhost:8000
To test logged-in user functionality set user password using
python manage.py changepassword username command.
username is any committer login (bare login, no @FreeBSD.org part)
MFCTracker uses Ansible for initial setup and deployment automation. To setup a server install vanilla FreeBSD 11 and run following commands:
sudo pkg install git-lite py37-ansible git clone https://github.com/gonzoua/mfctracker.git ansible-playbook -i localhost, mfctracker/playbooks/setup.yml
Setup playbook will create mfctracker user, prepare directory layout, install all production requirements, PostgreSQL, creates database and user. After it's finished open
/usr/local/etc/mfctracker.env, change value of the
SECRET_KEY and optionally change mailer URL and LDAP config. Machine is ready for intial deployment.
Keep clone of mfctracker repo to get latest versions of playbooks before performing update.
For initial deployment run following command:
ansible-playbook -i localhost, mfctracker/playbooks/deploy.yml
Once it's finished you should have one directory name like
/usr/local/mfctracker/, and symlink
latest pointing to that directory. Now you have working mfctracker setup but without any useful data.
Now we need to create branches and import all commits. To create branches run
git clone --config remote.origin.fetch='+refs/notes/*:refs/notes/*' https://git.freebsd.org/src.git ~/src mfctracker-manage addbranch --trunk --name HEAD --path main --branch-point 3ade9440198973efee3e6ae9636e1b147c72140b mfctracker-manage addbranch --name STABLE-12 --path stable/12
To import commits run (this command may take some time to finish)
Once it's done mfctracker will sync commits every 7 minutes (there is cron job created for user
mfctracker to do this)
Get latest version of playbooks by syncing to the latest version of MFCTracker repo (see step Server Setup):
cd mfctracker git pull
Run deployment playbook
ansible-playbook -i localhost, playbooks/deploy.yml
It will perform exactly the same action as for initial performance, the only difference you don't have to edit anything. Once this step is done you should have latest version of MFCTracker up and running.