Open
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
2 changes: 2 additions & 0 deletions .envrc
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,3 +49,5 @@ fi

export VIRTUAL_ENV="${PWD}/.venv"
PATH_add "${PWD}/.venv/bin"
PATH_add "${PWD}/.devenv/bin"

32 changes: 32 additions & 0 deletions .github/actions/setup-dev/action.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
name: 'Setup Launchpad dev'
description: 'Sets up Python, uv, and dev dependencies'
inputs:
python-version:
description: 'Python version'
required: false
default: '3.12'

runs:
using: 'composite'
steps:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: false
cache-dependency-glob: pyproject.toml

- name: Set up venv
uses: getsentry/action-setup-venv@v2.2.0
with:
python-version: ${{ inputs.python-version }}
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --active

- name: Install dependencies
shell: bash
run: make install-dev-for-ci
64 changes: 10 additions & 54 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,19 +18,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Check lint
run: make check-lint
Expand All@@ -50,19 +39,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -76,7 +54,7 @@ jobs:
-e KAFKA_BOOTSTRAP_SERVERS="localhost:9092" \
-e KAFKA_GROUP_ID="launchpad-test" \
-e KAFKA_TOPICS="preprod-artifact-events" \
launchpad-test python -m pytest -n auto tests/ -v
launchpad-test uv run pytest -n auto tests/ -v

- name: Test CLI installation and basic functionality in Docker
run: |
Expand All@@ -92,19 +70,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -121,7 +88,7 @@ jobs:
-v ${{ github.workspace }}:/workspace \
-w /workspace \
--user $(id -u):$(id -g) \
launchpad-test python -m pytest -n auto tests/unit/ tests/integration/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml
launchpad-test uv run pytest -n auto tests/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
Expand All@@ -144,19 +111,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
30 changes: 4 additions & 26 deletions .github/workflows/image.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,19 +31,8 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand DownExpand Up@@ -108,19 +97,8 @@ jobs:
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
3.13.1
30 changes: 19 additions & 11 deletions Dockerfile
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
# Build libdispatch for the strip binary
FROM --platform=linux/amd64 debian:12-slim AS libdispatch-build

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-amd64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-arm64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
Expand DownExpand Up@@ -33,10 +33,14 @@
ARG TEST_BUILD=false

# Set environment variables
ENV PYTHONUNBUFFERED=1 \
ENV PATH="/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
PIP_DISABLE_PIP_VERSION_CHECK=1 \
UV_PROJECT_ENVIRONMENT=/.venv \
UV_COMPILE_BYTECODE=1 \
UV_NO_CACHE=1

# Create app user and group
RUN groupadd --gid 1000 app && \
Expand DownExpand Up@@ -64,18 +68,24 @@
# Set working directory
WORKDIR /app

# Copy requirements and install Python dependencies
COPY requirements.txt requirements-dev.txt ./
RUN pip install --no-cache-dir -r requirements.txt -r requirements-dev.txt
RUN python3 -m pip install \
--index-url 'https://pypi.devinfra.sentry.io/simple' 'uv==0.8.2'

RUN python3 -m venv "$UV_PROJECT_ENVIRONMENT"

# Copy source code, tests, and scripts
COPY src/ ./src/
COPY tests/ ./tests/
COPY scripts/ ./scripts/
COPY devservices/ ./devservices/
COPY pyproject.toml .
COPY README.md .
COPY LICENSE .
COPY README.md LICENSE pyproject.toml uv.lock ./

RUN : && \
if [ "$TEST_BUILD" = "true" ]; then \
uv sync --frozen; \
else \
uv sync --frozen --no-dev; \
fi

# Copy libdispatch from the build stage
COPY --from=libdispatch-build /usr/lib/x86_64-linux-gnu/libdispatch.so* /usr/lib/x86_64-linux-gnu/
Expand All@@ -96,9 +106,7 @@
rm -rf tests/_fixtures; \
fi

RUN pip install -e .

RUN python scripts/deps --install --local-architecture=x86_64 --local-system=linux
RUN python3 scripts/deps --install --local-architecture=x86_64 --local-system=linux

# Change ownership to app user
RUN chown -R app:app /app
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Open
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
2 changes: 2 additions & 0 deletions .envrc
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,3 +49,5 @@ fi

