Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
192e829
basic formatting and project git hooks, we'll pick this up after we'r…
toqduj Mar 28, 2026
d3243ac
adapting to the new API of McSAS3 with ProcessingData
toqduj Mar 29, 2026
f598571
adjust gitignore
toqduj Mar 29, 2026
f6f954b
adjusted ignores and added missing info
toqduj Mar 29, 2026
1fc1bba
implement stop functionality
toqduj Mar 29, 2026
cdd39cf
stop button on test run too.
toqduj Mar 29, 2026
82c2c20
adjusting the test configuration
toqduj Mar 29, 2026
95dd184
initial cleanup pass on McSAS3GUI
toqduj Mar 30, 2026
de4dda8
cleanup pass and tests
toqduj Mar 30, 2026
a7ff42f
continuing cleanup
toqduj Mar 30, 2026
2051dfb
another cleanup sweep
toqduj Mar 30, 2026
f63560e
more cleanup
toqduj Mar 30, 2026
b36da89
next cleanup step
toqduj Mar 30, 2026
3f48b72
more cleanup
toqduj Mar 30, 2026
7058012
more cleanip, moving on to docs next
toqduj Mar 30, 2026
26c1d4e
typing/docstrings added
toqduj Mar 30, 2026
fc0d7d0
documentation generation
toqduj Mar 30, 2026
524db9f
bugfix
toqduj Mar 30, 2026
6bf68db
aux windows close when main closes
toqduj Mar 30, 2026
2a3b138
compiled McSAS3GUI
toqduj Mar 31, 2026
f3c1729
bugfix
toqduj Mar 31, 2026
5d52e4b
bugfixes in compiled build
toqduj Mar 31, 2026
25065ea
fixing small documentation issue
toqduj Mar 31, 2026
9fad697
addressing small usability issues.
toqduj Mar 31, 2026
7fb84b8
enh: build standalone versions for three plarforms
toqduj Mar 31, 2026
0ec6b15
fix: adjusting CI so we can run with the in_depth_upgrades branch of …
toqduj Mar 31, 2026
9baed9c
fix to imports, shifting python to match modacor reqs.
toqduj Apr 1, 2026
d05776c
chore: fix tests and dependencies
toqduj Apr 1, 2026
e3f52e5
chore: fixing tests again..
toqduj Apr 1, 2026
e50848b
yet another test fix.
toqduj Apr 1, 2026
c14d483
fix build paths
toqduj Apr 1, 2026
c7a4043
setting up for code signing for mac os x in CI
toqduj Apr 22, 2026
d31867a
fix for seed issue
toqduj Apr 22, 2026
88d28cb
patching workflows
toqduj Apr 24, 2026
b9b9942
ci: fix macOS codesign ordering in standalone release workflow
toqduj Apr 24, 2026
3819d88
ci: skip direct file signing inside macOS bundles
toqduj Apr 25, 2026
63a0cf9
ci: handle non-canonical macOS framework signing in release workflow
toqduj Apr 25, 2026
b144e01
ci: de-duplicate macOS codesign by realpath and reduce log noise
toqduj Apr 25, 2026
5c219d2
ci: de-duplicate macOS codesign by realpath and reduce log noise
toqduj Apr 25, 2026
29d6955
ci: de-duplicate macOS codesign by realpath and reduce log noise
toqduj Apr 25, 2026
f9e0193
ci: de-duplicate macOS codesign by realpath and reduce log noise
toqduj Apr 25, 2026
9adc2fe
ci: de-duplicate macOS codesign by realpath and reduce log noise
toqduj Apr 25, 2026
62c34e8
trying a different approach
toqduj Apr 25, 2026
fbc0ba6
added notarization
toqduj Apr 25, 2026
f623285
Fixes to binary build scripts
toqduj May 4, 2026
4005ccd
fix: updates for notarization
toqduj May 4, 2026
9685a5d
doc: Updated build release documentation
toqduj May 5, 2026
045e9ad
fix: improved dependencies for the current RHEL-based linuxes. May ne…
toqduj May 16, 2026
5e253e7
Merge remote-tracking branch 'origin/main' into in_depth_upgrades
toqduj May 16, 2026
04b2ec3
fix: ruff fix
toqduj May 16, 2026
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
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ jobs:
steps:

- name: Checking out the repo
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
ref: main

- name: Setting up Python 3.12
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: '3.12'
cache: pip
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ jobs:
uses: ./.github/workflows/build.yml
secrets: inherit

standalone:
needs: [tests]
uses: ./.github/workflows/standalone.yml

docs:
needs: [release] # get (release) version number first
uses: ./.github/workflows/docs.yml
Expand All @@ -42,7 +46,7 @@ jobs:
steps:

