Skip to content

feat: add scval executable tag helpers and a SEP-45 credential opt-out #4636

feat: add scval executable tag helpers and a SEP-45 credential opt-out

feat: add scval executable tag helpers and a SEP-45 credential opt-out #4636

name: Test and Deploy
on:
push:
pull_request:
release:
types:
- created
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
DEFAULT_PYTHON_VERSION: "3.14"
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6.0.2
- name: Install uv and Python ${{ env.DEFAULT_PYTHON_VERSION }}
uses: astral-sh/setup-uv@v8.1.0
with:
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
- name: Run pre-commit
run: make pre-commit
type-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6.0.2
- name: Install uv and Python ${{ env.DEFAULT_PYTHON_VERSION }}
uses: astral-sh/setup-uv@v8.1.0
with:
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
- name: Run type check
run: make type-check
test:
strategy:
fail-fast: false
matrix:
# https://endoflife.date/python
platform:
[
{ os: "ubuntu-latest", python-version: "3.10" },
{ os: "ubuntu-latest", python-version: "3.11" },
{ os: "ubuntu-latest", python-version: "3.12" },
{ os: "ubuntu-latest", python-version: "3.13" },
{ os: "ubuntu-latest", python-version: "3.14" },
{ os: "ubuntu-latest", python-version: "pypy3.11" },
{ os: "macos-latest", python-version: "3.10" },
{ os: "macos-latest", python-version: "3.11" },
{ os: "macos-latest", python-version: "3.12" },
{ os: "macos-latest", python-version: "3.13" },
{ os: "macos-latest", python-version: "3.14" },
{ os: "macos-latest", python-version: "pypy3.11" },
{ os: "windows-latest", python-version: "3.10" },
{ os: "windows-latest", python-version: "3.11" },
{ os: "windows-latest", python-version: "3.12" },
{ os: "windows-latest", python-version: "3.13" },
{ os: "windows-latest", python-version: "3.14" },
]
runs-on: ${{ matrix.platform.os }}
steps:
- uses: actions/checkout@v6.0.2
- name: Install uv and Python ${{ matrix.platform.python-version }} on ${{ matrix.platform.os }}
uses: astral-sh/setup-uv@v8.1.0
with:
python-version: ${{ matrix.platform.python-version }}
- name: Run unit tests
run: make unit-test
integration:
runs-on: ubuntu-latest
services:
rpc:
image: stellar/quickstart:latest
ports:
- 8000:8000
env:
ENABLE_LOGS: true
NETWORK: local
ENABLE_SOROBAN_RPC: true
PROTOCOL_VERSION: 28
options: >-
--health-cmd "curl --no-progress-meter --fail-with-body -X POST \"http://localhost:8000/rpc\" -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":8675309,\"method\":\"getNetwork\"}' && curl --no-progress-meter \"http://localhost:8000/friendbot\" | grep '\"invalid_field\": \"addr\"'"
--health-interval 10s
--health-timeout 5s
--health-retries 50
steps:
- uses: actions/checkout@v6.0.2
- name: Install uv and Python ${{ env.DEFAULT_PYTHON_VERSION }}
uses: astral-sh/setup-uv@v8.1.0
with:
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
- name: Run integration tests
run: make integration-test
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v6.0.1
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage.xml
flags: unittests
name: codecov-umbrella
deploy:
needs: [lint, type-check, test, integration]
runs-on: ubuntu-latest
if: github.event_name == 'release' && github.event.action == 'created'
permissions:
id-token: write
steps:
- uses: actions/checkout@v6.0.2
- name: Install uv and Python ${{ env.DEFAULT_PYTHON_VERSION }}
uses: astral-sh/setup-uv@v8.1.0
with:
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
- name: Build packages
run: make package
- name: Publish package distributions to PyPI
run: uv publish --trusted-publishing automatic
complete:
if: always()
needs: [lint, type-check, test, integration, deploy]
runs-on: ubuntu-latest
steps:
- if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
run: exit 1