Skip to content

Commit 56e1e6d

Browse files
committed
Moving releases to GitHub Action pipeline
Moving to go 1.20 reruning dependencies Using up to date gclpr Vendoring npiperelay Linting with latest staticcheck
1 parent b99a86c commit 56e1e6d

File tree

208 files changed

+10859
-5598
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

208 files changed

+10859
-5598
lines changed

.github/workflows/release.yml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: wsl-ssh-agent release
2+
3+
on:
4+
create:
5+
tags:
6+
- "v*.*.*"
7+
8+
permissions:
9+
contents: write
10+
11+
jobs:
12+
13+
build:
14+
runs-on: ubuntu-latest
15+
steps:
16+
17+
- uses: actions/checkout@v3
18+
- uses: awalsh128/cache-apt-pkgs-action@latest
19+
with:
20+
packages: binutils-mingw-w64-x86-64
21+
version: 1.0
22+
23+
- name: Ubuntu version
24+
run: lsb_release -a
25+
26+
- name: Get latest CMake and Ninja
27+
uses: lukka/get-cmake@latest
28+
with:
29+
cmakeVersion: latest
30+
ninjaVersion: latest
31+
32+
- name: Set up Go
33+
uses: actions/setup-go@v3
34+
with:
35+
go-version: '1.20'
36+
37+
- name: Build - win64
38+
env:
39+
MSYSTEM_NAME: win64
40+
run: |
41+
cmake -G Ninja -B build_win64
42+
cmake --build build_win64 --target release
43+
44+
- name: Sign release artifacts
45+
# After lunar this could be replaced with "apt install minisign"
46+
uses: thomasdesr/minisign-action@v1
47+
with:
48+
args: -Sm gclpr_*.zip
49+
minisign_key: ${{ secrets.minisign_key }}
50+
password: ${{ secrets.minisign_password }}
51+
52+
- name: List results
53+
run: ls -lah wsl-ssh-*
54+
55+
- name: Upload release
56+
uses: softprops/action-gh-release@v1
57+
if: startsWith(github.ref, 'refs/tags/')
58+
with:
59+
generate_release_notes: true
60+
files: |
61+
wsl-ssh-agent.json
62+
wsl-ssh-agent.zip
63+
wsl-ssh-agnt.zip.minisig

.gitignore

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
*.syso
1313

1414
build/
15-
release/
16-
17-
# build specific
15+
build_*/
1816
misc/version.go
1917
cmd/*/resources.rc
2018
cmd/*/manifest.xml

CMakeLists.txt

Lines changed: 67 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,35 @@
1-
cmake_minimum_required(VERSION 3.0)
1+
cmake_minimum_required(VERSION 3.18)
2+
3+
project(wsl-ssh-agent NONE)
24

35
message(STATUS "Running cmake version ${CMAKE_VERSION}")
4-
if (NOT CMAKE_TOOLCHAIN_FILE)
5-
set(CMAKE_TOOLCHAIN_FILE "../cmake/win64.toolchain" CACHE STRING "default toolchain" FORCE)
6-
endif()
76
if (NOT CMAKE_BUILD_TYPE)
87
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "default to release build type" FORCE)
98
endif()
10-
11-
project(wsl-ssh-agent NONE)
12-
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
13-
9+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release")
1410
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
1511
message(STATUS "Generator: ${CMAKE_GENERATOR}")
1612

17-
# Release installation directory
18-
if(NOT CMAKE_CROSSCOMPILING)
19-
message(FATAL_ERROR "Currently unsuppored environment. CMake willl exit now.")
13+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
14+
15+
if (NOT "$ENV{MSYSTEM_NAME}" STREQUAL "")
16+
set(MSYSTEM_NAME "$ENV{MSYSTEM_NAME}" CACHE INTERNAL "Copied from environment")
2017
else()
21-
set(HOST_GOOS linux)
22-
set(HOST_GOARCH amd64)
18+
set(MSYSTEM_NAME "linux_amd64" CACHE INTERNAL "Host environment")
2319
endif()
2420

25-
if(MSYSTEM_NAME STREQUAL "win32")
26-
set(CROSS_GOOS windows)
27-
set(CROSS_GOARCH 386)
28-
message(STATUS "Targeting 32 bits Windows executable")
29-
elseif(MSYSTEM_NAME STREQUAL "win64")
21+
if(MSYSTEM_NAME STREQUAL "win64")
3022
set(CROSS_GOOS windows)
3123
set(CROSS_GOARCH amd64)
24+
# we are not using cmake cross compilation abilities
25+
set(CROSS_EXECUTABLE_SUFFIX ".exe")
26+
find_program(CROSS_RC_COMPILER x86_64-w64-mingw32-windres PATHS usr PATH_SUFFIXES bin DOC "Windows resource compiler path" REQUIRED)
3227
message(STATUS "Targeting 64 bits Windows executable")
3328
else()
34-
message(FATAL_ERROR "Currently unsuppored environment \"${MSYSTEM_NAME}\". CMake willl exit now.")
29+
message(FATAL_ERROR "Currently unsuppored environment \"${MSYSTEM_NAME}\".")
3530
endif()
3631