- name: Checking out the repo
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
ref: main

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ jobs:
steps:

- name: Checking out the repo
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
ref: main

- name: Setting up Python 3.12
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: '3.12'
cache: pip
Expand Down Expand Up @@ -92,7 +92,7 @@ jobs:

- name: Checkout documentation pages branch
if: ${{ github.ref == 'refs/heads/main' }}
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
ref: gh-pages
path: pages
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ jobs:
steps:

- name: Checking out the repo
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0
ref: main

- name: Setting up Python 3.12
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: '3.12'
cache: pip
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:

# depth=0 is needed for semantic-release
- name: Checking out the repo
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0
ref: main
Expand All @@ -26,7 +26,7 @@ jobs:
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"

- name: Setting up Python 3.12
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: '3.12'
cache: pip
Expand Down
131 changes: 110 additions & 21 deletions .github/workflows/standalone-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ jobs:

steps:
- name: Checking out the GUI repo
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0
ref: ${{ github.event.release.tag_name || github.event.inputs.tag }}

- name: Check out McSAS3
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
repository: ${{ github.repository_owner }}/McSAS3
path: McSAS3
Expand All @@ -48,7 +48,8 @@ jobs:
echo "McSAS3 ref: ${{ github.event.inputs.mcsas3_ref || 'main' }}"

- name: Setting up Python 3.12
uses: actions/setup-python@v5
if: runner.os != 'Linux'
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: pip
Expand All @@ -58,6 +59,7 @@ jobs:
tox.ini

- name: Install required system packages
if: runner.os != 'Linux'
shell: bash
run: |
set -euxo pipefail
Expand All @@ -74,13 +76,41 @@ jobs:
fi

- name: Install dependencies
if: runner.os != 'Linux'
shell: bash
run: |
set -euxo pipefail
python -m pip install --upgrade pip
python -m pip install --progress-bar=off -r ci/requirements.txt

- name: Build Linux standalone GUI bundle on GLIBC 2.28
if: runner.os == 'Linux'
shell: bash
run: |
set -euxo pipefail
docker run --rm \
-e MCSAS3GUI_MCSAS3_SRC=/work/McSAS3/src \
-e MCSAS3GUI_STANDALONE_MAX_GLIBC=2.28 \
-e TOXPYTHON=/opt/python/cp312-cp312/bin/python \
-v "$GITHUB_WORKSPACE:/work" \
-w /work \
quay.io/pypa/manylinux_2_28_x86_64 \
/bin/bash -lc '
set -euxo pipefail
package_manager=dnf
if ! command -v dnf >/dev/null 2>&1; then
package_manager=yum
fi
"${package_manager}" -y install dnf-plugins-core || true
dnf config-manager --set-enabled powertools || true
"${package_manager}" -y install $(grep -vE "^[[:space:]]*(#|$)" ci/requirements_manylinux_2_28.txt)
/opt/python/cp312-cp312/bin/python -m pip install --upgrade pip
/opt/python/cp312-cp312/bin/python -m pip install --progress-bar=off -r ci/requirements.txt
/opt/python/cp312-cp312/bin/python -m tox -e standalone -v
'

- name: Build standalone GUI bundle
if: runner.os != 'Linux'
shell: bash
env:
MCSAS3GUI_MCSAS3_SRC: ${{ github.workspace }}/McSAS3/src
Expand Down Expand Up @@ -128,8 +158,11 @@ jobs:
shell: bash
env:
MACOS_CODESIGN_IDENTITY: ${{ secrets.MACOS_CODESIGN_IDENTITY }}
MACOS_NOTARY_KEY_ID: ${{ secrets.MACOS_NOTARY_KEY_ID }}
MACOS_NOTARY_ISSUER_ID: ${{ secrets.MACOS_NOTARY_ISSUER_ID }}
MACOS_NOTARY_API_KEY: ${{ secrets.MACOS_NOTARY_API_KEY }}
run: |
set -euxo pipefail
set -euo pipefail
if [[ -z "${MACOS_CODESIGN_IDENTITY:-}" ]]; then
echo "Missing required secret: MACOS_CODESIGN_IDENTITY" >&2
exit 1
Expand All @@ -143,8 +176,12 @@ jobs:
PY
)"
BUNDLE_ROOT="dist/standalone/${PLATFORM_TAG}"
BUILD_INFO="${BUNDLE_ROOT}/build_info.json"
test -f "$BUILD_INFO"
test -f "${BUNDLE_ROOT}/build_info.json"

python tools/sign_macos_bundle.py \
--bundle-root "$BUNDLE_ROOT" \
--identity "$MACOS_CODESIGN_IDENTITY" \
--keychain "$MACOS_SIGNING_KEYCHAIN"

