Compare commits

...

5 Commits

Author SHA1 Message Date
Leendert de Borst
93fb1960d3 Update project.pbxproj objectVersion 2025-12-30 21:22:12 +01:00
Leendert de Borst
425b4d5152 Create print-latest-changelogs.sh 2025-12-30 20:48:25 +01:00
Leendert de Borst
c8cf64cbbc Update release.yml 2025-12-30 20:19:11 +01:00
Leendert de Borst
75df6900a3 Create git-versioning-strategy.md 2025-12-30 20:04:26 +01:00
Leendert de Borst
413dc5fd0a Add 0.25.3 changelogs 2025-12-30 20:04:25 +01:00
10 changed files with 284 additions and 27 deletions

View File

@@ -27,7 +27,33 @@ on:
type: boolean
jobs:
# Guard job to prevent releases from main branch
valid-release:
if: github.event_name == 'release'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check tag target
run: |
BRANCHES=$(git branch -r --contains $GITHUB_SHA)
echo "Tag is contained in:"
echo "$BRANCHES"
if ! echo "$BRANCHES" | grep -q "origin/release/"; then
echo "❌ Releases must come from a release/* branch, please recreate the release from a release branch"
exit 1
fi
echo "✅ Tag is on a release branch"
upload-install-script:
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success')
runs-on: ubuntu-latest
permissions:
contents: write
@@ -43,7 +69,8 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
build-chrome-extension:
if: github.event_name == 'release' || inputs.build_browser_extensions
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
@@ -58,7 +85,8 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-firefox-extension:
if: github.event_name == 'release' || inputs.build_browser_extensions
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
@@ -73,7 +101,8 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-edge-extension:
if: github.event_name == 'release' || inputs.build_browser_extensions
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
@@ -88,7 +117,8 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-android-release:
if: github.event_name == 'release' || inputs.build_mobile_apps
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_mobile_apps)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
@@ -107,7 +137,8 @@ jobs:
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
build-and-push-docker-multi-container:
if: github.event_name == 'release' || inputs.build_multi_container
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_multi_container)
runs-on: ubuntu-latest
permissions:
contents: read
@@ -372,7 +403,8 @@ jobs:
annotations: ${{ steps.installcli-meta.outputs.annotations }}
build-and-push-docker-all-in-one:
if: github.event_name == 'release' || inputs.build_all_in_one
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_all_in_one)
runs-on: ubuntu-latest
permissions:
contents: read

View File

