Shipmint is a data querying and export tool built with Python for running analytical SQL queries on the dvdrental dataset. It connects to a PostgreSQL database, executes pre-defined queries, and exports the results to CSV files.
This project includes a working Continuous Integration and Continuous Delivery (CI/CD) pipeline using GitHub Actions that builds and pushes a Docker image to Azure Container Registry and deploys it via Azure Container Instances.
.
shipmint/
├── .github/
│ └── workflows/
│ └── deploy.yml
├── .dockerignore
├── Dockerfile
├── LICENSE
├── flyingnimbus.py
├── requirements.txt
├── README.md- Python: Scripting and data transformation
- PostgreSQL: Data storage (hosted on Azure)
- Docker: Containerization
- Azure Container Registry (ACR): Stores Docker images
- Azure Container Instances (ACI): Runs containers on demand
- GitHub Actions: CI/CD pipeline
psycopg2– Used to connect and interact with the PostgreSQL database.os– Handles interaction with the operating system, such as environment variables and file paths.csv– Used for reading and writing CSV files, primarily for data export/import.time– Utilized during development and testing for adding delays (for stuff like while waiting for Azure containers or services to be ready).dotenv– Loads environment variables from a .env file, for keeping sensitive configs like db credentials out of source code.
git clone https://github.com/r-o-bo/shipmint
cd shipmintDB_HOST=your_postgres_host
DB_NAME=dvdrental
DB_USER=your_username
DB_PASSWORD=your_passworddocker build -t flying-nimbus .
docker run --env-file .env flying-nimbusThese are injected from GitHub Secrets during CI/CD:
DB_HOST
DB_NAME
DB_USER
DB_PASSWORD
ACR_LOGIN_SERVER
ACR_USERNAME
ACR_PASSWORD
AZURE_RG (Resource Group)
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
AZURE_TENANT_ID
AZURE_SUBSCRIPTION_ID
ACI_NAMEOn push to master, the GitHub Actions workflow will:
- Authenticate with Azure via OIDC.
- Build and push a Docker image to ACR.
- Delete any existing container instance.
- Deploy a new container to ACI.
- Wait for the container to finish execution.
- Delete the container (optional cleanup).
This project is licensed under the MIT License.


