The previous layout was a fixed 460x360 window regardless of tab or state, with a plain unbordered table and text +/- buttons — it read as a generic cross-platform port rather than something native. Several rows also had no real width anchor at all, so they floated: flush against the window's left edge with no margin, and in the add form's case wide enough to overflow past the right edge. - The window is no longer manually resizable. Each tab reports its own preferredContentSize, recomputed in viewDidLayout and after every state change, and NSTabViewController resizes the window to match. That is what actually fixes the large empty areas: a tab with less content gets a smaller window rather than sitting inside a fixed larger one. - Every row now anchors its width to the one element with a real absolute width, fixing both the edge-touching and the overflow. - Table gains a bezel border and alternating rows; form labels get a fixed trailing-aligned width so fields line up; the error label wraps instead of truncating; tab padding is consistent. - About moves out of a separate panel into a third tab, with the app icon centred and enlarged to 96px. Verified visually with a standalone harness that drives the real window and screenshots it, rather than simulating input — scripting clicks into the app itself needs an Accessibility grant this environment lacks.
48 lines
1.4 KiB
YAML
48 lines
1.4 KiB
YAML
name: Release
|
|
|
|
# Two ways in: a manually pushed version tag, or a direct call from
|
|
# tag-on-version-bump.yml (which fires on VERSION changes on main). The
|
|
# workflow_call path exists because pushes made with the default
|
|
# GITHUB_TOKEN don't trigger other workflows' `on.push` — a tag pushed by
|
|
# that workflow wouldn't reach this one's `tags:` trigger on its own.
|
|
on:
|
|
push:
|
|
tags:
|
|
- "*"
|
|
workflow_call:
|
|
inputs:
|
|
tag:
|
|
required: true
|
|
type: string
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ inputs.tag || github.ref }}
|
|
|
|
- name: Build shannoncoat.app
|
|
run: ./build.sh
|
|
env:
|
|
# This workflow only ever runs against a tag (see the trigger
|
|
# comment above) — told to build.sh directly rather than having
|
|
# it re-derive that via `git describe`, which needs full tag
|
|
# refs a CI runner's checkout isn't guaranteed to have fetched.
|
|
SHANNONCOAT_RELEASE_BUILD: "1"
|
|
|
|
- name: Zip app bundle
|
|
run: ditto -c -k --sequesterRsrc --keepParent ".build/shannoncoat.app" "shannoncoat.app.zip"
|
|
|
|
- name: Publish release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: ${{ inputs.tag || github.ref_name }}
|
|
files: |
|
|
shannoncoat.app.zip
|
|
generate_release_notes: true
|