export VIRTUAL_ENV="${PWD}/.venv"
PATH_add "${PWD}/.venv/bin"
PATH_add "${PWD}/.devenv/bin"

32 changes: 32 additions & 0 deletions .github/actions/setup-dev/action.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
name: 'Setup Launchpad dev'
description: 'Sets up Python, uv, and dev dependencies'
inputs:
python-version:
description: 'Python version'
required: false
default: '3.12'

runs:
using: 'composite'
steps:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: false
cache-dependency-glob: pyproject.toml

- name: Set up venv
uses: getsentry/action-setup-venv@v2.2.0
with:
python-version: ${{ inputs.python-version }}
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --active

- name: Install dependencies
shell: bash
run: make install-dev-for-ci
64 changes: 10 additions & 54 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,19 +18,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Check lint
run: make check-lint
Expand All@@ -50,19 +39,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -76,7 +54,7 @@ jobs:
-e KAFKA_BOOTSTRAP_SERVERS="localhost:9092" \
-e KAFKA_GROUP_ID="launchpad-test" \
-e KAFKA_TOPICS="preprod-artifact-events" \
launchpad-test python -m pytest -n auto tests/ -v
launchpad-test uv run pytest -n auto tests/ -v

- name: Test CLI installation and basic functionality in Docker
run: |
Expand All@@ -92,19 +70,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -121,7 +88,7 @@ jobs:
-v ${{ github.workspace }}:/workspace \
-w /workspace \
--user $(id -u):$(id -g) \
launchpad-test python -m pytest -n auto tests/unit/ tests/integration/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml
launchpad-test uv run pytest -n auto tests/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
Expand All@@ -144,19 +111,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
30 changes: 4 additions & 26 deletions .github/workflows/image.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,19 +31,8 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand DownExpand Up@@ -108,19 +97,8 @@ jobs:
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
3.13.1
30 changes: 19 additions & 11 deletions Dockerfile
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
# Build libdispatch for the strip binary
FROM --platform=linux/amd64 debian:12-slim AS libdispatch-build

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-amd64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-arm64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
Expand DownExpand Up@@ -33,10 +33,14 @@
ARG TEST_BUILD=false

# Set environment variables
ENV PYTHONUNBUFFERED=1 \
ENV PATH="/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
PIP_DISABLE_PIP_VERSION_CHECK=1 \
UV_PROJECT_ENVIRONMENT=/.venv \
UV_COMPILE_BYTECODE=1 \
UV_NO_CACHE=1

# Create app user and group
RUN groupadd --gid 1000 app && \
Expand DownExpand Up@@ -64,18 +68,24 @@
# Set working directory
WORKDIR /app

# Copy requirements and install Python dependencies
COPY requirements.txt requirements-dev.txt ./
RUN pip install --no-cache-dir -r requirements.txt -r requirements-dev.txt
RUN python3 -m pip install \
--index-url 'https://pypi.devinfra.sentry.io/simple' 'uv==0.8.2'

RUN python3 -m venv "$UV_PROJECT_ENVIRONMENT"

# Copy source code, tests, and scripts
COPY src/ ./src/
COPY tests/ ./tests/
COPY scripts/ ./scripts/
COPY devservices/ ./devservices/
COPY pyproject.toml .
COPY README.md .
COPY LICENSE .
COPY README.md LICENSE pyproject.toml uv.lock ./

RUN : && \
if [ "$TEST_BUILD" = "true" ]; then \
uv sync --frozen; \
else \
uv sync --frozen --no-dev; \
fi

# Copy libdispatch from the build stage
COPY --from=libdispatch-build /usr/lib/x86_64-linux-gnu/libdispatch.so* /usr/lib/x86_64-linux-gnu/
Expand All@@ -96,9 +106,7 @@
rm -rf tests/_fixtures; \
fi

RUN pip install -e .

RUN python scripts/deps --install --local-architecture=x86_64 --local-system=linux
RUN python3 scripts/deps --install --local-architecture=x86_64 --local-system=linux

# Change ownership to app user
RUN chown -R app:app /app
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
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
2 changes: 2 additions & 0 deletions .envrc
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,3 +49,5 @@ fi