37-
set(DEST_DIR "${PROJECT_SOURCE_DIR}/bin")
38-
message(STATUS "Installation directory: ${DEST_DIR}")
39-
40-
set(GO_MIN_REQURED_VERSION 1.19)
41-
find_package(Go ${GO_MIN_REQURED_VERSION} REQUIRED)
32+
find_package(Go REQUIRED)
4233
find_package(Git REQUIRED)
4334

4435
# Make sure we setup go properly
@@ -57,12 +48,21 @@ endif()
5748
# Setting up versioning
5849
########################################################################################################
5950

60-
# Project version number
61-
set(PRJ_VERSION_Major "1")
62-
set(PRJ_VERSION_Minor "6")
63-
set(PRJ_VERSION_Patch "3")
51+
# Project version number - comes from release version tag
52+
set(GIT_REF $ENV{GITHUB_REF})
53+
if(GIT_REF MATCHES "refs/tags/v([0-9]+)\\.([0-9]+)\\.([0-9]+)")
54+
set(PRJ_VERSION_Major ${CMAKE_MATCH_1})
55+
set(PRJ_VERSION_Minor ${CMAKE_MATCH_2})
56+
set(PRJ_VERSION_Patch ${CMAKE_MATCH_3})
57+
else()
58+
set(PRJ_VERSION_Major 0)
59+
set(PRJ_VERSION_Minor 0)
60+
set(PRJ_VERSION_Patch 0)
61+
endif()
6462

65-
if (EXISTS "${PROJECT_SOURCE_DIR}/.git" AND IS_DIRECTORY "${PROJECT_SOURCE_DIR}/.git")
63+
if(DEFINED ENV{GITHUB_SHA})
64+
set(GIT_HASH "$ENV{GITHUB_SHA}")
65+
elseif(EXISTS "${PROJECT_SOURCE_DIR}/.git" AND IS_DIRECTORY "${PROJECT_SOURCE_DIR}/.git")
6666
execute_process(COMMAND ${CMAKE_SOURCE_DIR}/cmake/githash.sh ${GIT_EXECUTABLE}
6767
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
6868
RESULT_VARIABLE res
@@ -75,25 +75,25 @@ else()
7575
set(GIT_HASH "no-git")
7676
endif()
7777
configure_file("${PROJECT_SOURCE_DIR}/cmake/version.go.in" "${PROJECT_SOURCE_DIR}/misc/version.go")
78-
configure_file("${PROJECT_SOURCE_DIR}/cmake/agent.rc.in" "${PROJECT_SOURCE_DIR}/cmd/agent/resources.rc")
79-
configure_file("${PROJECT_SOURCE_DIR}/cmake/agent.xml.in" "${PROJECT_SOURCE_DIR}/cmd/agent/manifest.xml")
80-
configure_file("${PROJECT_SOURCE_DIR}/cmake/wsl-ssh-agent.json.in" "${PROJECT_SOURCE_DIR}/wsl-ssh-agent.json")
81-
82-
# for user convinience
83-
execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../jstarks/npiperelay/npiperelay.exe ${PROJECT_BINARY_DIR})
84-
85-
# distribute history
86-
execute_process(COMMAND ${CMAKE_COMMAND} -E env ${GIT_EXECUTABLE} changelog --all --tag "v${PRJ_VERSION_Major}.${PRJ_VERSION_Minor}.${PRJ_VERSION_Patch}" --stdout OUTPUT_FILE ${PROJECT_BINARY_DIR}/changelog.txt ERROR_QUIET)
87-
88-
message(STATUS "Building version \"${PRJ_VERSION_Major}.${PRJ_VERSION_Minor}.${PRJ_VERSION_Patch}\" git \"${GIT_HASH}\"")
8978

9079
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
91-
# Create git pre-commit hook to check formatting before commit
80+
# Create local git hooks
9281
if(EXISTS "${PROJECT_SOURCE_DIR}/.git" AND IS_DIRECTORY "${PROJECT_SOURCE_DIR}/.git")
9382
execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/cmake/pre-commit ${PROJECT_SOURCE_DIR}/.git/hooks/. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
83+
configure_file("${PROJECT_SOURCE_DIR}/cmake/pre-push" "${PROJECT_SOURCE_DIR}/.git/hooks/pre-push" @ONLY)
9484
endif()
9585
endif()
9686

