fix(12): satisfy CI fast-checks — lint unused vars, typed contract-test body, prettier
CI / changes (pull_request) Successful in 3s
CI / fast-checks (pull_request) Successful in 2m16s
CI / api (pull_request) Failing after 1m37s
CI / harness (pull_request) Failing after 1h3m45s
CI / security (pull_request) Failing after 11s
CI / gate (pull_request) Failing after 1s
CI / changes (pull_request) Successful in 3s
CI / fast-checks (pull_request) Successful in 2m16s
CI / api (pull_request) Failing after 1m37s
CI / harness (pull_request) Failing after 1h3m45s
CI / security (pull_request) Failing after 11s
CI / gate (pull_request) Failing after 1s
- Remove unused 'res'/'container' assignments (no-unused-vars) - setupClient.contract.test.ts: typed parseSentBody helper + non-async json mock (no-unsafe-*/require-await) - Prettier format 7 setup files Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
f485b38324
commit
a193bc8236
@@ -175,14 +175,8 @@ function StepIndicator({ currentStep }: StepIndicatorProps) {
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
background:
|
||||
isCompleted || isActive
|
||||
? 'var(--color-member-0, #4a90d9)'
|
||||
: 'transparent',
|
||||
border:
|
||||
isCompleted || isActive
|
||||
? 'none'
|
||||
: '2px solid var(--color-border, #e2e4e9)',
|
||||
background: isCompleted || isActive ? 'var(--color-member-0, #4a90d9)' : 'transparent',
|
||||
border: isCompleted || isActive ? 'none' : '2px solid var(--color-border, #e2e4e9)',
|
||||
color: isCompleted || isActive ? '#ffffff' : 'var(--color-text-muted, #9ca3af)',
|
||||
fontSize: 'var(--text-label-size, 13px)',
|
||||
fontWeight: 600,
|
||||
@@ -220,11 +214,7 @@ function StepIndicator({ currentStep }: StepIndicatorProps) {
|
||||
)}
|
||||
|
||||
<div style={{ ...circleStyle, zIndex: 1, position: 'relative' }}>
|
||||
{isCompleted ? (
|
||||
<CheckCircle size={16} aria-hidden="true" />
|
||||
) : (
|
||||
<span>{stepNum}</span>
|
||||
)}
|
||||
{isCompleted ? <CheckCircle size={16} aria-hidden="true" /> : <span>{stepNum}</span>}
|
||||
</div>
|
||||
|
||||
<span
|
||||
@@ -383,12 +373,10 @@ function Step1Welcome({ onContinue, stepHeadingRef }: Step1Props) {
|
||||
lineHeight: 1.5,
|
||||
}}
|
||||
>
|
||||
This wizard will guide you through configuring your self-hosted instance. Before
|
||||
continuing, run{' '}
|
||||
<code>npm run generate-secrets</code>{' '}
|
||||
from the repo to generate your instance secrets and add them to your Docker environment.
|
||||
You'll also need: your OIDC client credentials (Authelia) and a Fastmail account
|
||||
with an app password. This takes about 5 minutes.
|
||||
This wizard will guide you through configuring your self-hosted instance. Before continuing,
|
||||
run <code>npm run generate-secrets</code> from the repo to generate your instance secrets
|
||||
and add them to your Docker environment. You'll also need: your OIDC client credentials
|
||||
(Authelia) and a Fastmail account with an app password. This takes about 5 minutes.
|
||||
</p>
|
||||
|
||||
{/* Before you start note block */}
|
||||
@@ -465,7 +453,9 @@ function Step2Config({ onBack, onSuccess, stepHeadingRef, fields, setFields }: S
|
||||
});
|
||||
const dbName = setupStatus?.dbName ?? '';
|
||||
|
||||
const [validationRows, setValidationRows] = useState<Pick<ValidationRowStatus, 'db' | 'oidc' | 'vapid'>>({
|
||||
const [validationRows, setValidationRows] = useState<
|
||||
Pick<ValidationRowStatus, 'db' | 'oidc' | 'vapid'>
|
||||
>({
|
||||
db: 'idle',
|
||||
oidc: 'idle',
|
||||
vapid: 'idle',
|
||||
@@ -518,9 +508,7 @@ function Step2Config({ onBack, onSuccess, stepHeadingRef, fields, setFields }: S
|
||||
}
|
||||
},
|
||||
onError: (err) => {
|
||||
setFieldError(
|
||||
err instanceof Error ? err.message : 'Something went wrong. Please try again.',
|
||||
);
|
||||
setFieldError(err instanceof Error ? err.message : 'Something went wrong. Please try again.');
|
||||
},
|
||||
});
|
||||
|
||||
@@ -654,9 +642,7 @@ function Step2Config({ onBack, onSuccess, stepHeadingRef, fields, setFields }: S
|
||||
placeholder="familysync"
|
||||
style={inputStyle(false)}
|
||||
/>
|
||||
<div style={helperStyle}>
|
||||
The client ID registered in Authelia for this application.
|
||||
</div>
|
||||
<div style={helperStyle}>The client ID registered in Authelia for this application.</div>
|
||||
</div>
|
||||
|
||||
{/* VAPID Public Key */}
|
||||
@@ -673,8 +659,7 @@ function Step2Config({ onBack, onSuccess, stepHeadingRef, fields, setFields }: S
|
||||
style={inputStyle(false)}
|
||||
/>
|
||||
<div style={helperStyle}>
|
||||
Paste the <code>VAPID_PUBLIC_KEY</code> value from{' '}
|
||||
<code>npm run generate-secrets</code>.
|
||||
Paste the <code>VAPID_PUBLIC_KEY</code> value from <code>npm run generate-secrets</code>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -721,19 +706,22 @@ function Step2Config({ onBack, onSuccess, stepHeadingRef, fields, setFields }: S
|
||||
/>
|
||||
|
||||
{/* General field error (before validation rows show) */}
|
||||
{fieldError && validationRows.db === 'idle' && validationRows.oidc === 'idle' && validationRows.vapid === 'idle' && (
|
||||
<div
|
||||
role="status"
|
||||
aria-live="polite"
|
||||
style={{
|
||||
color: 'var(--color-destructive, #dc2626)',
|
||||
fontSize: 'var(--text-body-size, 15px)',
|
||||
marginTop: 'var(--space-3, 12px)',
|
||||
}}
|
||||
>
|
||||
{fieldError}
|
||||
</div>
|
||||
)}
|
||||
{fieldError &&
|
||||
validationRows.db === 'idle' &&
|
||||
validationRows.oidc === 'idle' &&
|
||||
validationRows.vapid === 'idle' && (
|
||||
<div
|
||||
role="status"
|
||||
aria-live="polite"
|
||||
style={{
|
||||
color: 'var(--color-destructive, #dc2626)',
|
||||
fontSize: 'var(--text-body-size, 15px)',
|
||||
marginTop: 'var(--space-3, 12px)',
|
||||
}}
|
||||
>
|
||||
{fieldError}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Continue + Back row — appears only when both validations pass */}
|
||||
{bothPassed && configSaved && (
|
||||
@@ -806,15 +794,12 @@ function Step3Credential({ onBack, onSuccess, onLocked, stepHeadingRef }: Step3P
|
||||
onLocked();
|
||||
return;
|
||||
}
|
||||
setErrorText(
|
||||
err instanceof Error ? err.message : 'Something went wrong. Please try again.',
|
||||
);
|
||||
setErrorText(err instanceof Error ? err.message : 'Something went wrong. Please try again.');
|
||||
},
|
||||
});
|
||||
|
||||
const isPending = completeMutation.isPending || finalMutation.isPending;
|
||||
const saveDisabled =
|
||||
isPending || email.trim().length === 0 || password.trim().length === 0;
|
||||
const saveDisabled = isPending || email.trim().length === 0 || password.trim().length === 0;
|
||||
|
||||
function handleValidate() {
|
||||
if (saveDisabled) return;
|
||||
@@ -853,9 +838,8 @@ function Step3Credential({ onBack, onSuccess, onLocked, stepHeadingRef }: Step3P
|
||||
lineHeight: 1.5,
|
||||
}}
|
||||
>
|
||||
Add the Fastmail app password for the first household member. This credential is
|
||||
validated against Fastmail CalDAV before saving. The password is never stored in plain
|
||||
text.
|
||||
Add the Fastmail app password for the first household member. This credential is validated
|
||||
against Fastmail CalDAV before saving. The password is never stored in plain text.
|
||||
</p>
|
||||
|
||||
{/* Fastmail email */}
|
||||
@@ -1177,10 +1161,7 @@ export function SetupPage({ alreadyLocked = false }: SetupPageProps) {
|
||||
|
||||
{/* Step card (Surface 3) */}
|
||||
{step === 1 && (
|
||||
<Step1Welcome
|
||||
onContinue={() => setStep(2)}
|
||||
stepHeadingRef={stepHeadingRef}
|
||||
/>
|
||||
<Step1Welcome onContinue={() => setStep(2)} stepHeadingRef={stepHeadingRef} />
|
||||
)}
|
||||
{step === 2 && (
|
||||
<Step2Config
|
||||
|
||||
Reference in New Issue
Block a user