elekto is a flask based web application for conducting online elections. It Implements the condorcet method.
The project was created as the part of Cloud Native Computing Foundation's Internship via The Linux Foundation mentorship program, to run community and steering elections for CNCF and LF projects.
The application requires a [meta]() repository to store election meta files. The meta repository is the single source of truth for the application and is managed by gitops, all the tasks like creating an election, adding/removing voters to the list are managed by raising specific pull requests in the meta repository. See our detailed instruction docs
The application is written in python
using flask
and sqlalchemy
. This repository ships a requirements.txt
and a environment.yml
for conda users.
# Installation with pip
pip install -r requirements.txt
# Installation with Conda
conda env create -f environment.yml && conda activate elekto
The repository has a .env.example
file which can be used as a template for .env
file, update the environment file after copying from .env.example
.
# create a new .env file from .env.example
cp .env.example .env
Set the basic information about the application in the upper section
APP_NAME=k8s.elections # set the name of the application
APP_ENV=development # development | production
APP_KEY= # random secret key (!! important !!)
APP_DEBUG=True # True | False (production)
APP_URL=http://localhost # Url where the application is hosted
APP_PORT=5000 # Default Running port for development
APP_HOST=localhost # Default Host for developmemt
Update the database credentials,
DB_CONNECTION=mysql # Mysql is only supported
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=name
DB_USERNAME=user
DB_PASSWORD=password
Update the meta repository info
META_REPO=https://github.com/elekto-io/elekto.meta.test.git
META_DEPLOYMENT=local
META_PATH=meta
META_BRANCH=main
META_SECRET= # same as webhook of the same meta repository
Update the Oauth info, create an github oauth app if already not created.
GITHUB_REDIRECT=/oauth/github/callback
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
The console
script in the repository is used to perform all the table creations and syncing of the meta.
# to migrate the database from command line
python console --migrate
To sync the database with the meta files
# to the sync the database with the meta
python console --sync
The flask server will start on 5000
by default but can be changed using --port
option.
# to run the server on default configs
python console --run
# to change host and port
python console --port 8080 --host 0.0.0.0 --run
See the website at Elekto.dev.
Elekto is a project of the CNCF, and you can reach us on CNCF Slack, channel #elekto.