87+
if(CROSS_GOOS STREQUAL "windows")
88+
if(NOT EXISTS "${PROJECT_SOURCE_DIR}/gclpr.json")
89+
configure_file("${PROJECT_SOURCE_DIR}/cmake/wsl-ssh-agent.json.in" "${PROJECT_SOURCE_DIR}/wsl-ssh-agent.json" @ONLY)
90+
endif()
91+
configure_file("${PROJECT_SOURCE_DIR}/cmake/agent.rc.in" "${PROJECT_SOURCE_DIR}/cmd/gui/resources.rc" @ONLY)
92+
configure_file("${PROJECT_SOURCE_DIR}/cmake/agent.xml.in" "${PROJECT_SOURCE_DIR}/cmd/gui/manifest.xml" @ONLY)
93+
endif()
94+
95+
message(STATUS "Building version \"${PRJ_VERSION_Major}.${PRJ_VERSION_Minor}.${PRJ_VERSION_Patch}\" git \"${GIT_HASH}\"")
96+
9797
########################################################################################################
9898
# Some contexts dependent settings
9999
########################################################################################################
@@ -102,12 +102,14 @@ list(APPEND GO_ENV
102102
GOPATH=${GO_PATH}
103103
GOOS=${CROSS_GOOS}
104104
GOARCH=${CROSS_GOARCH}
105+
CGO_ENABLED=0
105106
)
106107

107108
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
108-
set(GO_ARGS "-mod=mod")
109+
set(TEST_RUN_ARGS "-v")
110+
set(GO_MOD_ARGS "-mod=mod")
109111
else()
110-
set(GO_ARGS "-mod=vendor")
112+
set(GO_MOD_ARGS "-mod=vendor")
111113
endif()
112114

113115
########################################################################################################
@@ -117,38 +119,43 @@ endif()
117119
add_custom_target(release
118120
DEPENDS ${PROJECT_SOURCE_DIR}/wsl-ssh-agent.zip
119121
${PROJECT_SOURCE_DIR}/wsl-ssh-agent.json
120-
COMMAND ${CMAKE_SOURCE_DIR}/cmake/sign.sh
122+
COMMAND ${CMAKE_SOURCE_DIR}/cmake/scoophash.sh ${MSYSTEM_NAME}
121123
COMMENT "Building release..."
122124
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
123125

124126
add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/wsl-ssh-agent.zip
125-
DEPENDS ${PROJECT_BINARY_DIR}/changelog.txt
126-
${PROJECT_BINARY_DIR}/npiperelay${CMAKE_EXECUTABLE_SUFFIX}
127-
${PROJECT_BINARY_DIR}/wsl-ssh-agent-gui${CMAKE_EXECUTABLE_SUFFIX}
127+
DEPENDS ${PROJECT_BINARY_DIR}/npiperelay${CROSS_EXECUTABLE_SUFFIX}
128+
${PROJECT_BINARY_DIR}/wsl-ssh-agent-gui${CROSS_EXECUTABLE_SUFFIX}
128129
COMMAND ${CMAKE_COMMAND} -E tar "cfv" ${PROJECT_SOURCE_DIR}/wsl-ssh-agent.zip --format=zip
129-
changelog.txt npiperelay${CMAKE_EXECUTABLE_SUFFIX} wsl-ssh-agent-gui${CMAKE_EXECUTABLE_SUFFIX}
130+
npiperelay${CROSS_EXECUTABLE_SUFFIX} wsl-ssh-agent-gui${CROSS_EXECUTABLE_SUFFIX}
130131
COMMENT "Archiving release..."
131132
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}")
132133

