Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐍 Add CI-CD jobs for releasing to PyPI and Github #89

Merged
merged 18 commits into from
Jan 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
e7c349f
Merge branch 'main' into development
github-actions[bot] Jan 2, 2024
0189ea1
feat: add azure as oauth provider and improve config files to handle …
albertm-edison Jan 6, 2024
09780cd
fix: fix reference to psw_special_chars
Michele-Alberti Jan 13, 2024
cae0624
fix(auth.py-is_basic_auth_active): fix error when returning the resul…
Michele-Alberti Jan 13, 2024
589fe1d
docs(README.md): add missing env variables to README.md
Michele-Alberti Jan 13, 2024
1bb7068
build: merge ci-cd environments under the same env and improve makefile
Michele-Alberti Jan 21, 2024
2edc717
ci(release_new_version.yaml): add support for pre-release flag to git…
Michele-Alberti Jan 21, 2024
9a7b6ed
build: change relevant files to be compatible with a python package b…
Michele-Alberti Jan 21, 2024
8c92473
refactor(package-name): change package name from data_lunch_app to dl…
Michele-Alberti Jan 21, 2024
8d2ad89
fix(cli.py): fix error in __version__ evaluation
Michele-Alberti Jan 21, 2024
b6ce22a
ci: improve ci-cd pipeline with PyPI package build and Github release
Michele-Alberti Jan 21, 2024
f932fd3
ci: update actions versions, add unique version for uploads to TestPyPI
Michele-Alberti Jan 23, 2024
437f45d
ci: use short names on actions names and jobs
Michele-Alberti Jan 23, 2024
bba7ada
ci(ci_cd.yaml): fix error in job name
Michele-Alberti Jan 23, 2024
ad170e4
ci(manual_build.yaml): change release environment to test-release
Michele-Alberti Jan 23, 2024
038206e
ci(makefile): fix and add utility commands to install package from Py…
Michele-Alberti Jan 23, 2024
0a1169c
feat(__main__.py): add an /health endpoint
Michele-Alberti Jan 25, 2024
2688f0b
ci(.pre-commit-config.yaml): pre-commit autoupdate
pre-commit-ci[bot] Jan 8, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions .github/workflows/bump_version.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Bump version with Commitizen

name: 🚀 Bump version

on:
push:
branches:
- main

jobs:
bump_version:
name: 🚀 Bump and changelog
runs-on: ubuntu-latest
if: contains(github.event.head_commit.message, 'Merge')
environment:
name: release
url: https://github.com/Michele-Alberti/data-lunch/tags
outputs:
version: ${{ steps.cz.outputs.version }}
steps:
- name: Set pre-release
id: vars
env:
TITLE: ${{ github.event.pull_request.title }}
run: |
pre_release=$(awk -F'[][]' '{print $2}' <<< "$TITLE")
echo "pre_release=$pre_release" >> $GITHUB_OUTPUT
echo "pre-release: $pre_release"
- name: Check out
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
- name: Bump and changelog
id: cz
uses: commitizen-tools/commitizen-action@0.16.1
with:
github_token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
prerelease: "${{ steps.vars.outputs.pre_release }}"
- name: Print version
run: echo "Bumped to version ${{ steps.cz.outputs.version }}"

merge_back_to_dev:
name: 🔗 Merge back
needs: bump_version
runs-on: ubuntu-latest
environment:
name: release
url: https://github.com/Michele-Alberti/data-lunch/commits/development
steps:
- name: Check out
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: main
- name: Set Git config
run: |
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
- name: Merge master back to dev
run: |
git checkout development
git merge --no-ff main -m "Merge branch 'main' into development"
git push
196 changes: 196 additions & 0 deletions .github/workflows/ci_cd.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
# Continuous improvement and delivery

name: 🐍 Publish and release 📦

on:
push:
branches:
- main
- development

jobs:
# Build the package for PyPI
build:
name: 🛠️ Build 📦
# Only publish to PyPI on tag pushes and on TestPyPI if branch is development
if: startsWith(github.ref_name, 'refs/tags/v')
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install pypa/build
run: >-
python3 -m
pip install
build
--user
- name: Build a binary wheel and a source tarball
run: python3 -m build
- name: Store the distribution packages
uses: actions/upload-artifact@v3
with:
name: python-package-distributions
path: dist/