export VIRTUAL_ENV="${PWD}/.venv"
PATH_add "${PWD}/.venv/bin"
PATH_add "${PWD}/.devenv/bin"

32 changes: 32 additions & 0 deletions .github/actions/setup-dev/action.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
name: 'Setup Launchpad dev'
description: 'Sets up Python, uv, and dev dependencies'
inputs:
python-version:
description: 'Python version'
required: false
default: '3.12'

runs:
using: 'composite'
steps:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: false
cache-dependency-glob: pyproject.toml

- name: Set up venv
uses: getsentry/action-setup-venv@v2.2.0
with:
python-version: ${{ inputs.python-version }}
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --active

- name: Install dependencies
shell: bash
run: make install-dev-for-ci
64 changes: 10 additions & 54 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,19 +18,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Check lint
run: make check-lint
Expand All@@ -50,19 +39,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -76,7 +54,7 @@ jobs:
-e KAFKA_BOOTSTRAP_SERVERS="localhost:9092" \
-e KAFKA_GROUP_ID="launchpad-test" \
-e KAFKA_TOPICS="preprod-artifact-events" \
launchpad-test python -m pytest -n auto tests/ -v
launchpad-test uv run pytest -n auto tests/ -v

- name: Test CLI installation and basic functionality in Docker
run: |
Expand All@@ -92,19 +70,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -121,7 +88,7 @@ jobs:
-v ${{ github.workspace }}:/workspace \
-w /workspace \
--user $(id -u):$(id -g) \
launchpad-test python -m pytest -n auto tests/unit/ tests/integration/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml
launchpad-test uv run pytest -n auto tests/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
Expand All@@ -144,19 +111,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
30 changes: 4 additions & 26 deletions .github/workflows/image.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,19 +31,8 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand DownExpand Up@@ -108,19 +97,8 @@ jobs:
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
3.13.1
30 changes: 19 additions & 11 deletions Dockerfile
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
# Build libdispatch for the strip binary
FROM --platform=linux/amd64 debian:12-slim AS libdispatch-build

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-amd64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-arm64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
Expand DownExpand Up@@ -33,10 +33,14 @@
ARG TEST_BUILD=false

# Set environment variables
ENV PYTHONUNBUFFERED=1 \
ENV PATH="/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
PIP_DISABLE_PIP_VERSION_CHECK=1 \
UV_PROJECT_ENVIRONMENT=/.venv \
UV_COMPILE_BYTECODE=1 \
UV_NO_CACHE=1

# Create app user and group
RUN groupadd --gid 1000 app && \
Expand DownExpand Up@@ -64,18 +68,24 @@
# Set working directory
WORKDIR /app

# Copy requirements and install Python dependencies
COPY requirements.txt requirements-dev.txt ./
RUN pip install --no-cache-dir -r requirements.txt -r requirements-dev.txt
RUN python3 -m pip install \
--index-url 'https://pypi.devinfra.sentry.io/simple' 'uv==0.8.2'

RUN python3 -m venv "$UV_PROJECT_ENVIRONMENT"

# Copy source code, tests, and scripts
COPY src/ ./src/
COPY tests/ ./tests/
COPY scripts/ ./scripts/
COPY devservices/ ./devservices/
COPY pyproject.toml .
COPY README.md .
COPY LICENSE .
COPY README.md LICENSE pyproject.toml uv.lock ./

RUN : && \
if [ "$TEST_BUILD" = "true" ]; then \
uv sync --frozen; \
else \
uv sync --frozen --no-dev; \
fi

# Copy libdispatch from the build stage
COPY --from=libdispatch-build /usr/lib/x86_64-linux-gnu/libdispatch.so* /usr/lib/x86_64-linux-gnu/
Expand All@@ -96,9 +106,7 @@
rm -rf tests/_fixtures; \
fi

RUN pip install -e .

RUN python scripts/deps --install --local-architecture=x86_64 --local-system=linux
RUN python3 scripts/deps --install --local-architecture=x86_64 --local-system=linux

# Change ownership to app user
RUN chown -R app:app /app
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
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
2 changes: 2 additions & 0 deletions .envrc
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,3 +49,5 @@ fi

export VIRTUAL_ENV="${PWD}/.venv"
PATH_add "${PWD}/.venv/bin"
PATH_add "${PWD}/.devenv/bin"