@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 70;
objectVersion = 60;
objects = {
/* Begin PBXBuildFile section */
@@ -212,7 +212,7 @@
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
CEE9098F2DA548C7008D568F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
CEE9098F2DA548C7008D568F /* Exceptions for "Autofill" folder in "Autofill" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
@@ -222,13 +222,84 @@
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
CE59C7602E4F47FD0024A246 /* VaultUITests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultUITests; sourceTree = "<group>"; };
CE77825E2EA1822400A75E6F /* VaultUtils */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultUtils; sourceTree = "<group>"; };
CEE480882DBE86DC00F4A367 /* VaultStoreKit */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultStoreKit; sourceTree = "<group>"; };
CEE480972DBE86DD00F4A367 /* VaultStoreKitTests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultStoreKitTests; sourceTree = "<group>"; };
CEE4816B2DBE8AC800F4A367 /* VaultUI */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultUI; sourceTree = "<group>"; };
CEE482AB2DBE8EFE00F4A367 /* VaultModels */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultModels; sourceTree = "<group>"; };
CEE909812DA548C7008D568F /* Autofill */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (CEE9098F2DA548C7008D568F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Autofill; sourceTree = "<group>"; };
CE59C7602E4F47FD0024A246 /* VaultUITests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultUITests;
sourceTree = "<group>";
};
CE77825E2EA1822400A75E6F /* VaultUtils */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultUtils;
sourceTree = "<group>";
};
CEE480882DBE86DC00F4A367 /* VaultStoreKit */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultStoreKit;
sourceTree = "<group>";
};
CEE480972DBE86DD00F4A367 /* VaultStoreKitTests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultStoreKitTests;
sourceTree = "<group>";
};
CEE4816B2DBE8AC800F4A367 /* VaultUI */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultUI;
sourceTree = "<group>";
};
CEE482AB2DBE8EFE00F4A367 /* VaultModels */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultModels;
sourceTree = "<group>";
};
CEE909812DA548C7008D568F /* Autofill */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
CEE9098F2DA548C7008D568F /* Exceptions for "Autofill" folder in "Autofill" target */,
);
explicitFileTypes = {
};
explicitFolders = (
);
path = Autofill;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
@@ -1349,7 +1420,10 @@
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "$(inherited) ";
OTHER_LDFLAGS = (
"$(inherited)",
" ",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
@@ -1403,7 +1477,10 @@
);
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_LDFLAGS = "$(inherited) ";
OTHER_LDFLAGS = (
"$(inherited)",
" ",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
USE_HERMES = true;

View File

@@ -333,9 +333,9 @@ PODS:
- FBLazyVector (0.79.6)
- fmt (11.0.2)
- glog (0.3.5)
- hermes-engine (0.79.5):
- hermes-engine/Pre-built (= 0.79.5)
- hermes-engine/Pre-built (0.79.5)
- hermes-engine (0.79.6):
- hermes-engine/Pre-built (= 0.79.6)
- hermes-engine/Pre-built (0.79.6)
- Macaw (0.9.10):
- SWXMLHash
- OpenSSL-Universal (3.3.3001)
@@ -2442,7 +2442,7 @@ PODS:
- SQLite.swift (0.14.1):
- SQLite.swift/standard (= 0.14.1)
- SQLite.swift/standard (0.14.1)
- SwiftLint (0.59.1)
- SwiftLint (0.62.2)
- SWXMLHash (7.0.2)
- Yoga (0.0.0)
@@ -2795,8 +2795,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
boost: 1dca942403ed9342f98334bf4c3621f011aa7946
DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385
boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90
DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb
EXConstants: 98bcf0f22b820f9b28f9fee55ff2daededadd2f8
EXJSONUtils: 1d3e4590438c3ee593684186007028a14b3686cd
EXManifests: 691a779b04e4f2c96da46fb9bef4f86174fefcb5
@@ -2826,9 +2826,9 @@ SPEC CHECKSUMS:
EXUpdatesInterface: 7ff005b7af94ee63fa452ea7bb95d7a8ff40277a
fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6
FBLazyVector: 07309209b7b914451b8f822544a18e2a0a85afff
fmt: 01b82d4ca6470831d1cc0852a1af644be019e8f6
glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a
hermes-engine: f03b0e06d3882d71e67e45b073bb827da1a21aae
fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd
glog: 5683914934d5b6e4240e497e0f4a3b42d1854183
hermes-engine: 44bb6fe76a6eb400d3a992e2d0b21946ae999fa9
Macaw: 7af8ea57aa2cab35b4a52a45e6f85eea753ea9ae
OpenSSL-Universal: 6082b0bf950e5636fe0d78def171184e2b3899c2
RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82
@@ -2908,7 +2908,7 @@ SPEC CHECKSUMS:
SignalArgon2: 1c24183835ca861e6af06631c18b1671cdf35571
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
SQLite.swift: 2992550ebf3c5b268bf4352603e3df87d2a4ed72
SwiftLint: 3d48e2fb2a3468fdaccf049e5e755df22fb40c2c
SwiftLint: f84fc7d844e9cde0dc4f5013af608a269e317aba
SWXMLHash: dd733a457e9c4fe93b1538654057aefae4acb382
Yoga: dc7c21200195acacb62fa920c588e7c2106de45e

View File

@@ -0,0 +1,61 @@
---
layout: default
title: Git versioning strategy
parent: Release
grand_parent: Development
nav_order: 3
---
# Git versioning strategy
This document describes the **official release workflow** for AliasVault.
## Branch Semantics
### `main`
- Represents the **next version line**
- Contains **only pre-release versions**
- Example versions:
- `0.26.0-alpha`
- `0.26.0-beta`
- Never tagged for stable releases
---
### `XXXX-*` (GitHub issue branches)
- Branch from:
- `main` for next-version development, or
- a release tag for hotfixes
- Contains **only code fixes**
- No version changes
- No release notes
- May contain many commits
Landing rules:
- If branched from `main`: merge or rebase back into `main`
- If branched from a tag: **cherry-pick fixes into `main`**
- May be merged into a `release/*` branch for packaging
---
### `release/*`
- Used only to **package a stable release**
- Contains:
- fixes (cherry-picked back into main)
- release notes (cherry-picked back into main)
- version bump
- Never merged into `main`
- Deleted after tagging
---
## Versioning Rules
### Development versions
- Live only on `main`
- Always pre-release (`-alpha`, `-beta`, etc.)
### Stable versions
- Live only on `release/*` branches
- Always tagged
- Never merged back into `main`

View File

@@ -0,0 +1,2 @@
- Android Passkey compatibility improvements
- Add French and Spanish language options

View File

@@ -0,0 +1,2 @@
- Android Passkey compatibiliteit verbeterd
- Frans en Spaans toegevoegd als taalopties

View File

@@ -0,0 +1 @@
- Add French and Spanish language options

View File

@@ -0,0 +1 @@
- Add French and Spanish language options

View File

@@ -0,0 +1 @@
- Frans en Spaans toegevoegd als taalopties

View File

@@ -0,0 +1,80 @@
#!/bin/bash
#
# Show the latest changelogs for all platforms (Android, iOS, Browser Extension)
# Outputs formatted changelog content for easy copy-paste
#
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
METADATA_DIR="$ROOT_DIR/fastlane/metadata"
# Function to get the latest changelog file from a directory
get_latest_changelog() {
local dir="$1"
if [ -d "$dir" ]; then
# Sort files by version number (handles both numeric and semver formats)
ls -1 "$dir" 2>/dev/null | sort -V | tail -1
fi
}
# Function to print Android changelogs (XML format, no spaces between languages)
print_android() {
local changelog_dir="$METADATA_DIR/android/en-US/changelogs"
local latest_file=$(get_latest_changelog "$changelog_dir")
echo "================================================================================"
echo "ANDROID (latest: $latest_file)"
echo "================================================================================"
echo ""
# Print all locales in XML format without blank lines between them
for locale_dir in "$METADATA_DIR/android"/*; do
if [ -d "$locale_dir/changelogs" ]; then
locale=$(basename "$locale_dir")
local file="$locale_dir/changelogs/$latest_file"
if [ -f "$file" ]; then
echo "<$locale>"
cat "$file"
echo "</$locale>"
fi
fi
done
echo ""
}
# Function to print iOS/Browser Extension changelogs (each language separate)
print_simple() {
local platform="$1"
local display_name="$2"
local changelog_dir="$METADATA_DIR/$platform/en-US/changelogs"
local latest_file=$(get_latest_changelog "$changelog_dir")
echo "================================================================================"
echo "$display_name (latest: $latest_file)"
echo "================================================================================"
# Print each locale separately
for locale_dir in "$METADATA_DIR/$platform"/*; do
if [ -d "$locale_dir/changelogs" ]; then
locale=$(basename "$locale_dir")
local file="$locale_dir/changelogs/$latest_file"
if [ -f "$file" ]; then
echo ""
echo "--- $locale ---"
cat "$file"
fi
fi
done
echo ""
}
echo ""
echo "Latest Changelogs Summary"
echo ""
print_android
print_simple "ios" "iOS"
print_simple "browser-extension" "BROWSER EXTENSION"
echo "================================================================================"
echo ""