# Publish to PyPI only for tags that start with 'v'
publish-to-pypi:
name: >-
🐍 Publish 📦 to PyPI
needs:
- build
runs-on: ubuntu-latest

environment:
name: release
url: https://pypi.org/p/dlunch

permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing

steps:
- name: Download all the dists
uses: actions/download-artifact@v3
with:
name: python-package-distributions
path: dist/
- name: Publish distribution package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1

# Then release to github
github-release:
name: 🛫 Release 📦 on GitHub
needs:
- publish-to-pypi
runs-on: ubuntu-latest

permissions:
contents: write # IMPORTANT: mandatory for making GitHub Releases
id-token: write # IMPORTANT: mandatory for sigstore

steps:
- name: Download all the dists
uses: actions/download-artifact@v3
with:
name: python-package-distributions
path: dist/
- name: Sign the dists with Sigstore
uses: sigstore/gh-action-sigstore-python@v1.2.3
with:
inputs: >-
./dist/*.tar.gz
./dist/*.whl
- name: Create GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
run: >-
gh release create
'${{ github.ref_name }}'
--repo '${{ github.repository }}'
--notes ""
- name: Upload artifact signatures to GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
# Upload to GitHub Release using the `gh` CLI.
# `dist/` contains the built packages, and the
# sigstore-produced signatures and certificates.
run: >-
gh release upload
'${{ github.ref_name }}' dist/**
--repo '${{ github.repository }}'

# And build container
build_container:
name: 🐋 Build Docker image
needs:
- publish-to-pypi
runs-on: ubuntu-latest

environment:
name: release
url: https://hub.docker.com/r/michelealberti/data-lunch-app

steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: main
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push
uses: docker/build-push-action@v3
with:
context: ./
file: ./docker/web/Dockerfile.web
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/data-lunch-app:stable
cache-from: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/data-lunch-app:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/data-lunch-app:buildcache,mode=max

# If on development just publish to TestPyPI
# Build the package for TestPyPI
test-build:
name: 🚧 Build test 📦
# Only publish to PyPI on tag pushes and on TestPyPI if branch is development
if: github.ref_name == 'development'
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install pypa/build
run: >-
python3 -m
pip install
build
--user
- name: Change package version to unique value
run: |
test_ver=$(git describe | sed 's/\(.*-.*\)-.*/\1/')
echo test version: $test_ver
sed -i "s/version = \".*\"/version = \"$test_ver\"/g" pyproject.toml
- name: Build a binary wheel and a source tarball
run: python3 -m build
- name: Store the distribution packages
uses: actions/upload-artifact@v3
with:
name: python-package-distributions
path: dist/

publish-to-testpypi:
name: 🧪 Publish 📦 to TestPyPI
needs:
- test-build
runs-on: ubuntu-latest

environment:
name: test-release
url: https://test.pypi.org/p/dlunch

permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing

steps:
- name: Download all the dists
uses: actions/download-artifact@v3
with:
name: python-package-distributions
path: dist/
- name: Publish distribution package to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
11 changes: 7 additions & 4 deletions .github/workflows/manual_build.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Bump version with Commitizen
# Manual Docker build

name: Manual build
name: 🪛 Manual build

on:
workflow_dispatch:
Expand All @@ -14,15 +14,18 @@ on:

jobs:
build_container:
name: Build container image
name: 🐋 Build Docker image
runs-on: ubuntu-latest
environment:
name: test-release
url: https://hub.docker.com/r/michelealberti/data-lunch-app
steps:
- name: Print build info
run: |
echo "Image tag: ${{ github.event.inputs.tag }}"
echo "Description: ${{ github.event.inputs.build_description }}"
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Login to DockerHub
uses: docker/login-action@v2
with:
Expand Down
77 changes: 0 additions & 77 deletions .github/workflows/release_new_version.yaml

This file was deleted.

2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ repos:
- id: black
language_version: python3
- repo: https://github.com/pycqa/flake8
rev: 6.1.0
rev: 7.0.0
hooks:
- id: flake8
- repo: https://github.com/commitizen-tools/commitizen
Expand Down
4 changes: 4 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
recursive-include dlunch/conf *
recursive-include dlunch/static *
recursive-include dlunch/templates *
include dlunch/quotes.xlsx
Loading
Loading