Skip to content

build(deps): bump uvicorn from 0.49.0 to 0.52.1 #3125

build(deps): bump uvicorn from 0.49.0 to 0.52.1

build(deps): bump uvicorn from 0.49.0 to 0.52.1 #3125

Workflow file for this run

name: build
on:
- push
- pull_request
permissions:
packages: write
id-token: write
attestations: write
artifact-metadata: write
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install dependencies
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get install -y -qq libicu-dev
pip install -U pip pyicu prek
pip install --group dev -e .
- name: Run pre-commit hooks
run: prek run --all-files --show-diff-on-failure
test-elasticsearch:
runs-on: ubuntu-latest
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:9.4.2
env:
node.name: index
cluster.name: yente-index
discovery.type: single-node
xpack.security.enabled: "false"
xpack.security.http.ssl.enabled: "false"
xpack.security.transport.ssl.enabled: "false"
ports:
- 9200:9200
steps:
- uses: actions/checkout@v7
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install dependencies
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get install -y -qq libicu-dev
pip install -U pip pyicu
pip install --group dev -e .
- name: Run pytest tests
env:
YENTE_INDEX_TYPE: elasticsearch
YENTE_INDEX_URL: http://localhost:9200/
run: |
make test
test-opensearch:
runs-on: ubuntu-latest
services:
opensearch:
image: opensearchproject/opensearch:2.15.0
env:
node.name: index
cluster.name: yente-index
discovery.type: single-node
plugins.security.disabled: true
OPENSEARCH_INITIAL_ADMIN_PASSWORD: YenteIns3cureDefault
ports:
- 9200:9200
steps:
- uses: actions/checkout@v7
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install dependencies
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get install -y -qq libicu-dev
pip install -U pip pyicu
pip install --group dev -e .
- name: Run pytest tests with opensearch backend
env:
YENTE_INDEX_TYPE: opensearch
YENTE_INDEX_URL: http://localhost:9200/
run: |
make test
package-python:
runs-on: ubuntu-latest
needs: [test-elasticsearch, test-opensearch]
steps:
- uses: actions/checkout@v7
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install dependencies
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get install -y -qq libicu-dev
pip install -U pip pyicu
pip install --group dev -e .
- name: Run mypy strict type check
run: |
make typecheck
- name: Build a distribution
run: |
python3 -m build --wheel
- name: Attest wheel build provenance
if: startsWith(github.ref, 'refs/tags/')
uses: actions/attest-build-provenance@v4
with:
subject-path: 'dist/*.whl'
- name: Publish a Python distribution to PyPI
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
uses: pypa/gh-action-pypi-publish@release/v1
with:
skip-existing: true
package-docker:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags') || github.ref == 'refs/heads/develop'
needs: [package-python]
steps:
- uses: actions/checkout@v7
- name: Set up QEMU
uses: docker/setup-qemu-action@v4
with:
platforms: arm64,amd64
- name: Docker meta
id: meta
uses: docker/metadata-action@v6
with:
images: ghcr.io/opensanctions/yente
tags: |
type=ref,event=branch
type=semver,pattern={{version}}
type=sha
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
with:
install: true
- name: Debug information
run: |
docker --version
echo "${GITHUB_REF}"
- name: Login to GitHub Container Registry
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push release
id: push
uses: docker/build-push-action@v7
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
pull: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Install syft
if: startsWith(github.ref, 'refs/tags/')
uses: anchore/sbom-action/download-syft@v0
- name: Generate per-platform SBOMs
if: startsWith(github.ref, 'refs/tags/')
run: |
set -euo pipefail
IMAGE_REF="ghcr.io/opensanctions/yente@${{ steps.push.outputs.digest }}"
mkdir -p sbom
for arch in amd64 arm64; do
echo "::group::Scanning linux/${arch}"
syft "registry:${IMAGE_REF}" \
--platform "linux/${arch}" \
-o "cyclonedx-json=sbom/sbom-linux-${arch}.cdx.json" \
-o "spdx-json=sbom/sbom-linux-${arch}.spdx.json"
echo "::endgroup::"
done
ls -la sbom/
- name: Upload SBOMs as workflow artifacts
if: startsWith(github.ref, 'refs/tags/')
uses: actions/upload-artifact@v7
with:
name: sboms
path: sbom/
if-no-files-found: error
- name: Install cosign
if: startsWith(github.ref, 'refs/tags/')
uses: sigstore/cosign-installer@v4.1.2
- name: Resolve per-platform image digests
if: startsWith(github.ref, 'refs/tags/')
run: |
set -euo pipefail
IMAGE_REF="ghcr.io/opensanctions/yente@${{ steps.push.outputs.digest }}"
docker buildx imagetools inspect "$IMAGE_REF" --raw \
| jq -r '.manifests[]
| select(.platform.os == "linux" and .platform.architecture != "unknown")
| "\(.platform.architecture)=\(.digest)"' \
> platform_digests.env
cat platform_digests.env
- name: Sign image (manifest list and per-platform)
if: startsWith(github.ref, 'refs/tags/')
run: |
cosign sign --yes --recursive \
"ghcr.io/opensanctions/yente@${{ steps.push.outputs.digest }}"
- name: Attach SBOMs as cosign attestations (per platform)
if: startsWith(github.ref, 'refs/tags/')
run: |
set -euo pipefail
while IFS='=' read -r arch digest; do
target="ghcr.io/opensanctions/yente@${digest}"
echo "::group::Attest linux/${arch} (${digest})"
cosign attest --yes --type cyclonedx \
--predicate "sbom/sbom-linux-${arch}.cdx.json" "$target"
cosign attest --yes --type spdxjson \
--predicate "sbom/sbom-linux-${arch}.spdx.json" "$target"
echo "::endgroup::"
done < platform_digests.env
- name: Attach VEX as cosign attestation
if: startsWith(github.ref, 'refs/tags/')
run: |
cosign attest --yes --type openvex \
--predicate security/vex/openvex.json \
"ghcr.io/opensanctions/yente@${{ steps.push.outputs.digest }}"
- name: Attest image build provenance
if: startsWith(github.ref, 'refs/tags/')
uses: actions/attest-build-provenance@v4
with:
subject-name: ghcr.io/opensanctions/yente
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true