Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
cdzombak committed May 24, 2024
0 parents commit 45401c8
Show file tree
Hide file tree
Showing 24 changed files with 3,198 additions and 0 deletions.
24 changes: 24 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
root = true

[*]
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.py]
indent_style = space
indent_size = 4
max_line_length = 88

[*.md]
indent_style = space
indent_size = 2

[*.json]
indent_style = space
indent_size = 2

[*.yml]
indent_style = space
indent_size = 2
225 changes: 225 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
---
name: CI

"on":
push:
branches:
- "main"
tags:
- "v*.*.*"
pull_request:
branches:
- "main"

permissions:
contents: read

jobs:
meta:
name: Derive Build Metadata
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Derive version string
id: bin_version
run: echo "bin_version=$(./.version.sh)" >> "$GITHUB_OUTPUT"
- name: bin_version
run: "echo bin_version: ${{ steps.bin_version.outputs.bin_version }}"
- name: Check if this is a running version tag update
id: running_version_tag
run: |
if [ -z "${{ github.event.ref }}" ]; then
echo "is_running_version_tag_update=false" >> "$GITHUB_OUTPUT"
elif [[ "${{ github.event.ref }}" =~ ^refs/tags/v[0-9]+\.[0-9]+$ ]]; then
echo "is_running_version_tag_update=true" >> "$GITHUB_OUTPUT"
elif [[ "${{ github.event.ref }}" =~ ^refs/tags/v[0-9]+$ ]]; then
echo "is_running_version_tag_update=true" >> "$GITHUB_OUTPUT"
else
echo "is_running_version_tag_update=false" >> "$GITHUB_OUTPUT"
fi
- name: is_running_version_tag
run: "echo is_running_version_tag_update: ${{ steps.running_version_tag.outputs.is_running_version_tag_update }}"
outputs:
project_name: ${{ github.event.repository.name }}
bin_version: ${{ steps.bin_version.outputs.bin_version }}
dockerhub_owner: ${{ github.repository_owner }}
is_prerelease: >-
${{
steps.running_version_tag.outputs.is_running_version_tag_update != 'true' &&
startsWith(github.ref, 'refs/tags/v') &&
(contains(github.ref, '-alpha.')
|| contains(github.ref, '-beta.')
|| contains(github.ref, '-rc.'))
}}
is_release: >-
${{
steps.running_version_tag.outputs.is_running_version_tag_update != 'true' &&
startsWith(github.ref, 'refs/tags/v') &&
!(contains(github.ref, '-alpha.')
|| contains(github.ref, '-beta.')
|| contains(github.ref, '-rc.'))
}}
is_pull_request: ${{ github.event_name == 'pull_request' }}
is_running_version_tag_update: ${{ steps.running_version_tag.outputs.is_running_version_tag_update }}

lint:
name: Lint & Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install Ruff
run: |
python -m pip install --upgrade pip
pip install ruff
- name: Run Ruff
run: |
ruff format --output-format=github .
ruff check --output-format=github .
- name: Install Prettier
run: npm install -g prettier
- name: Run Prettier
run: prettier --check .

test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Python tests
run: |
python -m unittest tests/*.py
docker:
name: Docker Images
needs: [meta, lint, test]
if: needs.meta.outputs.is_running_version_tag_update != 'true'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Login to Docker Hub
if: needs.meta.outputs.is_pull_request != 'true'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: linux/arm64,linux/amd64

- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3

- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}

- name: "Meta: amd64-cuda"
id: docker_meta_amd64_cuda
uses: docker/metadata-action@v5
with:
images: |
${{ needs.meta.outputs.dockerhub_owner }}/${{ needs.meta.outputs.project_name }}
tags: |
type=ref,event=branch,suffix="-amd64-cuda"
type=ref,event=pr,suffix="-amd64-cuda"
type=semver,pattern={{version}},suffix="-amd64-cuda"
type=semver,pattern={{major}}.{{minor}},suffix="-amd64-cuda"
type=semver,pattern={{major}},suffix="-amd64-cuda"
- name: "Build & Push: amd64-cuda"
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile-amd64-cuda
platforms: amd64
builder: ${{ steps.buildx.outputs.name }}
push: ${{ needs.meta.outputs.is_pull_request != 'true' }}
tags: ${{ steps.docker_meta_amd64_cuda.outputs.tags }}
labels: ${{ steps.docker_meta_amd64_cuda.outputs.labels }}
build-args: |
BIN_VERSION=${{ needs.meta.outputs.bin_version }}
- name: "Meta: amd64-cpu"
id: docker_meta_amd64_cpu
uses: docker/metadata-action@v5
with:
images: |
${{ needs.meta.outputs.dockerhub_owner }}/${{ needs.meta.outputs.project_name }}
tags: |
type=ref,event=branch,suffix="-amd64-cpu"
type=ref,event=pr,suffix="-amd64-cpu"
type=semver,pattern={{version}},suffix="-amd64-cpu"
type=semver,pattern={{major}}.{{minor}},suffix="-amd64-cpu"
type=semver,pattern={{major}},suffix="-amd64-cpu"
- name: "Build & Push: amd64-cpu"
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile-amd64-cpu
platforms: amd64
builder: ${{ steps.buildx.outputs.name }}
push: ${{ needs.meta.outputs.is_pull_request != 'true' }}
tags: ${{ steps.docker_meta_amd64_cpu.outputs.tags }}
labels: ${{ steps.docker_meta_amd64_cpu.outputs.labels }}
build-args: |
BIN_VERSION=${{ needs.meta.outputs.bin_version }}
- name: Update Docker Hub description
if: needs.meta.outputs.is_release == 'true'
uses: peter-evans/dockerhub-description@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: ${{ needs.meta.outputs.dockerhub_owner }}/${{ needs.meta.outputs.project_name }}
readme-filepath: ./README.md
short-description: ${{ github.event.repository.description }}

release:
name: GitHub (Pre)Release
needs: [meta, lint, test, docker]
if: >-
needs.meta.outputs.is_release == 'true' ||
needs.meta.outputs.is_prerelease == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Create GitHub release
uses: softprops/action-gh-release@v1
with:
prerelease: ${{ needs.meta.outputs.is_prerelease == 'true' }}
generate_release_notes: true

tags:
name: Update Release Tags
needs: [meta, release]
if: needs.meta.outputs.is_release == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Update running major/minor version tags
uses: sersoft-gmbh/running-release-tags-action@v3
with:
fail-on-non-semver-tag: true
create-release: false
update-full-release: false
Loading

0 comments on commit 45401c8

Please sign in to comment.