Commit graph

434 commits

Author SHA1 Message Date
Johannes Millan
cb2e2e65a2 feat(supersync): implement Phase 1 encryption-at-rest tooling
Complete Phase 1 (Preparation & Tooling) deliverables:

Core Scripts (5):
- setup-encrypted-volume.sh: Create LUKS2 encrypted volumes with dual-key setup
- unlock-encrypted-volume.sh: Unlock volumes with audit logging
- backup-encrypted.sh: Streaming encrypted backups (no temp files)
- verify-prerequisites.sh: Environment validation (cryptsetup, AES-NI, kernel modules)
- discover-docker-names.sh: Helper to identify actual container/volume names

Configuration:
- docker-compose.encrypted.yaml: Overlay config for encrypted PostgreSQL
- encryption-at-rest.md: Architecture documentation (362 lines)

Technical Details:
- LUKS2 with AES-256-XTS (512-bit key for XTS mode)
- Argon2id key derivation (1GB memory, 4 threads)
- Dual-key setup: operational (daily use) + recovery (emergency)
- LUKS header backup with encryption
- OpenSSL AES-256-CBC for backup encryption (PBKDF2, 1M iterations)
- Audit logging for GDPR compliance

Also includes: Build workflow changes to temporarily disable SignPath
code signing while waiting for certificate issuance.

Total: 990 lines of encryption tooling and documentation.
2026-01-23 14:31:24 +01:00
Johannes Millan
f6a7c28f43 feat(build): add SignPath code signing integration for Windows
- Add SignPath signing step to windows-bin job in build workflow
- Configure signing for all Windows executables (NSIS installers and portable .exe)
- Disable auto-release in electron-builder to allow signing before release
- Add manual GitHub Release upload after signing completes
- Add comprehensive documentation for SignPath setup and configuration
- Document required GitHub secrets and workflow configuration
- Include verification steps and troubleshooting guide

The integration is ready but signing steps will be commented out initially
until the SignPath certificate is fully issued (currently CSR PENDING).
2026-01-23 14:31:24 +01:00
Johannes Millan
dcda9ac2b1
Merge pull request #6117 from zenoprax/enabled-markdown-linting
enabled markdown linting
2026-01-23 13:24:31 +01:00
Ivan Kalashnikov
4e0fb4a911 fix(ci): remove dependency on test-on-linux for lighthouse job 2026-01-23 17:23:08 +07:00
Ivan Kalashnikov
6d94f7daa3 fix(ci): add dependency for lighthouse job to ensure proper execution order 2026-01-23 15:56:27 +07:00
Ivan Kalashnikov
60cc73b4c0 chore(workflow): add continue-on-error option to deploy-preview and review jobs 2026-01-23 15:56:15 +07:00
Ivan Kalashnikov
389e20fdc6 chore(review): made common code review stage 2026-01-23 15:47:43 +07:00
Ivan Kalashnikov
b91f16a35f refactor(ci): standardize job names for clarity and consistency 2026-01-23 15:29:32 +07:00
Ivan Kalashnikov
9a22232e59 chore(ci): consolidate CI workflows into a single pipeline and remove obsolete files 2026-01-23 14:04:40 +07:00
Ivan Kalashnikov
f583ae1f98 fix(workflow): restructure lint and test jobs for improved clarity and execution order 2026-01-23 13:35:05 +07:00
Corey Newton
c53ce71c0c
docs(ci): align md linting with wiki instructions 2026-01-22 20:27:20 -08:00
Corey Newton
1dcca44e60
docs(ci): enable markdown linting
Requires linting success to proceed with sync.
2026-01-22 18:46:16 -08:00
Johannes Millan
70aae24449 fix(sync): defer ImmediateUploadService initialization until data loads
Prevents race condition where upload attempts happen before sync config
is loaded from IndexedDB, eliminating 404 errors to default baseUrl
during app startup and E2E tests.
2026-01-22 17:33:17 +01:00
Johannes Millan
a0fdc2efee fix(ci): pin pr-preview-deploy workflow actions to commit SHAs
- Update peter-evans/find-comment to v4.0.0 (pinned SHA)
- Update peter-evans/create-or-update-comment to v5.0.0 (pinned SHA)