APP_PATH="$(BUNDLE_ROOT="$BUNDLE_ROOT" python - <<'PY'
import json
Expand All @@ -156,25 +193,77 @@ jobs:
print(bundle_root / payload["gui_bundle"])
PY
)"
test -d "$APP_PATH"

HELPER_PATH="$(BUNDLE_ROOT="$BUNDLE_ROOT" python - <<'PY'
import json
import os
from pathlib import Path
# For published releases, notarization is mandatory.
REQUIRE_NOTARIZATION="false"
if [[ "${GITHUB_EVENT_NAME}" == "release" ]]; then
REQUIRE_NOTARIZATION="true"
fi

bundle_root = Path(os.environ["BUNDLE_ROOT"])
payload = json.loads((bundle_root / "build_info.json").read_text(encoding="utf-8"))
print(bundle_root / payload["bundled_histogrammer"])
PY
)"
HAVE_NOTARY_CREDS="true"
for var in MACOS_NOTARY_KEY_ID MACOS_NOTARY_ISSUER_ID MACOS_NOTARY_API_KEY; do
if [[ -z "${!var:-}" ]]; then
HAVE_NOTARY_CREDS="false"
fi
done

test -d "$APP_PATH"
test -f "$HELPER_PATH"
if [[ "$REQUIRE_NOTARIZATION" == "true" && "$HAVE_NOTARY_CREDS" != "true" ]]; then
echo "Missing required notarization secrets for release build." >&2
echo "Expected: MACOS_NOTARY_KEY_ID, MACOS_NOTARY_ISSUER_ID, MACOS_NOTARY_API_KEY" >&2
exit 1
fi

if [[ "$HAVE_NOTARY_CREDS" == "true" ]]; then
NOTARY_KEY_PATH="$RUNNER_TEMP/AuthKey_${MACOS_NOTARY_KEY_ID}.p8"
printf '%s' "$MACOS_NOTARY_API_KEY" > "$NOTARY_KEY_PATH"
chmod 600 "$NOTARY_KEY_PATH"

NOTARY_ARCHIVE_PATH="$RUNNER_TEMP/mcsas3gui-notarize-${PLATFORM_TAG}.zip"
rm -f "$NOTARY_ARCHIVE_PATH"
ditto -c -k --sequesterRsrc --keepParent "$BUNDLE_ROOT" "$NOTARY_ARCHIVE_PATH"

echo "Submitting app for notarization..."
NOTARY_RESULT="$(xcrun notarytool submit "$NOTARY_ARCHIVE_PATH" \
--key "$NOTARY_KEY_PATH" \
--key-id "$MACOS_NOTARY_KEY_ID" \
--issuer "$MACOS_NOTARY_ISSUER_ID" \
--wait 2>&1)" || {
echo "Notarization failed:" >&2
echo "$NOTARY_RESULT" >&2
exit 1
}
echo "$NOTARY_RESULT"

# Verify notarization succeeded before stapling
if ! echo "$NOTARY_RESULT" | grep -q "status: Accepted"; then
echo "Notarization was not accepted:" >&2
echo "$NOTARY_RESULT" >&2
exit 1
fi

codesign --force --keychain "$MACOS_SIGNING_KEYCHAIN" --options runtime --timestamp --sign "$MACOS_CODESIGN_IDENTITY" "$HELPER_PATH"
codesign --force --keychain "$MACOS_SIGNING_KEYCHAIN" --deep --options runtime --timestamp --sign "$MACOS_CODESIGN_IDENTITY" "$APP_PATH"
codesign --verify --deep --strict --verbose=2 "$APP_PATH"
codesign --display --verbose=4 "$APP_PATH"
echo "Stapling notarization ticket to app bundle..."
xcrun stapler staple "$APP_PATH" || {
echo "Stapling failed - app may not be notarized" >&2
exit 1
}

echo "Validating stapled notarization..."
xcrun stapler validate "$APP_PATH" || {
echo "Stapled notarization validation failed" >&2
exit 1
}

echo "Running final security check..."
spctl -a -vvv --type exec "$APP_PATH" || {
echo "Security policy check failed - app may not be properly notarized" >&2
exit 1
}
echo "✓ App bundle is properly notarized and passes security validation"
else
echo "Notarization credentials not set; skipping notarization for manual run."
echo "Note: Release builds will fail without notarization."
fi

ARCHIVE_PATH="dist/standalone/mcsas3gui-standalone-${PLATFORM_TAG}.zip"
rm -f "$ARCHIVE_PATH"
Expand Down
Loading
Loading