Skip to content

fix: conform CFBundleVersion to documentation #167

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 28, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
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
7 changes: 7 additions & 0 deletions Coder-Desktop/Coder-Desktop/About.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,18 @@ enum About {
return coder
}

private static var version: NSString {
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown"
let commitHash = Bundle.main.infoDictionary?["CommitHash"] as? String ?? "Unknown"
return "Version \(version) - \(commitHash)" as NSString
}

@MainActor
static func open() {
appActivate()
NSApp.orderFrontStandardAboutPanel(options: [
.credits: credits,
.applicationVersion: version,
])
}
}
2 changes: 2 additions & 0 deletions Coder-Desktop/Coder-Desktop/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,7 @@
</dict>
<key>SUPublicEDKey</key>
<string>Ae2oQLTcx89/a73XrpOt+IVvqdo+fMTjo3UKEm77VdA=</string>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<string>Ae2oQLTcx89/a73XrpOt+IVvqdo+fMTjo3UKEm77VdA=</string>
<string>Ae2oQLTcx89/a73XrpOt+IVvqdo+fMTjo3UKEm77VdA=</string>

<key>CommitHash</key>
<string>$(GIT_COMMIT_HASH)</string>
</dict>
</plist>
1 change: 1 addition & 0 deletions Coder-Desktop/project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ settings:
base:
MARKETING_VERSION: ${MARKETING_VERSION} # Sets the version number.
CURRENT_PROJECT_VERSION: ${CURRENT_PROJECT_VERSION} # Sets the build number.
GIT_COMMIT_HASH: ${GIT_COMMIT_HASH}

ALWAYS_SEARCH_USER_PATHS: NO
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS: YES
Expand Down
15 changes: 13 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,29 @@ $(error MUTAGEN_VERSION must be a valid version)
endif

ifndef CURRENT_PROJECT_VERSION
CURRENT_PROJECT_VERSION:=$(shell git describe --match 'v[0-9]*' --dirty='.devel' --always --tags)
# Must be X.Y.Z[.N]
CURRENT_PROJECT_VERSION:=$(shell ./scripts/version.sh)
endif
ifeq ($(strip $(CURRENT_PROJECT_VERSION)),)
$(error CURRENT_PROJECT_VERSION cannot be empty)
endif

ifndef MARKETING_VERSION
MARKETING_VERSION:=$(shell git describe --match 'v[0-9]*' --tags --abbrev=0 | sed 's/^v//' | sed 's/-.*$$//')
# Must be X.Y.Z
MARKETING_VERSION:=$(shell ./scripts/version.sh --short)
endif
ifeq ($(strip $(MARKETING_VERSION)),)
$(error MARKETING_VERSION cannot be empty)
endif

ifndef GIT_COMMIT_HASH
# Must be a valid git commit hash
GIT_COMMIT_HASH := $(shell ./scripts/version.sh --hash)
endif
ifeq ($(strip $(GIT_COMMIT_HASH)),)
$(error GIT_COMMIT_HASH cannot be empty)
endif

# Define the keychain file name first
KEYCHAIN_FILE := app-signing.keychain-db
# Use shell to get the absolute path only if the file exists
Expand All @@ -70,6 +80,7 @@ $(XCPROJECT): $(PROJECT)/project.yml
EXT_PROVISIONING_PROFILE_ID=${EXT_PROVISIONING_PROFILE_ID} \
CURRENT_PROJECT_VERSION=$(CURRENT_PROJECT_VERSION) \
MARKETING_VERSION=$(MARKETING_VERSION) \
GIT_COMMIT_HASH=$(GIT_COMMIT_HASH) \
xcodegen

$(PROJECT)/VPNLib/vpn.pb.swift: $(PROJECT)/VPNLib/vpn.proto
Expand Down
60 changes: 60 additions & 0 deletions scripts/version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/usr/bin/env bash
set -euo pipefail

usage() {
echo "Usage: $0 [--short] [--hash]"
echo " --short Output a CFBundleShortVersionString compatible version (X.Y.Z)"
echo " --hash Output only the commit hash"
echo " -h, --help Display this help message"
echo ""
echo "With no flags, outputs: X.Y.Z[.N]"
}

SHORT=false
HASH_ONLY=false

while [[ "$#" -gt 0 ]]; do
case $1 in
--short)
SHORT=true
shift
;;
--hash)
HASH_ONLY=true
shift
;;
-h | --help)
usage
exit 0
;;
*)
echo "Unknown parameter passed: $1"
usage
exit 1
;;
esac
done

if [[ "$HASH_ONLY" == true ]]; then
current_hash=$(git rev-parse --short=7 HEAD)
echo "$current_hash"
exit 0
fi

describe_output=$(git describe --tags)

# Of the form `vX.Y.Z-N-gHASH`
if [[ $describe_output =~ ^v([0-9]+\.[0-9]+\.[0-9]+)(-([0-9]+)-g[a-f0-9]+)?$ ]]; then
version=${BASH_REMATCH[1]} # X.Y.Z
commits=${BASH_REMATCH[3]} # number of commits since tag

if [[ "$SHORT" == true ]]; then
echo "$version"
exit 0
fi

echo "${version}.${commits}"
else
echo "Error: Could not parse git describe output: $describe_output" >&2
exit 1
fi
Loading