32 changes: 32 additions & 0 deletions .github/actions/setup-dev/action.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
name: 'Setup Launchpad dev'
description: 'Sets up Python, uv, and dev dependencies'
inputs:
python-version:
description: 'Python version'
required: false
default: '3.12'

runs:
using: 'composite'
steps:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: false
cache-dependency-glob: pyproject.toml

- name: Set up venv
uses: getsentry/action-setup-venv@v2.2.0
with:
python-version: ${{ inputs.python-version }}
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --active

- name: Install dependencies
shell: bash
run: make install-dev-for-ci
64 changes: 10 additions & 54 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,19 +18,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Check lint
run: make check-lint
Expand All@@ -50,19 +39,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -76,7 +54,7 @@ jobs:
-e KAFKA_BOOTSTRAP_SERVERS="localhost:9092" \
-e KAFKA_GROUP_ID="launchpad-test" \
-e KAFKA_TOPICS="preprod-artifact-events" \
launchpad-test python -m pytest -n auto tests/ -v
launchpad-test uv run pytest -n auto tests/ -v

- name: Test CLI installation and basic functionality in Docker
run: |
Expand All@@ -92,19 +70,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -121,7 +88,7 @@ jobs:
-v ${{ github.workspace }}:/workspace \
-w /workspace \
--user $(id -u):$(id -g) \
launchpad-test python -m pytest -n auto tests/unit/ tests/integration/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml
launchpad-test uv run pytest -n auto tests/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
Expand All@@ -144,19 +111,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
30 changes: 4 additions & 26 deletions .github/workflows/image.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,19 +31,8 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand DownExpand Up@@ -108,19 +97,8 @@ jobs:
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
3.13.1
30 changes: 19 additions & 11 deletions Dockerfile
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
# Build libdispatch for the strip binary
FROM --platform=linux/amd64 debian:12-slim AS libdispatch-build

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-amd64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-arm64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
Expand DownExpand Up@@ -33,10 +33,14 @@
ARG TEST_BUILD=false

# Set environment variables
ENV PYTHONUNBUFFERED=1 \
ENV PATH="/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
PIP_DISABLE_PIP_VERSION_CHECK=1 \
UV_PROJECT_ENVIRONMENT=/.venv \
UV_COMPILE_BYTECODE=1 \
UV_NO_CACHE=1

# Create app user and group
RUN groupadd --gid 1000 app && \
Expand DownExpand Up@@ -64,18 +68,24 @@
# Set working directory
WORKDIR /app

# Copy requirements and install Python dependencies
COPY requirements.txt requirements-dev.txt ./
RUN pip install --no-cache-dir -r requirements.txt -r requirements-dev.txt
RUN python3 -m pip install \
--index-url 'https://pypi.devinfra.sentry.io/simple' 'uv==0.8.2'

RUN python3 -m venv "$UV_PROJECT_ENVIRONMENT"

# Copy source code, tests, and scripts
COPY src/ ./src/
COPY tests/ ./tests/
COPY scripts/ ./scripts/
COPY devservices/ ./devservices/
COPY pyproject.toml .
COPY README.md .
COPY LICENSE .
COPY README.md LICENSE pyproject.toml uv.lock ./

RUN : && \
if [ "$TEST_BUILD" = "true" ]; then \
uv sync --frozen; \
else \
uv sync --frozen --no-dev; \
fi

# Copy libdispatch from the build stage
COPY --from=libdispatch-build /usr/lib/x86_64-linux-gnu/libdispatch.so* /usr/lib/x86_64-linux-gnu/
Expand All@@ -96,9 +106,7 @@
rm -rf tests/_fixtures; \
fi

RUN pip install -e .

RUN python scripts/deps --install --local-architecture=x86_64 --local-system=linux
RUN python3 scripts/deps --install --local-architecture=x86_64 --local-system=linux

# Change ownership to app user
RUN chown -R app:app /app
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Open
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
2 changes: 2 additions & 0 deletions .envrc
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,3 +49,5 @@ fi

export VIRTUAL_ENV="${PWD}/.venv"
PATH_add "${PWD}/.venv/bin"
PATH_add "${PWD}/.devenv/bin"