133134
add_custom_target(bin_agent ALL
134135
DEPENDS ${PROJECT_SOURCE_DIR}/cmd/agent/resources.syso
135-
BYPRODUCTS ${PROJECT_BINARY_DIR}/wsl-ssh-agent-gui${CMAKE_EXECUTABLE_SUFFIX}
136-
COMMAND ${GO_ENV} ${GO_EXECUTABLE} build -trimpath -o ${PROJECT_BINARY_DIR}/wsl-ssh-agent-gui${CMAKE_EXECUTABLE_SUFFIX}
136+
BYPRODUCTS ${PROJECT_BINARY_DIR}/wsl-ssh-agent-gui${CROSS_EXECUTABLE_SUFFIX}
137+
COMMAND ${GO_ENV} ${GO_EXECUTABLE} build ${GO_MOD_ARGS} -trimpath -o ${PROJECT_BINARY_DIR}/wsl-ssh-agent-gui${CROSS_EXECUTABLE_SUFFIX}
137138
-ldflags='-H=windowsgui'
138-
${GO_ARGS}
139139
./cmd/agent
140140
COMMENT "Building wsl-ssh-agent-gui..."
141141
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
142142

143143
add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/cmd/agent/resources.syso
144-
DEPENDS ${PROJECT_SOURCE_DIR}/cmd/agent/resources.rc
145-
${PROJECT_SOURCE_DIR}/cmd/agent/manifest.xml
146-
${PROJECT_SOURCE_DIR}/cmd/agent/icon.ico
147-
COMMAND ${CMAKE_RC_COMPILER} -O coff
148-
-o ${PROJECT_SOURCE_DIR}/cmd/agent/resources.syso
149-
-i ${PROJECT_SOURCE_DIR}/cmd/agent/resources.rc
150-
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
151-
COMMENT "Building wsl-ssh-agent-gui resources...")
144+
DEPENDS ${PROJECT_SOURCE_DIR}/cmd/agent/resources.rc
145+
${PROJECT_SOURCE_DIR}/cmd/agent/manifest.xml
146+
${PROJECT_SOURCE_DIR}/cmd/agent/icon.ico
147+
COMMAND ${CROSS_RC_COMPILER} -O coff
148+
-o ${PROJECT_SOURCE_DIR}/cmd/agent/resources.syso
149+
-i ${PROJECT_SOURCE_DIR}/cmd/agent/resources.rc
150+
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
151+
COMMENT "Building wsl-ssh-agent-gui resources...")
152+
153+
add_custom_target(bin_npiperelay
154+
BYPRODUCTS ${PROJECT_BINARY_DIR}/npiperelay${CROSS_EXECUTABLE_SUFFIX}
155+
COMMAND ${GO_ENV} ${GO_EXECUTABLE} build ${GO_MOD_ARGS} -trimpath -o ${PROJECT_BINARY_DIR}/npiperelay${CROSS_EXECUTABLE_SUFFIX}
156+
github.com/jstarks/npiperelay
157+
COMMENT "Building npiperelay..."
158+
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
152159

153160
########################################################################################################
154161
# Development
@@ -178,7 +185,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
178185

179186
add_custom_target(deps_tidy
180187
SOURCES ${PROJECT_SOURCE_DIR}/go.mod
181-
COMMAND ${GO_ENV} ${GO_EXECUTABLE} mod tidy -compat=${GO_MIN_REQURED_VERSION}
188+
COMMAND ${GO_ENV} ${GO_EXECUTABLE} mod tidy -go=${GO_LANG_VERSION}
182189
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
183190
COMMENT "Cleaning dependencies (go mod tidy)"
184191
VERBATIM)

cmake/FindGo.cmake

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,33 @@
55
# The module defines the following variables:
66
# GO_FOUND - true if the Go was found
77
# GO_EXECUTABLE - path to the executable
8+
# GOFMT_EXECUTABLE - path to gofmt executable
89
# GO_VERSION - Go version number
10+
# GO_LANG_VERSION - Go version number without patch, only major and minor versions. Used with "go mod tidy"
911
# GO_PLATFORM - i.e. linux
1012
# GO_ARCH - i.e. amd64
1113
# Example usage:
1214
# find_package(Go 1.2 REQUIRED)
1315

14-
find_program(GO_EXECUTABLE go PATHS $ENV{HOME}/go ENV GOROOT GOPATH PATH_SUFFIXES bin)
16+
find_program(GO_EXECUTABLE go PATHS ENV GOROOT GOPATH PATH_SUFFIXES bin)
1517
if(GO_EXECUTABLE)
16-
if(NOT CMAKE_CROSSCOMPILING AND WIN32 AND DEFINED ENV{MSYSTEM})
17-
if(NOT GO_ROOT)
18-
if($ENV{MSYSTEM} STREQUAL "MINGW32")
19-
set(GO_ROOT "/mingw32/lib/go")
20-
elseif($ENV{MSYSTEM} STREQUAL "MINGW64")
21-
set(GO_ROOT "/mingw64/lib/go")
22-
else()
23-
message(FATAL_ERROR "Currently unsuppored environment. CMake willl exit now.")
24-
endif()
25-
endif()
26-
else()
27-
if (DEFINED ENV{GOROOT})
28-
set(GO_ROOT "$ENV{GOROOT}")
29-
else()
30-
set(GO_ROOT "/usr/lib/go")
31-
endif()
32-
endif()
33-
execute_process(COMMAND sh -c "${GO_EXECUTABLE} version" OUTPUT_VARIABLE GO_VERSION_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE)
34-
if(GO_VERSION_OUTPUT MATCHES "go([0-9]+\\.[0-9]+\\.?[0-9]*)[a-zA-Z0-9]* ([^/]+)/(.*)")
18+
execute_process(COMMAND ${GO_EXECUTABLE} version OUTPUT_VARIABLE GO_VERSION_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE)
19+
if(GO_VERSION_OUTPUT MATCHES "go version go([0-9]+\\.[0-9]+\\.?[0-9]*)[a-zA-Z0-9]* ([^/]+)/(.*)")
3520
set(GO_VERSION ${CMAKE_MATCH_1})
3621
set(GO_PLATFORM ${CMAKE_MATCH_2})
3722
set(GO_ARCH ${CMAKE_MATCH_3})
23+
string(REGEX MATCH "([0-9]+\\.[0-9]+)" GO_LANG_VERSION ${GO_VERSION})
3824
elseif(GO_VERSION_OUTPUT MATCHES "go version devel .* ([^/]+)/(.*)$")
3925
set(GO_VERSION "99-devel")
26+
set(GO_LANG_VERSION, "99-devel")
4027
set(GO_PLATFORM ${CMAKE_MATCH_1})
4128
set(GO_ARCH ${CMAKE_MATCH_2})
4229
message("WARNING: Development version of Go being used, can't determine compatibility.")
4330
endif()
31+
get_filename_component(path ${GO_EXECUTABLE} DIRECTORY)
32+
set(GOFMT_EXECUTABLE ${path}/gofmt${CMAKE_EXECUTABLE_SUFFIX})
4433
endif()
4534
mark_as_advanced(GO_EXECUTABLE)
4635

4736
include(FindPackageHandleStandardArgs)
48-
find_package_handle_standard_args(Go REQUIRED_VARS GO_EXECUTABLE GO_VERSION GO_PLATFORM GO_ARCH VERSION_VAR GO_VERSION)
37+
find_package_handle_standard_args(Go REQUIRED_VARS GO_EXECUTABLE GOFMT_EXECUTABLE GO_PLATFORM GO_ARCH GO_VERSION GO_LANG_VERSION VERSION_VAR GO_VERSION)

cmake/pre-push

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/bin/bash
2+
# To use, store as .git/hooks/pre-push inside your repository and make sure
3+
# it has execute permissions.
4+
5+
# run security/vulnerabilities scanner prior to pushing to repo
6+
7+
cd @PROJECT_SOURCE_DIR@
8+
# Check if we actually have commits to push
9+
commits=`git log @{u}..`
10+
if [ -z "$commits" ]; then
11+
exit 0
12+
fi
13+
14+
scanner=trivy
15+
16+
echo "==== running vulnerabilities scanner (${scanner}) from $0"
17+
echo " to accept risks create a .trivyignore file in repo's root"
18+
echo " See https://github.com/aquasecurity/trivy/blob/main/docs/docs/vulnerability/examples/filter.md#by-vulnerability-ids"
19+
echo
20+
21+
# detect if "trivy" is installed
22+
which ${scanner} > /dev/null
23+
if [[ $? != 0 ]]; then
24+
echo "to install ${scanner} follow instructions on https://github.com/aquasecurity/trivy/blob/main/docs/getting-started/installation.md#debianubuntu"
25+
exit 1
26+
fi
27+
28+
# without the --exit-code 1 flag - trivy always exists with 0
29+
${scanner} --exit-code 1 fs --ignore-unfixed .

cmake/scoophash.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/bash
2+
3+
if [ "${1}" = "win32" ] || [ "${1}" = "win64" ]; then
4+
5+
hash=`sha256sum -z wsl-ssh-agent.zip | awk '{ print $1; }'`
6+
sed -i -e "s/__CURRENT_HASH_${1}__/${hash}/g" wsl-ssh-agent.json
7+
8+
fi

cmake/sign.sh

Lines changed: 0 additions & 4 deletions
This file was deleted.

cmake/version.go.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package misc
22

3+
func GetMagic() []byte {
4+
return []byte{'g', 'c', 'l', 'p', 'r', @PRJ_VERSION_Major@, @PRJ_VERSION_Minor@, @PRJ_VERSION_Patch@}
5+
}
6+
37
func GetVersion() string {
48
return "@PRJ_VERSION_Major@.@PRJ_VERSION_Minor@.@PRJ_VERSION_Patch@"
59
}

0 commit comments

Comments
 (0)