Skip to content

feat: dual-client Social Scientist platform for Claude Code and Codex #117

feat: dual-client Social Scientist platform for Claude Code and Codex

feat: dual-client Social Scientist platform for Claude Code and Codex #117

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
lint-markdown:
name: Markdown lint
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 1
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: "20"
cache: npm
- name: Install dependencies
run: npm ci
- name: Run markdownlint-cli2
run: npm run lint
python-quality:
name: Python ${{ matrix.python-version }}
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: read
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 1
persist-credentials: false
- name: Setup Python
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: ${{ matrix.python-version }}
cache: pip
- name: Install package and quality tools
run: |
python -m pip install --upgrade pip
python -m pip install -e . pytest ruff mypy build
- name: Run tests
run: python -m pytest tests/ -v
- name: Run Ruff
run: ruff check .
- name: Run strict mypy
run: mypy --strict src tests
- name: Build package
if: matrix.python-version == '3.12'
run: python -m build
- name: Inspect wheel contents
if: matrix.python-version == '3.12'
shell: bash
run: |
set -euo pipefail
python - <<'PY'
import glob
import zipfile
wheels = glob.glob("dist/*.whl")
assert len(wheels) == 1, wheels
with zipfile.ZipFile(wheels[0]) as archive:
names = archive.namelist()
assert any(name.endswith("social_cc_plugin/skills/apa-doi-verifier/SKILL.md") for name in names)
assert any(name.endswith("LICENSE.code") for name in names)
assert any(name.endswith("LICENSE.content") for name in names)
print(f"wheel contains {len(names)} entries")
PY
- name: Isolated wheel smoke test
if: matrix.python-version == '3.12'
shell: bash
run: |
set -euo pipefail
python -m venv /tmp/social-cc-venv
/tmp/social-cc-venv/bin/python -m pip install dist/*.whl
/tmp/social-cc-venv/bin/social-cc --version
/tmp/social-cc-venv/bin/social-cc list
HOME="$(mktemp -d)" /tmp/social-cc-venv/bin/social-cc doctor --client all
repo-integrity:
name: Repository integrity validation
runs-on: ubuntu-latest
timeout-minutes: 8
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 1
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: "20"
cache: npm
- name: Install dependencies
run: npm ci
- name: Validate repository metadata
run: npm run validate
- name: Validate release truth
run: npm run validate:truth
- name: Validate generated agent adapters
run: npm run check:agents
- name: Validate GitHub Actions pins
run: npm run check:actions
- name: Validate bilingual routing and agent scenarios
run: npm run check:evaluation