32 changes: 32 additions & 0 deletions .github/actions/setup-dev/action.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
name: 'Setup Launchpad dev'
description: 'Sets up Python, uv, and dev dependencies'
inputs:
python-version:
description: 'Python version'
required: false
default: '3.12'

runs:
using: 'composite'
steps:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: false
cache-dependency-glob: pyproject.toml

- name: Set up venv
uses: getsentry/action-setup-venv@v2.2.0
with:
python-version: ${{ inputs.python-version }}
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --active

- name: Install dependencies
shell: bash
run: make install-dev-for-ci
64 changes: 10 additions & 54 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,19 +18,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Check lint
run: make check-lint
Expand All@@ -50,19 +39,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -76,7 +54,7 @@ jobs:
-e KAFKA_BOOTSTRAP_SERVERS="localhost:9092" \
-e KAFKA_GROUP_ID="launchpad-test" \
-e KAFKA_TOPICS="preprod-artifact-events" \
launchpad-test python -m pytest -n auto tests/ -v
launchpad-test uv run pytest -n auto tests/ -v

- name: Test CLI installation and basic functionality in Docker
run: |
Expand All@@ -92,19 +70,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -121,7 +88,7 @@ jobs:
-v ${{ github.workspace }}:/workspace \
-w /workspace \
--user $(id -u):$(id -g) \
launchpad-test python -m pytest -n auto tests/unit/ tests/integration/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml
launchpad-test uv run pytest -n auto tests/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
Expand All@@ -144,19 +111,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
30 changes: 4 additions & 26 deletions .github/workflows/image.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,19 +31,8 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand DownExpand Up@@ -108,19 +97,8 @@ jobs:
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
3.13.1
30 changes: 19 additions & 11 deletions Dockerfile
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
# Build libdispatch for the strip binary
FROM --platform=linux/amd64 debian:12-slim AS libdispatch-build

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-amd64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-arm64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
Expand DownExpand Up@@ -33,10 +33,14 @@
ARG TEST_BUILD=false

# Set environment variables
ENV PYTHONUNBUFFERED=1 \
ENV PATH="/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
PIP_DISABLE_PIP_VERSION_CHECK=1 \
UV_PROJECT_ENVIRONMENT=/.venv \
UV_COMPILE_BYTECODE=1 \
UV_NO_CACHE=1

# Create app user and group
RUN groupadd --gid 1000 app && \
Expand DownExpand Up@@ -64,18 +68,24 @@
# Set working directory
WORKDIR /app

# Copy requirements and install Python dependencies
COPY requirements.txt requirements-dev.txt ./
RUN pip install --no-cache-dir -r requirements.txt -r requirements-dev.txt
RUN python3 -m pip install \
--index-url 'https://pypi.devinfra.sentry.io/simple' 'uv==0.8.2'

RUN python3 -m venv "$UV_PROJECT_ENVIRONMENT"

# Copy source code, tests, and scripts
COPY src/ ./src/
COPY tests/ ./tests/
COPY scripts/ ./scripts/
COPY devservices/ ./devservices/
COPY pyproject.toml .
COPY README.md .
COPY LICENSE .
COPY README.md LICENSE pyproject.toml uv.lock ./

RUN : && \
if [ "$TEST_BUILD" = "true" ]; then \
uv sync --frozen; \
else \
uv sync --frozen --no-dev; \
fi

# Copy libdispatch from the build stage
COPY --from=libdispatch-build /usr/lib/x86_64-linux-gnu/libdispatch.so* /usr/lib/x86_64-linux-gnu/
Expand All@@ -96,9 +106,7 @@
rm -rf tests/_fixtures; \
fi

RUN pip install -e .

RUN python scripts/deps --install --local-architecture=x86_64 --local-system=linux
RUN python3 scripts/deps --install --local-architecture=x86_64 --local-system=linux

# Change ownership to app user
RUN chown -R app:app /app
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
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
2 changes: 2 additions & 0 deletions .envrc
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,3 +49,5 @@ fi

export VIRTUAL_ENV="${PWD}/.venv"
PATH_add "${PWD}/.venv/bin"
PATH_add "${PWD}/.devenv/bin"

32 changes: 32 additions & 0 deletions .github/actions/setup-dev/action.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
name: 'Setup Launchpad dev'
description: 'Sets up Python, uv, and dev dependencies'
inputs:
python-version:
description: 'Python version'
required: false
default: '3.12'

