Skip to content

Commit

Permalink
release: 🔖 version 0.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
kikkomep committed Sep 25, 2024
2 parents 69bb824 + 1755a74 commit 50defd7
Show file tree
Hide file tree
Showing 293 changed files with 41,232 additions and 0 deletions.
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
PYTHONPATH=rocrate_validator
192 changes: 192 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
# This workflow is triggered on push to tags and runs the following steps:
# 1. Check and Build Distribution
# 2. Publish to TestPyPI
# 3. Publish to PyPI if the previous step is successful
# 4. Sign Distribution with Sigstore
# 5. Create GitHub Release with the signed distribution
name: 📦 CI Pipeline 2 -- Release

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
push:
tags:
- "*.*.*"
paths:
- "**"
- "!docs/**"
- "!examples/**"

env:
TERM: xterm
VENV_PATH: .venv

jobs:
# Wait for the testing pipeline to finish
wait-for-testing:
name: 🕒 Wait for Testing Pipeline
runs-on: ubuntu-latest
if: ${{ github.repository == 'crs4/rocrate-validator' }}
steps:
- name: Wait for testing pipeline to succeed
uses: fountainhead/[email protected]
id: wait-for-testing
with:
token: ${{ secrets.GITHUB_TOKEN }}
checkName: ⌛ Run tests
ref: ${{ github.sha }}

- name: Do something with a passing build
if: steps.wait-for-testing.outputs.conclusion == 'success'
run: echo "Testing pipeline passed" && exit 0

- name: Do something with a failing build
if: steps.wait-for-testing.outputs.conclusion == 'failure'
run: echo "Testing pipeline failed" && exit 1
# Check and Build Distribution
build:
name: 🏗 Check and Build Distribution
runs-on: ubuntu-latest
needs: wait-for-testing
if: ${{ github.repository == 'crs4/rocrate-validator' }}
steps:
# Access the tag from the first workflow's outputs
- name: ⬇️ Checkout code
uses: actions/checkout@v4
- name: 🐍 Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: 🚧 Set up Python Environment
run: |
pip install --upgrade pip
pip install poetry
- name: 📦 Install Package Dependencies
run: poetry install --no-interaction --no-ansi
- name: ✅ Check version
run: |
if [ "${{ github.event_name }}" == "push" ] && [ "${{ github.ref_type }}" == "tag" ]; then
declared_version=$(poetry version -s)
echo "Checking tag '${{ github.ref }}' against package version $declared_version"
if [ "${{ github.ref }}" != "refs/tags/$declared_version" ]; then
echo "Tag '${{ github.ref }}' does not match the declared package version '$declared_version'"
exit 1
else
echo "Tag '${{ github.ref }}' matches the declared package version '$declared_version'"
fi
fi
- name: 🏗️ Build a binary wheel and a source tarball
run: poetry build
- name: 📦 Store the distribution packages
uses: actions/upload-artifact@v4
with:
name: python-package-distributions
path: |
dist/*.whl
dist/*.tar.gz
# Publish to TestPyPI
publish-to-testpypi:
name: 📦 Publish to TestPyPI
runs-on: ubuntu-latest
needs: build
environment:
name: testpypi
url: https://test.pypi.org/p/test-py-pipelines
permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing
steps:
- name: ⬇️ Download all the distribution packages
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: 📦 Publish distribution to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/

# Publish to PyPI
publish-to-pypi:
name: 📦 Publish to PyPI
runs-on: ubuntu-latest
needs: [build, publish-to-testpypi]
environment:
name: pypi
url: https://pypi.org/p/test-py-pipelines
permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing
steps:
- name: ⬇️ Download all the dists
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: 📦 Publish distribution to PyPI
uses: pypa/gh-action-pypi-publish@release/v1

# Sign and Upload to GitHub Release
sign-packages:
name: 🖊️ Sign the Python distribution with Sigstore
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 distribution packages
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: 🖊️ Sign the dists with Sigstore
uses: sigstore/[email protected]
with:
inputs: >-
./dist/*.tar.gz
./dist/*.whl
- name: 📦 Store the signed distribution packages
uses: actions/upload-artifact@v4
with:
name: python-package-signatures
path: dist/*.sigstore

# Create GitHub Release
github_release:
name: 🎉 Release on GitHub
needs: sign-packages
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 distribution packages
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: ⬇️ Download all the distribution signatures
uses: actions/download-artifact@v4
with:
name: python-package-signatures
path: dist/
- name: 🎉 Create GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
run: >-
gh release create
'${{ github.ref_name }}'
--repo '${{ github.repository }}'
--generate-notes
- name: 📦 Upload artifacts 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 }}'
67 changes: 67 additions & 0 deletions .github/workflows/testing.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: 🧪 CI Pipeline 1 -- Testing

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
push:
branches:
- "**"
tags:
- "*.*.*"
paths:
- "**"
- "!docs/**"
- "!examples/**"
pull_request:
paths:
- "**"
- "!docs/**"
- "!examples/**"

env:
TERM: xterm
VENV_PATH: .venv
PYTHON_VERSION: "3.11"

jobs:
# Verifies pep8, pyflakes and circular complexity
flake8:
name: 🚨 Lint Python Code
runs-on: ubuntu-latest
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- name: ⬇️ Checkout code
uses: actions/checkout@v4
- name: 🐍 Set up Python v${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: 🔽 Install flake8
run: pip install flake8
- name: ⌛ Run checks
run: flake8 -v rocrate_validator tests

# Runs the tests
test:
name: ⌛ Run tests
runs-on: ubuntu-latest
needs: [flake8]
steps:
- name: ⬇️ Checkout
uses: actions/checkout@v4
- name: 🐍 Set up Python v${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: 🔄 Upgrade pip
run: pip install --upgrade pip
- name: 🐍 Initialise a virtual env
run: python -m venv ${VENV_PATH}
- name: 🐍 Enable virtual env
run: source ${VENV_PATH}/bin/activate
- name: 🔽 Install Poetry
run: pip install poetry
- name: 🔽 Install dependencies
run: poetry install --no-interaction --no-ansi
- name: ⌛ Run tests
run: poetry run pytest
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.DS_Store
**/__pycache__
**/*.pyc
**/.pytest_cache

