Skip to content

Commit

Permalink
Merge pull request #89 from Michele-Alberti/development
Browse files Browse the repository at this point in the history
🐍 Add CI-CD jobs for releasing to PyPI and Github
  • Loading branch information
Michele-Alberti authored Jan 27, 2024
2 parents 7ec5bc1 + 2688f0b commit eacdc12
Show file tree
Hide file tree
Showing 70 changed files with 835 additions and 349 deletions.
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

0 comments on commit eacdc12

Please sign in to comment.