runs:
using: 'composite'
steps:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: false
cache-dependency-glob: pyproject.toml

- name: Set up venv
uses: getsentry/action-setup-venv@v2.2.0
with:
python-version: ${{ inputs.python-version }}
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --active

- name: Install dependencies
shell: bash
run: make install-dev-for-ci
64 changes: 10 additions & 54 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,19 +18,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Check lint
run: make check-lint
Expand All@@ -50,19 +39,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -76,7 +54,7 @@ jobs:
-e KAFKA_BOOTSTRAP_SERVERS="localhost:9092" \
-e KAFKA_GROUP_ID="launchpad-test" \
-e KAFKA_TOPICS="preprod-artifact-events" \
launchpad-test python -m pytest -n auto tests/ -v
launchpad-test uv run pytest -n auto tests/ -v

- name: Test CLI installation and basic functionality in Docker
run: |
Expand All@@ -92,19 +70,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -121,7 +88,7 @@ jobs:
-v ${{ github.workspace }}:/workspace \
-w /workspace \
--user $(id -u):$(id -g) \
launchpad-test python -m pytest -n auto tests/unit/ tests/integration/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml
launchpad-test uv run pytest -n auto tests/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
Expand All@@ -144,19 +111,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
30 changes: 4 additions & 26 deletions .github/workflows/image.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,19 +31,8 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand DownExpand Up@@ -108,19 +97,8 @@ jobs:
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
3.13.1
30 changes: 19 additions & 11 deletions Dockerfile
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
# Build libdispatch for the strip binary
FROM --platform=linux/amd64 debian:12-slim AS libdispatch-build

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-amd64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-arm64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
Expand DownExpand Up@@ -33,10 +33,14 @@
ARG TEST_BUILD=false

# Set environment variables
ENV PYTHONUNBUFFERED=1 \
ENV PATH="/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
PIP_DISABLE_PIP_VERSION_CHECK=1 \
UV_PROJECT_ENVIRONMENT=/.venv \
UV_COMPILE_BYTECODE=1 \
UV_NO_CACHE=1

# Create app user and group
RUN groupadd --gid 1000 app && \
Expand DownExpand Up@@ -64,18 +68,24 @@
# Set working directory
WORKDIR /app

# Copy requirements and install Python dependencies
COPY requirements.txt requirements-dev.txt ./
RUN pip install --no-cache-dir -r requirements.txt -r requirements-dev.txt
RUN python3 -m pip install \
--index-url 'https://pypi.devinfra.sentry.io/simple' 'uv==0.8.2'

RUN python3 -m venv "$UV_PROJECT_ENVIRONMENT"

# Copy source code, tests, and scripts
COPY src/ ./src/
COPY tests/ ./tests/
COPY scripts/ ./scripts/
COPY devservices/ ./devservices/
COPY pyproject.toml .
COPY README.md .
COPY LICENSE .
COPY README.md LICENSE pyproject.toml uv.lock ./

RUN : && \
if [ "$TEST_BUILD" = "true" ]; then \
uv sync --frozen; \
else \
uv sync --frozen --no-dev; \
fi

# Copy libdispatch from the build stage
COPY --from=libdispatch-build /usr/lib/x86_64-linux-gnu/libdispatch.so* /usr/lib/x86_64-linux-gnu/
Expand All@@ -96,9 +106,7 @@
rm -rf tests/_fixtures; \
fi

RUN pip install -e .

RUN python scripts/deps --install --local-architecture=x86_64 --local-system=linux
RUN python3 scripts/deps --install --local-architecture=x86_64 --local-system=linux

# Change ownership to app user
RUN chown -R app:app /app
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
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
2 changes: 2 additions & 0 deletions .envrc
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,3 +49,5 @@ fi

export VIRTUAL_ENV="${PWD}/.venv"
PATH_add "${PWD}/.venv/bin"
PATH_add "${PWD}/.devenv/bin"

32 changes: 32 additions & 0 deletions .github/actions/setup-dev/action.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
name: 'Setup Launchpad dev'
description: 'Sets up Python, uv, and dev dependencies'
inputs:
python-version:
description: 'Python version'
required: false
default: '3.12'