# ignore virtualenv
.venv

# ignore coverage files
**/.coverage
**/.coverage.*
**/.report
81 changes: 81 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Copyright (c) 2024 CRS4
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

stages:
- install
- test
- build

variables:
IMAGE: python:3.12-slim # Define the desired Docker image for the runner
VENV_PATH: .venv # Define the virtual environment path
POETRY_VERSION: 1.8.3 # Define the desired Poetry version
CACHE_KEY: $CI_COMMIT_REF_NAME # Define the cache key
RUNNER_TAG: rvdev # Define the desired runner tag

# Install dependencies
install_dependencies:
stage: install
before_script:
- pip install --upgrade pip
- python -m venv ${VENV_PATH}
- source ${VENV_PATH}/bin/activate
- pip install poetry==${POETRY_VERSION}
script:
- poetry config virtualenvs.in-project true
- poetry install --no-interaction --no-ansi
cache:
key: ${CACHE_KEY}
paths:
- ${VENV_PATH}
tags:
- ${RUNNER_TAG}

# Run tests
test:
stage: test
before_script:
- source ${VENV_PATH}/bin/activate
script:
- poetry run pytest
dependencies:
- install_dependencies
coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+)%/'
cache:
key: ${CACHE_KEY}
paths:
- ${VENV_PATH}
tags:
- ${RUNNER_TAG}


# Build the application
build:
stage: build
before_script:
- source ${VENV_PATH}/bin/activate
script:
- poetry build
dependencies:
- test
artifacts:
paths:
- dist/
expire_in: 30 minutes
cache:
key: ${CACHE_KEY}
paths:
- ${VENV_PATH}
tags:
- ${RUNNER_TAG}
Loading

0 comments on commit 50defd7

Please sign in to comment.