Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
36 changes: 36 additions & 0 deletions .github/actions/create-test-env/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Create Test Environment
description: Create .env file with test configuration for CI/testing purposes
inputs:
database-url:
description: Database URL for testing
required: false
default: sqlite:///tmp/test.db
bot-token:
description: Bot token for testing
required: false
default: test_token_for_ci
additional-vars:
description: Additional environment variables (KEY=value format, one per line)
required: false
default: ''
runs:
using: composite
steps:
# TEST ENVIRONMENT CONFIGURATION
# Creates isolated test environment with safe defaults
- name: Create test environment file
shell: bash
run: |-
# Create .env file for CI/testing with required values
cat > .env << EOF
DEV_DATABASE_URL=${{ inputs.database-url }}
PROD_DATABASE_URL=${{ inputs.database-url }}
DEV_BOT_TOKEN=${{ inputs.bot-token }}
PROD_BOT_TOKEN=${{ inputs.bot-token }}
EOF

# Add any additional environment variables if provided
if [ -n "${{ inputs.additional-vars }}" ]; then
echo "${{ inputs.additional-vars }}" >> .env
fi
echo "✅ Test environment file created"
34 changes: 34 additions & 0 deletions .github/actions/setup-nodejs-markdown/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Setup Node.js for Markdown Linting
description: Set up Node.js with caching and install markdownlint-cli
inputs:
node-version:
description: Node.js version to use
required: false
default: '20'
runs:
using: composite
steps:
# NODE.JS ENVIRONMENT SETUP
# Required for markdownlint-cli installation and execution
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
cache: npm
cache-dependency-path: '**/package*.json'

# NPM CACHE OPTIMIZATION
# Reduces markdownlint installation time on repeated runs
- name: Cache node modules
uses: actions/cache@v4
with:
path: ~/.npm
key: node-${{ runner.os }}-${{ hashFiles('**/package*.json') }}
restore-keys: |
node-${{ runner.os }}-

# MARKDOWNLINT INSTALLATION
# Global installation for CLI usage across all files
- name: Install markdownlint
shell: bash
run: npm install -g markdownlint-cli
66 changes: 66 additions & 0 deletions .github/actions/setup-python/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Setup Python Environment
description: Set up Python with Poetry, dependencies, and optional Prisma client generation
inputs:
python-version:
description: Python version to use
required: false
default: '3.13'
install-groups:
description: Poetry groups to install (comma-separated)
required: false
default: dev,types
cache-suffix:
description: Cache key suffix for differentiation
required: false
default: default
generate-prisma:
description: Whether to generate Prisma client
required: false
default: 'true'
runs:
using: composite
steps:
# POETRY INSTALLATION
# Uses pipx for isolated Poetry installation without conflicts
- name: Install Poetry
shell: bash
run: pipx install poetry

# PYTHON ENVIRONMENT SETUP
# Configures Python with integrated Poetry cache support
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ inputs.python-version }}
cache: poetry

# ADVANCED DEPENDENCY CACHING
# Multi-level caching strategy for maximum cache hit rate
- name: Cache Poetry dependencies
uses: actions/cache@v4
with:
path: |
~/.cache/pypoetry
~/.cache/pip
key: poetry-${{ inputs.cache-suffix }}-${{ runner.os }}-${{ hashFiles('poetry.lock')
}}
restore-keys: |
poetry-${{ inputs.cache-suffix }}-${{ runner.os }}-

# DEPENDENCY INSTALLATION
# Installs specified Poetry groups with CI-optimized settings
- name: Install dependencies
shell: bash
run: |
if [[ "${{ inputs.install-groups }}" == "main" ]]; then
poetry install --only=main --no-interaction --no-ansi
else
poetry install --with=${{ inputs.install-groups }} --no-interaction --no-ansi
fi

# CONDITIONAL PRISMA CLIENT GENERATION
# Generates Prisma database client when needed for database operations
- name: Generate Prisma client
if: ${{ inputs.generate-prisma == 'true' }}
shell: bash
run: poetry run prisma generate
49 changes: 49 additions & 0 deletions .github/actions/upload-coverage/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Upload Coverage to Codecov
description: Upload coverage reports and test results to Codecov
inputs:
coverage-file:
description: Path to the coverage XML file
required: true
junit-file:
description: Path to the JUnit XML file
required: false
default: ''
flags:
description: Codecov flags for categorization
required: true
name:
description: Coverage report name
required: true
codecov-token:
description: Codecov token
required: true
slug:
description: Repository slug (owner/repo)
required: false
default: allthingslinux/tux
runs:
using: composite
steps:
# COVERAGE UPLOAD TO CODECOV
# Uploads coverage data with specific flags for categorization
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: ${{ inputs.coverage-file }}
flags: ${{ inputs.flags }}
name: ${{ inputs.name }}
token: ${{ inputs.codecov-token }}
slug: ${{ inputs.slug }}
fail_ci_if_error: false
verbose: true
disable_search: true

# TEST RESULTS UPLOAD TO CODECOV
# Uploads test results for analytics (only if junit file provided)
- name: Upload test results to Codecov
if: ${{ inputs.junit-file != '' }}
uses: codecov/test-results-action@v1
with:
file: ${{ inputs.junit-file }}
flags: ${{ inputs.flags }}
token: ${{ inputs.codecov-token }}
Loading
Loading