runs:
using: 'composite'
steps:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: false
cache-dependency-glob: pyproject.toml

- name: Set up venv
uses: getsentry/action-setup-venv@v2.2.0
with:
python-version: ${{ inputs.python-version }}
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --active

- name: Install dependencies
shell: bash
run: make install-dev-for-ci
64 changes: 10 additions & 54 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,19 +18,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Check lint
run: make check-lint
Expand All@@ -50,19 +39,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -76,7 +54,7 @@ jobs:
-e KAFKA_BOOTSTRAP_SERVERS="localhost:9092" \
-e KAFKA_GROUP_ID="launchpad-test" \
-e KAFKA_TOPICS="preprod-artifact-events" \
launchpad-test python -m pytest -n auto tests/ -v
launchpad-test uv run pytest -n auto tests/ -v

- name: Test CLI installation and basic functionality in Docker
run: |
Expand All@@ -92,19 +70,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -121,7 +88,7 @@ jobs:
-v ${{ github.workspace }}:/workspace \
-w /workspace \
--user $(id -u):$(id -g) \
launchpad-test python -m pytest -n auto tests/unit/ tests/integration/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml
launchpad-test uv run pytest -n auto tests/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
Expand All@@ -144,19 +111,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
30 changes: 4 additions & 26 deletions .github/workflows/image.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,19 +31,8 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand DownExpand Up@@ -108,19 +97,8 @@ jobs:
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
3.13.1
30 changes: 19 additions & 11 deletions Dockerfile
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
# Build libdispatch for the strip binary
FROM --platform=linux/amd64 debian:12-slim AS libdispatch-build

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-amd64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-arm64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
Expand DownExpand Up@@ -33,10 +33,14 @@
ARG TEST_BUILD=false

# Set environment variables
ENV PYTHONUNBUFFERED=1 \
ENV PATH="/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
PIP_DISABLE_PIP_VERSION_CHECK=1 \
UV_PROJECT_ENVIRONMENT=/.venv \
UV_COMPILE_BYTECODE=1 \
UV_NO_CACHE=1

# Create app user and group
RUN groupadd --gid 1000 app && \
Expand DownExpand Up@@ -64,18 +68,24 @@
# Set working directory
WORKDIR /app

# Copy requirements and install Python dependencies
COPY requirements.txt requirements-dev.txt ./
RUN pip install --no-cache-dir -r requirements.txt -r requirements-dev.txt
RUN python3 -m pip install \
--index-url 'https://pypi.devinfra.sentry.io/simple' 'uv==0.8.2'

RUN python3 -m venv "$UV_PROJECT_ENVIRONMENT"

# Copy source code, tests, and scripts
COPY src/ ./src/
COPY tests/ ./tests/
COPY scripts/ ./scripts/
COPY devservices/ ./devservices/
COPY pyproject.toml .
COPY README.md .
COPY LICENSE .
COPY README.md LICENSE pyproject.toml uv.lock ./

RUN : && \
if [ "$TEST_BUILD" = "true" ]; then \
uv sync --frozen; \
else \
uv sync --frozen --no-dev; \
fi

# Copy libdispatch from the build stage
COPY --from=libdispatch-build /usr/lib/x86_64-linux-gnu/libdispatch.so* /usr/lib/x86_64-linux-gnu/
Expand All@@ -96,9 +106,7 @@
rm -rf tests/_fixtures; \
fi

RUN pip install -e .

RUN python scripts/deps --install --local-architecture=x86_64 --local-system=linux
RUN python3 scripts/deps --install --local-architecture=x86_64 --local-system=linux

# Change ownership to app user
RUN chown -R app:app /app
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Open
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
2 changes: 2 additions & 0 deletions .envrc
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,3 +49,5 @@ fi

export VIRTUAL_ENV="${PWD}/.venv"
PATH_add "${PWD}/.venv/bin"
PATH_add "${PWD}/.devenv/bin"

32 changes: 32 additions & 0 deletions .github/actions/setup-dev/action.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
name: 'Setup Launchpad dev'
description: 'Sets up Python, uv, and dev dependencies'
inputs:
python-version:
description: 'Python version'
required: false
default: '3.12'

runs:
using: 'composite'
steps:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: false
cache-dependency-glob: pyproject.toml