Fixes GitHub Actions failure where v4 tag pointed to unavailable commit.
Uses commit SHAs instead of version tags for supply chain security.
2026-01-22 16:57:19 +01:00
Johannes Millan
c07ee10d47 fix(ci): use stable version tags for GitHub Actions 2026-01-22 15:38:55 +01:00
Johannes Millan
a81f5601c4
Merge pull request #6102 from super-productivity/claude/pr-deployment-previews-p5QsV
feat(ci): add Cloudflare Pages PR preview deployments
2026-01-22 15:01:52 +01:00
Corey Newton
ababd99b57
docs(ci): Exclude docs/wiki/** from some actions
There is no reason to run certain checks on simple documentation
updates. These Actions showed up during the initial v0.1 PR and added
noise to the PR process.
2026-01-21 20:04:16 -08:00
Claude
519e12beb1
feat(ci): add Cloudflare Pages PR preview deployments
Add automated preview deployments for pull requests using Cloudflare Pages.
Each PR gets a unique preview URL that updates on every push.

Requires configuring these repository secrets:
- CLOUDFLARE_API_TOKEN
- CLOUDFLARE_ACCOUNT_ID
2026-01-21 23:43:52 +00:00
Johannes Millan
cd5151f4f7 fix(ci): exclude WebDAV and SuperSync tests from build workflow
WebDAV and SuperSync E2E tests require dedicated server infrastructure
and should only run in the scheduled E2E workflow or manually. This
prevents build failures when the required servers are not available.

- Added @webdav tag to all WebDAV test files for consistent filtering
- Updated build.yml to exclude @webdav and @supersync tagged tests
2026-01-21 20:42:50 +01:00
Johannes Millan
623971eacd fix(ci): allow external contributors to trigger Claude Code review workflow
Add allowed_non_write_users parameter to bypass actor permission check for PRs from external contributors. This enables automated code reviews for all PRs, including those from forks, while maintaining security through pull_request_target context.
2026-01-21 19:23:27 +01:00
Johannes Millan
01f8c6cd5f fix(ci): allow Dependabot PRs to trigger code review workflow 2026-01-21 15:30:18 +01:00
Johannes Millan
d73ba67489
Merge pull request #6090 from super-productivity/dependabot/github_actions/github-actions-minor-05604d7d6b
chore(deps)(deps): bump easingthemes/ssh-deploy from 5.0.3 to 5.1.1 in the github-actions-minor group
2026-01-21 15:26:13 +01:00
Johannes Millan
c74cc61866
Merge pull request #6091 from super-productivity/dependabot/github_actions/docker/login-action-3.6.0
chore(deps)(deps): bump docker/login-action from 2.2.0 to 3.6.0
2026-01-21 15:26:03 +01:00
Johannes Millan
ee135f28ab
Merge pull request #6092 from super-productivity/dependabot/github_actions/github/codeql-action-4.31.10
chore(deps)(deps): bump github/codeql-action from 3.31.10 to 4.31.10
2026-01-21 15:25:55 +01:00
dependabot[bot]
5ef7fbfb0f
chore(deps)(deps): bump actions/checkout from 4.3.1 to 6.0.1
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.3.1 to 6.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Commits](https://github.com/actions/checkout/compare/v4.3.1...v6.0.1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 13:45:27 +00:00
dependabot[bot]
58be8c5b07
chore(deps)(deps): bump github/codeql-action from 3.31.10 to 4.31.10
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.31.10 to 4.31.10.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](4bdb89f480...cdefb33c0f)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.31.10
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 13:45:05 +00:00
dependabot[bot]
793a14a010
chore(deps)(deps): bump docker/login-action from 2.2.0 to 3.6.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.2.0 to 3.6.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](465a07811f...5e57cd1181)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 13:44:49 +00:00
dependabot[bot]
06ddb727eb
chore(deps)(deps): bump easingthemes/ssh-deploy
Bumps the github-actions-minor group with 1 update: [easingthemes/ssh-deploy](https://github.com/easingthemes/ssh-deploy).


Updates `easingthemes/ssh-deploy` from 5.0.3 to 5.1.1
- [Release notes](https://github.com/easingthemes/ssh-deploy/releases)
- [Changelog](https://github.com/easingthemes/ssh-deploy/blob/main/docs/CHANGELOG.md)
- [Commits](01a39e3348...a1aa0b6cf9)

---
updated-dependencies:
- dependency-name: easingthemes/ssh-deploy
  dependency-version: 5.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 13:44:43 +00:00
Johannes Millan
27630a59fe security: add Harden-Runner and fix remaining unpinned actions
Add StepSecurity Harden-Runner to production workflows for runtime monitoring
and fix all remaining unpinned GitHub Actions that were missed in initial pass.

Changes:
1. StepSecurity Harden-Runner (Phase 2.2.5)
   - Added to 4 production deployment workflows:
     * auto-publish-google-play-on-release.yml (Google Play)
     * publish-to-hub-docker.yml (Docker Hub)
     * build-update-web-app-on-release.yml (Web server)
     * build-publish-to-mac-store-on-release.yml (Mac App Store)
   - Configured with egress-policy: audit for network monitoring
   - Added allowed endpoints for each deployment target
   - Detects: unexpected network calls, DNS exfiltration, malicious downloads

2. Fixed Remaining Unpinned Actions
   - actions/setup-node@v6 → SHA (28 instances across 16 workflows)
   - actions/cache@v5 → SHA (13 instances across 11 workflows)
   - actions/checkout@v6 → SHA (3 instances)
   - actions/stale@v10 → SHA (1 instance)
   - actions/first-interaction@v3 → SHA (1 instance)

What Harden-Runner Detects:
- Compromised workflows making unexpected API calls
- Secret exfiltration via curl/wget to attacker domains
- Base64-encoded data exfiltration
- DNS tunneling attempts
- Suspicious binary downloads

Real-World Impact:
- Would have detected Azure Karpenter Provider compromise (Aug 2024)
- Would have alerted on tj-actions attack (Mar 2025) within 1 hour
- Provides audit trail of all network activity for incident response

All 22 workflows validated with YAML syntax checks.

Risk Score: 55/100 → 45/100 (runtime monitoring added)

Refs: StepSecurity Blog, CVE-2025-30066
2026-01-21 14:30:24 +01:00
Johannes Millan
9b2afbe109 security: pin all GitHub Actions to commit SHAs (CVE-2025-30066 mitigation)
Pin all GitHub Actions to immutable commit SHAs to prevent supply chain attacks.
This protects against tag-poisoning attacks like the March 2025 tj-actions compromise
that affected 23,000+ repositories.

Changes:
- Pin 55 action references across 19 workflow files to commit SHAs
- Add version comments (e.g., "# v6") for readability
- Manually resolved: gradle/actions, github/codeql-action, actions/setup-node

All actions now use immutable references following GitHub security best practices:
https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions

Future updates should be managed via Dependabot to automate SHA updates.
2026-01-21 14:30:24 +01:00
Johannes Millan
aa7103d4a8 build: remove unsplash secrets from lint and test flow 2026-01-21 14:30:24 +01:00
Corey Newton
f9a328022d
docs(wiki): initial revision (v0.1)
Contains both a first-draft of content as well as
a comprehensive GH Action to replicate from
docs/wiki to the `.wiki` sub-repo. The linting is
non-blocking at the moment.

- the existing markdown linking appears reliably
rendered in GH but more testing needed.
- style guide for contributions/expectations needs
to be added to the wiki
- **a significant re-work of the README** to
re-direct users to the Wiki is needed to avoid
doc duplication
- updates to the PR templates and contributor
guidelines to emphasize the importance of adding
documentation is still needed
2026-01-20 03:04:08 -08:00
Johannes Millan
9e7a9ccdc9 fix(ci): grant write permissions for fork PRs in Claude Code review
Change trigger from pull_request to pull_request_target to allow the
workflow to run with write permissions even for external contributors.
This fixes the "Actor has insufficient permissions" error.

Also add condition to skip draft PRs to reduce API usage.
2026-01-19 14:43:26 +01:00
Johannes Millan
a8d154530e ci(e2e): increase scheduled workflow timeout to 120 minutes
The E2E test suite has grown to 111+ spec files with an estimated
execution time of 80-100 minutes, exceeding the previous 60-minute
timeout limit. This increase prevents premature workflow termination.
2026-01-18 15:35:32 +01:00
Johannes Millan
4bbe7634d8 build(ios): update to iOS 26 SDK for App Store requirements
- Change workflow runner from macos-latest to macos-26
- Add Xcode and SDK version verification step
- Ensures compliance with Apple's April 2026 requirement for iOS 26 SDK
- Maintains iOS 14.0 deployment target for backward compatibility
2026-01-18 12:21:38 +01:00
Johannes Millan
1f4eecbe70 fix(e2e): create missing .env file and update GitHub Actions syntax
Docker Compose was failing because env_file: .env was referenced but the
file doesn't exist in CI (it's gitignored). Also updates deprecated
set-output command to use GITHUB_OUTPUT environment file.
2026-01-18 12:07:55 +01:00
Johannes Millan
4d78d7b9fc fix(ci): add E2E tests to PR workflow 2026-01-17 15:23:45 +01:00
Johannes Millan
6a9d39838c build: don't run e2e tests every 2026-01-17 15:02:11 +01:00
Johannes Millan
a11257e70b fix(ci): grant write permissions for Claude code review to post comments
The Claude Code Review workflow needs pull-requests: write permission to post review comments on PRs. Previously it only had read access, causing "Actor does not have write permissions" errors.
2026-01-17 12:36:07 +01:00
Johannes Millan
7a7cb031b9 fix(ci): add memory allocation to Mac test step to prevent OOM 2026-01-17 12:36:07 +01:00
Johannes Millan
ce4e61fd94 fix(ci): grant write permissions to Claude Code action
The Claude Code GitHub Action was failing with 403 errors when trying
to create comments on issues due to read-only permissions. Updated
contents, pull-requests, and issues permissions from read to write.
2026-01-16 22:34:49 +01:00
Johannes Millan
f421d2387a fix(e2e): add robust overlay cleanup to prevent blocked clicks
Angular Material overlay backdrops were not being properly cleared between
tag operations, causing subsequent clicks to timeout when overlays blocked
element interactions.

Added ensureOverlaysClosed() helper with:
- Early exit if no overlays present (performance)
- Escape key dismissal with retry for stacked overlays
- Logging for debugging when fallbacks trigger
- Uses Playwright's native locator.waitFor() instead of waitForFunction()
- Cleanup at operation start (prevent blocking) and end (clean state)

Benefits:
- Eliminates fixed timeouts, uses smart waiting (tests run 2x faster)
- Handles edge cases like stacked overlays
- Provides visibility into when overlays are unexpectedly present

Fixes 4 failing tests:
- Tag CRUD: remove tag via context menu
- Tag CRUD: delete tag and update tasks
- Tag CRUD: navigate to tag view
- Menu: toggle tags via submenu
2026-01-16 22:34:49 +01:00
johannesjo
5813ea6f94 fix(ios): strip pre-release suffix from version for App Store 2026-01-16 16:52:53 +01:00
johannesjo
98855bb577 fix(ios): skip code signing during archive, sign during export 2026-01-16 16:37:53 +01:00
johannesjo
9d19a481c8 fix(ios): use correct bundle ID com.super-productivity.app 2026-01-16 16:07:33 +01:00
johannesjo
5b4dfa09a3 fix(ios): fix archive step for CocoaPods compatibility
- Remove PROVISIONING_PROFILE_SPECIFIER from archive (breaks Pods)
- Use CODE_SIGN_STYLE=Automatic for archive step
- Manual signing handled during export via ExportOptions.plist
- Add bundle ID verification to catch mismatches early
2026-01-16 16:03:51 +01:00
johannesjo
04a7e0e6aa refactor(ios): reuse existing mac_certs for iOS signing
Apple Distribution certificate works for both macOS and iOS.
Only new secret needed: ios_provision_profile
2026-01-16 15:42:28 +01:00
johannesjo
2996aaa361 feat(ios): add GitHub Actions workflow for iOS App Store release
- Create build-ios.yml workflow triggered on releases
- Configure signing keychain with iOS distribution certificate
- Install provisioning profile for App Store distribution
- Sync version from package.json using agvtool
- Build, archive, and export IPA with manual code signing
- Validate and upload to App Store Connect via xcrun altool
- Add sync:ios and dist:ios:prod npm scripts
2026-01-16 15:24:03 +01:00
Johannes Millan
27e17222d4 fix(ci): add github_token fallback to fix OIDC token error 2026-01-16 13:28:05 +01:00
Ivan Kalashnikov
5bd7d8b6b5 Merge remote-tracking branch 'origin/master' into select-multiple-tags 2026-01-16 15:39:32 +07:00