- name: Set up venv
uses: getsentry/action-setup-venv@v2.2.0
with:
python-version: ${{ inputs.python-version }}
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --active

- name: Install dependencies
shell: bash
run: make install-dev-for-ci
64 changes: 10 additions & 54 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,19 +18,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Check lint
run: make check-lint
Expand All@@ -50,19 +39,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -76,7 +54,7 @@ jobs:
-e KAFKA_BOOTSTRAP_SERVERS="localhost:9092" \
-e KAFKA_GROUP_ID="launchpad-test" \
-e KAFKA_TOPICS="preprod-artifact-events" \
launchpad-test python -m pytest -n auto tests/ -v
launchpad-test uv run pytest -n auto tests/ -v

- name: Test CLI installation and basic functionality in Docker
run: |
Expand All@@ -92,19 +70,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build Docker image with test fixtures
run: docker build --build-arg TEST_BUILD=true -t launchpad-test .
Expand All@@ -121,7 +88,7 @@ jobs:
-v ${{ github.workspace }}:/workspace \
-w /workspace \
--user $(id -u):$(id -g) \
launchpad-test python -m pytest -n auto tests/unit/ tests/integration/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml
launchpad-test uv run pytest -n auto tests/ -v --cov --cov-branch --cov-report=xml --junitxml=junit.xml

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
Expand All@@ -144,19 +111,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
30 changes: 4 additions & 26 deletions .github/workflows/image.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,19 +31,8 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand DownExpand Up@@ -108,19 +97,8 @@ jobs:
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: pyproject.toml

- name: Install dependencies
run: make install-dev
- name: Setup launchpad dev
uses: ./.github/actions/setup-dev

- name: Build package
run: make build
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
3.13.1
30 changes: 19 additions & 11 deletions Dockerfile
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
# Build libdispatch for the strip binary
FROM --platform=linux/amd64 debian:12-slim AS libdispatch-build

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-amd64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions/ build-pr-arm64

FROM --platform flag should not use a constant value

FromPlatformFlagConstDisallowed: FROM --platform flag should not use constant value "linux/amd64" More info: https://docs.docker.com/go/dockerfile/rule/from-platform-flag-const-disallowed/

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
Expand DownExpand Up@@ -33,10 +33,14 @@
ARG TEST_BUILD=false

# Set environment variables
ENV PYTHONUNBUFFERED=1 \
ENV PATH="/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
PIP_DISABLE_PIP_VERSION_CHECK=1 \
UV_PROJECT_ENVIRONMENT=/.venv \
UV_COMPILE_BYTECODE=1 \
UV_NO_CACHE=1

# Create app user and group
RUN groupadd --gid 1000 app && \
Expand DownExpand Up@@ -64,18 +68,24 @@
# Set working directory
WORKDIR /app

# Copy requirements and install Python dependencies
COPY requirements.txt requirements-dev.txt ./
RUN pip install --no-cache-dir -r requirements.txt -r requirements-dev.txt
RUN python3 -m pip install \
--index-url 'https://pypi.devinfra.sentry.io/simple' 'uv==0.8.2'

RUN python3 -m venv "$UV_PROJECT_ENVIRONMENT"

# Copy source code, tests, and scripts
COPY src/ ./src/
COPY tests/ ./tests/
COPY scripts/ ./scripts/
COPY devservices/ ./devservices/
COPY pyproject.toml .
COPY README.md .
COPY LICENSE .
COPY README.md LICENSE pyproject.toml uv.lock ./

RUN : && \
if [ "$TEST_BUILD" = "true" ]; then \
uv sync --frozen; \
else \
uv sync --frozen --no-dev; \
fi

# Copy libdispatch from the build stage
COPY --from=libdispatch-build /usr/lib/x86_64-linux-gnu/libdispatch.so* /usr/lib/x86_64-linux-gnu/
Expand All@@ -96,9 +106,7 @@
rm -rf tests/_fixtures; \
fi

RUN pip install -e .

RUN python scripts/deps --install --local-architecture=x86_64 --local-system=linux
RUN python3 scripts/deps --install --local-architecture=x86_64 --local-system=linux

# Change ownership to app user
RUN chown -R app:app /app
Expand Down
Loading
Loading