2.0.0-rc (#9)
Some checks failed
BlockStorage/repertory_osx/pipeline/head This commit looks good
BlockStorage/repertory_windows/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory_linux_builds/pipeline/head This commit looks good
BlockStorage/repertory_osx_builds/pipeline/head There was a failure building this commit

### Issues

* \#1 \[bug\] Unable to mount S3 due to 'item_not_found' exception
* \#2 Require bucket name for S3 mounts
* \#3 \[bug\] File size is not being updated in S3 mount
* \#4 Upgrade to libfuse-3.x.x
* \#5 Switch to renterd for Sia support
* \#6 Switch to cpp-httplib to further reduce dependencies
* \#7 Remove global_data and calculate used disk space per provider
* \#8 Switch to libcurl for S3 mount support

### Changes from v1.x.x

* Added read-only encrypt provider
  * Pass-through mount point that transparently encrypts source data using `XChaCha20-Poly1305`
* Added S3 encryption support via `XChaCha20-Poly1305`
* Added replay protection to remote mounts
* Added support base64 writes in remote FUSE
* Created static linked Linux binaries for `amd64` and `aarch64` using `musl-libc`
* Removed legacy Sia renter support
* Removed Skynet support
* Fixed multiple remote mount WinFSP API issues on \*NIX servers
* Implemented chunked read and write
  * Writes for non-cached files are performed in chunks of 8Mib
* Removed `repertory-ui` support
* Removed `FreeBSD` support
* Switched to `libsodium` over `CryptoPP`
* Switched to `XChaCha20-Poly1305` for remote mounts
* Updated `GoogleTest` to v1.14.0
* Updated `JSON for Modern C++` to v3.11.2
* Updated `OpenSSL` to v1.1.1w
* Updated `RocksDB` to v8.5.3
* Updated `WinFSP` to 2023
* Updated `boost` to v1.78.0
* Updated `cURL` to v8.3.0
* Updated `zlib` to v1.3
* Use `upload_manager` for all providers
  * Adds a delay to uploads to prevent excessive API calls
  * Supports re-upload after mount restart for incomplete uploads
  * NOTE: Uploads for all providers are full file (no resume support)
    * Multipart upload support is planned for S3

Reviewed-on: #9
This commit is contained in:
2023-10-29 06:55:59 +00:00
parent 3ff46723b8
commit f43c41f88a
839 changed files with 98214 additions and 92959 deletions

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
build_win.cmd Debug 1 0 0 0 0 0
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
build_win.cmd Debug 1 0 0 0 0 0 "" 1
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
build_win.cmd Release 1 0 0 0 0 0
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
build_win.cmd Release 1 0 0 0 0 0 "" 1
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
call build_win.cmd Debug 1 1 0 0 0 0
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
call build_win.cmd Release 1 1 0 0 0 0
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
call build_win.cmd Release 1 1 0 0 0 1 %1
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
call build_win.cmd Release 1 1 1 0 0 0
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
call build_win.cmd Release 1 1 0 0 0 1 %1 0 1
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
build_win.cmd Debug 0 0 0 0 0
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
build_win.cmd Debug 0 0 0 0 0 "" 1
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
build_win.cmd Release 0 0 0 0 0
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
call build_win.cmd Debug 1 0 0 0 0
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
call build_win.cmd Release 1 0 0 0 0
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
call build_win.cmd Release 1 0 0 0 1 %1
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
call build_win.cmd Release 1 1 0 0 0
popd

View File

@ -1,5 +0,0 @@
@echo off
pushd "%~dp0%.."
call build_win.cmd Release 1 0 0 0 1 %1 0 1
popd

View File

@ -1,31 +0,0 @@
#!/bin/bash
echo -1 > /proc/sys/fs/binfmt_misc/qemu-aarch64 || true
echo ':qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:OCF' > /proc/sys/fs/binfmt_misc/register
cd "$1"
branch=${2#"origin/"}
ln -sf "src/arm64" .
ln -sf "src/docker" .
ln -sf "src/compile_tag.sh" .
ln -sf "src/detect_linux_build.sh" .
ln -sf "src/run_builds.sh" .
ln -sf "src/run_arm64_shell.sh" .
ln -sf "src/run_docker_shell.sh" .
chmod +x *.sh
if ./run_builds.sh "$branch" "$3"; then
rm -f tag_builds/*.zip
rm -f tag_builds/*.b64
rm -f tag_builds/*.sha256
rm -f tag_builds/*.sig
rm -f tag_builds/*.status
cd tag_builds/solus/$branch
./unittests || exit -1
exit 0
else
exit -1
fi

View File

@ -1,175 +0,0 @@
@echo off
setlocal EnableDelayedExpansion
set ROOT=%~dp0%\..
pushd "%ROOT%"
set ROOT=%CD%
set PATH=%ROOT%\bin;%ROOT%\bin\curl\bin;%PATH%
set CMAKE=cmake
set VS_CMAKE_GENERATOR=Visual Studio 16 2019
set TARGET_MODE=%1
set /a ENABLE_PACKAGING=%2
set /a DISABLE_TESTING=%3
set /a DISABLE_PAUSE=%4
shift
set REPOSITORY=repertory
set ERROR_EXIT=0
set OPENSSL_BIN="c:\OpenSSL-%BUILD_ARCH%\bin\openssl.exe"
set REPERTORY_OPENSSL_ROOT="c:\OpenSSL-%BUILD_ARCH%"
set BUILD_ARCH=Win64
set BUILD_ARCH_LOWER=win64
set MSBUILD_ARCH=x64
set WINFSP_BASE_NAME=winfsp-x64
if NOT EXIST %OPENSSL_BIN% (
set OPENSSL_BIN="c:\Program Files\OpenSSL-!BUILD_ARCH!\bin\openssl.exe"
set REPERTORY_OPENSSL_ROOT="c:\Program Files\OpenSSL-!BUILD_ARCH!"
)
set PRIVATE_KEY="c:\src\cert\blockstorage_dev_private.pem"
set PUBLIC_KEY="%ROOT%\blockstorage_dev_public.pem"
if "%TARGET_MODE%" NEQ "Debug" (
if "%TARGET_MODE%" NEQ "Release" (
call :ERROR "[Debug|Release] not specified"
)
)
if "%APPVEYOR_BUILD%" == "1" (
set CMAKE_OPTS=-DOPENSSL_ROOT_DIR=C:\OpenSSL-v111-!BUILD_ARCH!
) else (
set CMAKE_OPTS=-DOPENSSL_ROOT_DIR=!REPERTORY_OPENSSL_ROOT!
)
if "%DISABLE_SIGNING%" == "1" (
set CMAKE_OPTS=%CMAKE_OPTS% -DENABLE_SIGNING=OFF
) else (
if "%USERNAME%" == "sgraves" (
set CMAKE_OPTS=%CMAKE_OPTS% -DENABLE_SIGNING=ON
)
if "%USERNAME%" == "scott" (
set CMAKE_OPTS=%CMAKE_OPTS% -DENABLE_SIGNING=ON
)
if "%USERNAME%" == "Scott Graves" (
set CMAKE_OPTS=%CMAKE_OPTS% -DENABLE_SIGNING=ON
)
)
set BUILD_DIR=build%OUTPUT_DIR_EXTRA%
for /F "tokens=*" %%f in ('git rev-parse --short HEAD') do (set GIT_REV=%%f)
mkdir "%BUILD_DIR%" >NUL 2>&1
mkdir "%BUILD_DIR%\%TARGET_MODE%" >NUL 2>&1
pushd "%BUILD_DIR%\%TARGET_MODE%" >NUL 2>&1
echo Building [%TARGET_MODE%] [%BUILD_ARCH%]
((%CMAKE% "%ROOT%" %CMAKE_OPTS% -A %MSBUILD_ARCH% -DCMAKE_BUILD_TYPE=%TARGET_MODE% -DCMAKE_GENERATOR="%VS_CMAKE_GENERATOR%" -DCMAKE_CONFIGURATION_TYPES="%TARGET_MODE%" && (%CMAKE% --build . --config %TARGET_MODE%)) || (
popd
call :ERROR "Compile Error"
)
for /f "tokens=*" %%i in ('grep -m1 -a REPERTORY_VERSION repertory.vcxproj ^| sed -e "s/.*REPERTORY_VERSION=\"//g" -e "s/\".*//g"') do (
set APP_VER=%%i
)
for /f "tokens=2 delims=-" %%a in ("%APP_VER%") do (
set APP_RELEASE_TYPE=%%a
)
for /f "tokens=1 delims=." %%a in ("%APP_RELEASE_TYPE%") do (
set APP_RELEASE_TYPE=%%a
)
if "%APP_RELEASE_TYPE%"=="alpha" set APP_RELEASE_TYPE=Alpha
if "%APP_RELEASE_TYPE%"=="beta" set APP_RELEASE_TYPE=Beta
if "%APP_RELEASE_TYPE%"=="rc" set APP_RELEASE_TYPE=RC
if "%APP_RELEASE_TYPE%"=="release" set APP_RELEASE_TYPE=Release
echo Repertory Version: %APP_VER%
set TARGET_MODE_LOWER=%TARGET_MODE%
call :LOWERCASE TARGET_MODE_LOWER
set OUT_NAME=repertory_%APP_VER%_%GIT_REV%_!TARGET_MODE_LOWER!_%BUILD_ARCH_LOWER%.zip
set OUT_FILE=..\..\%OUT_NAME%
pushd %TARGET_MODE%
if "%DISABLE_TESTING%" NEQ "1" (
echo Testing [%TARGET_MODE%]
del /q unittests.err 1>NUL 2>&1
start "Unittests" /wait /min cmd /v:on /c "unittests.exe>unittests.log 2>&1 || echo ^!errorlevel^!>unittests.err"
if EXIST unittests.err (
call :ERROR "Unittests Failed"
)
)
if "%APPVEYOR_BUILD%" NEQ "1" (
echo Signing Application
del /q repertory.exe.sha256 1>NUL 2>&1
del /q repertory.exe.sig 1>NUL 2>&1
((certutil -hashfile repertory.exe SHA256 | sed -e "1d" -e "$d" -e "s/\ //g") > repertory.exe.sha256) || (call :ERROR "Create repertory sha-256 failed")
(%OPENSSL_BIN% dgst -sha256 -sign "%PRIVATE_KEY%" -out repertory.exe.sig repertory.exe) || (call :ERROR "Create repertory signature failed")
(%OPENSSL_BIN% dgst -sha256 -verify "%PUBLIC_KEY%" -signature repertory.exe.sig repertory.exe) || (call :ERROR "Verify repertory signature failed")
)
if "%ENABLE_PACKAGING%"=="1" (
echo Creating Archive [%OUT_FILE%]
(7za u "%OUT_FILE%" repertory.exe repertory.exe.sha256 repertory.exe.sig %WINFSP_BASE_NAME%.dll cacert.pem) || (call :ERROR "Create repertory zip failed")
echo Signing Archive [%OUT_FILE%]
(certutil -hashfile "%OUT_FILE%" SHA256 | sed -e "1d" -e "$d" -e "s/\ //g" > "%OUT_FILE%.sha256") || (call :ERROR "Create zip sha-256 failed")
(%OPENSSL_BIN% dgst -sha256 -sign "%PRIVATE_KEY%" -out "%OUT_FILE%.sig" "%OUT_FILE%") || (call :ERROR "Create zip signature failed")
(%OPENSSL_BIN% dgst -sha256 -verify "%PUBLIC_KEY%" -signature "%OUT_FILE%.sig" "%OUT_FILE%") || (call :ERROR "Verify zip signature failed")
(b64.exe -e "%OUT_FILE%.sig" "%OUT_FILE%.sig.b64") || (call :ERROR "Create zip base64 signature failed")
for /f "delims=" %%i in ('type %OUT_FILE%.sig.b64') do set APP_SIG=!APP_SIG!%%i
for /f "delims=" %%i in ('type %OUT_FILE%.sha256') do set APP_SHA256=!APP_SHA256!%%i
)
popd
popd
goto :END
:ERROR
echo %1
set ERROR_EXIT=1
if "%DISABLE_PAUSE%" NEQ "1" (
pause
)
goto :END
:NO_QUOTES
set %~1=!%~1:"=!
goto :EOF
:LOWERCASE
set %~1=!%~1:A=a!
set %~1=!%~1:B=b!
set %~1=!%~1:C=c!
set %~1=!%~1:D=d!
set %~1=!%~1:E=e!
set %~1=!%~1:F=f!
set %~1=!%~1:G=g!
set %~1=!%~1:H=h!
set %~1=!%~1:I=i!
set %~1=!%~1:J=j!
set %~1=!%~1:K=k!
set %~1=!%~1:L=l!
set %~1=!%~1:M=m!
set %~1=!%~1:N=n!
set %~1=!%~1:O=o!
set %~1=!%~1:P=p!
set %~1=!%~1:Q=q!
set %~1=!%~1:R=r!
set %~1=!%~1:S=s!
set %~1=!%~1:T=t!
set %~1=!%~1:U=u!
set %~1=!%~1:V=v!
set %~1=!%~1:W=w!
set %~1=!%~1:X=x!
set %~1=!%~1:Y=y!
set %~1=!%~1:Z=z!
goto :EOF
:END
popd
if "!ERROR_EXIT!" NEQ "0" (
exit !ERROR_EXIT!
)

30
scripts/create_containers.sh Executable file
View File

@ -0,0 +1,30 @@
#!/bin/bash
pushd "$(dirname "$0")"
CURRENT_DIR=$(pwd)
pushd "${CURRENT_DIR}/.."
function create_containers() {
TYPE=$1
for FILE in ./docker/${TYPE}/*; do
DISTRONAME=$(basename ${FILE})
CONTAINER_NAME=repertory_${DISTRONAME}
TAG_NAME=repertory:${DISTRONAME}
echo Creating Container [${CONTAINER_NAME}]
docker stop ${CONTAINER_NAME}
docker rm ${CONTAINER_NAME}
docker build -t ${TAG_NAME} - < docker/${TYPE}/${DISTRONAME}
docker stop ${CONTAINER_NAME}
docker rm ${CONTAINER_NAME}
done
}
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
create_containers aarch64
create_containers 64_bit
popd
popd

View File

@ -1,9 +0,0 @@
@echo off
call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat"
md ..\build2\debug
pushd "..\build2\debug"
(cmake ..\.. -G "CodeBlocks - NMake Makefiles" -DREPERTORY_ENABLE_SKYNET_PREMIUM_TESTS=ON -DREPERTORY_ENABLE_S3_TESTING=ON -DREPERTORY_ENABLE_S3=ON -DCMAKE_BUILD_TYPE=Debug -DREPERTORY_WRITE_SUPPORT=ON && nmake) || exit 1
copy /y compile_commands.json ..
popd

View File

@ -1,14 +0,0 @@
#!/bin/bash
mkdir -p ../build/debug;cd ../build/debug && cmake ../.. -DREPERTORY_ENABLE_SKYNET=ON \
-DREPERTORY_ENABLE_S3=ON \
-DREPERTORY_ENABLE_SKYNET_PREMIUM_TESTS=ON \
-DREPERTORY_ENABLE_S3_TESTING=ON \
-DCMAKE_BUILD_TYPE=Debug \
-DREPERTORY_WRITE_SUPPORT=ON && make -j10 || exit 1
cd ..
ln -sf debug/repertory .
ln -sf debug/unittests .
ln -sf debug/compile_commands.json .

5
scripts/make_mingw64.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
pushd "$(dirname "$0")/.."
scripts/make_unix_docker.sh ${1} "${2}" 1
popd

115
scripts/make_package.cmd Normal file
View File

@ -0,0 +1,115 @@
@echo off
setlocal
setlocal enabledelayedexpansion
set SIGNING_FOLDER=%1
set BINARY_FOLDER=%2
set SOURCE_FOLDER=%3
set OUTPUT_FOLDER=%4
set PATH=%~dp0%..\bin;!PATH!
if "%SIGNING_FOLDER%" == "" (
call :EXIT_SCRIPT "'SIGNING_FOLDER' is not set (arg1)"
)
if "%BINARY_FOLDER%" == "" (
call :EXIT_SCRIPT "'BINARY_FOLDER' is not set (arg2)"
)
if "%SOURCE_FOLDER%" == "" (
call :EXIT_SCRIPT "'SOURCE_FOLDER' is not set (arg3)"
)
if "%OUTPUT_FOLDER%" == "" (
call :EXIT_SCRIPT "'OUTPUT_FOLDER' is not set (arg4)"
)
call :NORMALIZE "%SIGNING_FOLDER%"
set SIGNING_FOLDER=%RETVAL%
call :NORMALIZE "%BINARY_FOLDER%"
set BINARY_FOLDER=%RETVAL%
call :NORMALIZE "%SOURCE_FOLDER%"
set SOURCE_FOLDER=%RETVAL%
set BUILD_ARCH=Win64
set OPENSSL_BIN="c:\OpenSSL-%BUILD_ARCH%\bin\openssl.exe"
if NOT EXIST %OPENSSL_BIN% (
set OPENSSL_BIN="c:\Program Files\OpenSSL-%BUILD_ARCH%\bin\openssl.exe"
set REPERTORY_OPENSSL_ROOT="c:\Program Files\OpenSSL-%BUILD_ARCH%"
)
pushd "%SOURCE_FOLDER%"
for /F "tokens=*" %%f in ('git rev-parse --short HEAD') do (set GIT_REV=%%f)
for /F "tokens=*" %%f in ('git branch --show-current') do (set GIT_BRANCH=%%f)
for /F "tokens=*" %%f in ('grep set(REPERTORY_MAJOR .\CMakeLists.txt ^| sed "s/)//g" ^| awk "{print $2}"') do (set REPERTORY_VERSION=%%f)
for /F "tokens=*" %%f in ('grep set(REPERTORY_MINOR .\CMakeLists.txt ^| sed "s/)//g" ^| awk "{print $2}"') do (set REPERTORY_VERSION=%REPERTORY_VERSION%.%%f)
for /F "tokens=*" %%f in ('grep set(REPERTORY_REV .\CMakeLists.txt ^| sed "s/)//g" ^| awk "{print $2}"') do (set REPERTORY_VERSION=%REPERTORY_VERSION%.%%f)
for /F "tokens=*" %%f in ('grep set(REPERTORY_RELEASE_ITER .\CMakeLists.txt ^| sed "s/)//g" ^| awk "{print $2}"') do (set REPERTORY_VERSION=%REPERTORY_VERSION%-%%f)
popd
if "%GIT_BRANCH%" == "development" (
set RELEASE_FOLDER=nightly
) else (
set RELEASE_FOLDER=%REPERTORY_RELEASE_ITER%
)
call :NORMALIZE "%OUTPUT_FOLDER%\!RELEASE_FOLDER!"
set OUTPUT_FOLDER=%RETVAL%
set OUT_FILE=repertory_%REPERTORY_VERSION%_%GIT_REV%_windows_amd64.zip
set OUT_ZIP=%BINARY_FOLDER%\%OUT_FILE%
set FILE_LIST=repertory.exe repertory.exe.sha256 repertory.exe.sig winfsp-x64.dll winfsp-x64.dll.sha256 winfsp-x64.dll.sig cacert.pem cacert.pem.sha256 cacert.pem.sig
pushd "%BINARY_FOLDER%"
call :CLEANUP
call :CREATE_HASH "%BINARY_FOLDER%\repertory.exe"
call :CREATE_HASH "%BINARY_FOLDER%\winfsp-x64.dll"
call :CREATE_HASH "%BINARY_FOLDER%\cacert.pem"
(7za u "%OUT_FILE%" %FILE_LIST%) || (7z u "%OUT_FILE%" %FILE_LIST%) || (call :EXIT_SCRIPT "Create repertory zip failed")
call :CREATE_HASH "%OUT_FILE%"
copy /y "%OUT_ZIP%" "%OUTPUT_FOLDER%" || call :EXIT_SCRIPT "Copy %OUT_ZIP% to %OUTPUT_FOLDER% failed"
copy /y "%OUT_ZIP%.sha256" "%OUTPUT_FOLDER%" || call :EXIT_SCRIPT "Copy %OUT_ZIP%.sha256 to %OUTPUT_FOLDER% failed"
copy /y "%OUT_ZIP%.sig" "%OUTPUT_FOLDER%" || call :EXIT_SCRIPT "Copy %OUT_ZIP%.sig to %OUTPUT_FOLDER% failed"
call :CLEANUP
popd
goto :END
:CREATE_HASH
call :NORMALIZE %1
set HASH_FILE=%RETVAL%
(%OPENSSL_BIN% dgst -sha256 -sign "%SIGNING_FOLDER%\blockstorage_dev_private.pem" -out "%HASH_FILE%.sig" "%HASH_FILE%") || (call :EXIT_SCRIPT "Create %HASH_FILE% signature failed")
(%OPENSSL_BIN% dgst -sha256 -verify "%SIGNING_FOLDER%\blockstorage_dev_public.pem" -signature "%HASH_FILE%.sig" "%HASH_FILE%") || (call :EXIT_SCRIPT "Verify %HASH_FILE% signature failed")
((certutil -hashfile "%HASH_FILE%" SHA256 | sed -e "1d" -e "$d" -e "s/\ //g") > "%HASH_FILE%.sha256") || (call :EXIT_SCRIPT "Create %HASH_FILE% sha-256 failed")
EXIT /B
:CLEANUP
del /q "%OUT_ZIP%" 1>NUL 2>&1
del /q "%OUT_ZIP%.sha256" 1>NUL 2>&1
del /q "%OUT_ZIP%.sig" 1>NUL 2>&1
del /q "%BINARY_FOLDER%\cacert.pem.sha256" 1>NUL 2>&1
del /q "%BINARY_FOLDER%\cacert.pem.sig" 1>NUL 2>&1
del /q "%BINARY_FOLDER%\repertory.exe.sha256" 1>NUL 2>&1
del /q "%BINARY_FOLDER%\repertory.exe.sig" 1>NUL 2>&1
del /q "%BINARY_FOLDER%\winfsp-x64.dll.sha256" 1>NUL 2>&1
del /q "%BINARY_FOLDER%\winfsp-x64.dll.sig" 1>NUL 2>&1
EXIT /B
:NORMALIZE
SET RETVAL=%~f1
exit /B
:EXIT_SCRIPT
echo %1
exit 1
:END
echo Done

127
scripts/make_package.sh Executable file
View File

@ -0,0 +1,127 @@
#!/bin/bash
PLATFORM_NAME=$1
SIGNING_FOLDER=$2
BINARY_FOLDER=$3
SOURCE_FOLDER=$4
OUTPUT_FOLDER=$5
ARM64=$6
LINUX_PLATFORM=alpine
exit_script() {
echo "$1"
cd "${CURRENT_DIR}"
exit 1
}
if [ -z "${PLATFORM_NAME}" ]; then
exit_script "'PLATFORM_NAME' is not set (arg1)"
fi
if [ -z "${SIGNING_FOLDER}" ]; then
exit_script "'SIGNING_FOLDER' is not set (arg2)"
fi
if [ -z "${BINARY_FOLDER}" ]; then
exit_script "'BINARY_FOLDER' is not set (arg3)"
fi
if [ -z "${SOURCE_FOLDER}" ]; then
exit_script "'SOURCE_FOLDER' is not set (arg4)"
fi
if [ -z "${OUTPUT_FOLDER}" ]; then
exit_script "'OUTPUT_FOLDER' is not set (arg5)"
fi
if [ "${PLATFORM_NAME}" == "darwin" ]; then
SHA256_EXEC="shasum -a 256 -b"
else
SHA256_EXEC="sha256sum -b"
fi
pushd "${SOURCE_FOLDER}"
BRANCH=$(git branch --show-current)
RELEASE=$(grep set\(REPERTORY_RELEASE_ITER ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
if [ "${BRANCH}" == "master" ] || [ "${BRANCH}" == "alpha" ] || [ "${BRANCH}" == "beta" ] || [ "${BRANCH}" == "rc" ]; then
OUTPUT_FOLDER=${OUTPUT_FOLDER}/${RELEASE}
else
OUTPUT_FOLDER=${OUTPUT_FOLDER}/nightly
fi
GIT_REV=$(git rev-parse --short HEAD)
REPERTORY_VERSION=$(grep set\(REPERTORY_MAJOR ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
REPERTORY_VERSION=${REPERTORY_VERSION}.$(grep set\(REPERTORY_MINOR ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
REPERTORY_VERSION=${REPERTORY_VERSION}.$(grep set\(REPERTORY_REV ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
REPERTORY_VERSION=${REPERTORY_VERSION}-${RELEASE}
popd
REPERTORY_BINARY=repertory
if [ "${ARM64}" == "1" ]; then
if [ "${PLATFORM_NAME}" == "${LINUX_PLATFORM}" ]; then
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_linux_arm64.zip
else
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_${PLATFORM_NAME}_arm64.zip
fi
elif [ "${PLATFORM_NAME}" == "${LINUX_PLATFORM}" ]; then
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_linux_amd64.zip
elif [ "${PLATFORM_NAME}" == "mingw64" ]; then
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_windows_amd64.zip
REPERTORY_BINARY=${REPERTORY_BINARY}.exe
else
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_${PLATFORM_NAME}_amd64.zip
fi
ZIP_FILE_PATH=./${ZIP_FILE_NAME}
create_hash_and_sig() {
${SHA256_EXEC} ./${1} > ${1}.sha256 || exit_script "SHA-256 failed for $1"
openssl dgst -sha256 -sign "${SIGNING_FOLDER}/blockstorage_dev_private.pem" -out ${1}.sig $1 || exit_script "Create signature failed for $1"
openssl dgst -sha256 -verify "${SIGNING_FOLDER}/blockstorage_dev_public.pem" -signature ${1}.sig $1 || exit_script "Verify signature failed for $1"
}
clean_directory() {
rm -f "${ZIP_FILE_PATH}"
rm -f "${ZIP_FILE_PATH}.sha256"
rm -f "${ZIP_FILE_PATH}.sig"
rm -f "cacert.pem.sha256"
rm -f "cacert.pem.sig"
rm -f "${REPERTORY_BINARY}.sha256"
rm -f "${REPERTORY_BINARY}.sig"
if [ "${PLATFORM_NAME}" == "mingw64" ]; then
rm -f "winfsp-x64.dll.sha256"
rm -f "winfsp-x64.dll.sig"
fi
}
pushd "${BINARY_FOLDER}"
clean_directory
strip ./${REPERTORY_BINARY}
create_hash_and_sig ${REPERTORY_BINARY}
create_hash_and_sig cacert.pem
if [ "${PLATFORM_NAME}" == "mingw64" ]; then
create_hash_and_sig winfsp-x64.dll
fi
if [ "${PLATFORM_NAME}" == "mingw64" ]; then
zip "${ZIP_FILE_PATH}" \
${REPERTORY_BINARY} ${REPERTORY_BINARY}.sha256 ${REPERTORY_BINARY}.sig \
winfsp-x64.dll winfsp-x64.dll.sha256 winfsp-x64.dll.sig \
cacert.pem cacert.pem.sha256 cacert.pem.sig || exit_script "Create zip failed"
else
zip "${ZIP_FILE_PATH}" \
${REPERTORY_BINARY} ${REPERTORY_BINARY}.sha256 ${REPERTORY_BINARY}.sig \
cacert.pem cacert.pem.sha256 cacert.pem.sig || exit_script "Create zip failed"
fi
create_hash_and_sig ${ZIP_FILE_NAME}
cp -f "${ZIP_FILE_PATH}" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME} failed"
cp -f "${ZIP_FILE_PATH}.sha256" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME}.sha256 failed"
cp -f "${ZIP_FILE_PATH}.sig" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME}.sig failed"
clean_directory
popd

View File

@ -1,9 +0,0 @@
@echo off
call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat"
md ..\build2\release
pushd "..\build2\release"
(cmake ..\.. -G "CodeBlocks - NMake Makefiles" -DREPERTORY_ENABLE_SKYNET_PREMIUM_TESTS=ON -DREPERTORY_ENABLE_S3_TESTING=ON -DREPERTORY_ENABLE_S3=ON -DCMAKE_BUILD_TYPE=Release -DREPERTORY_WRITE_SUPPORT=ON && nmake) || exit 1
copy /y compile_commands.json ..
popd

View File

@ -1,14 +0,0 @@
#!/bin/bash
mkdir -p ../build/release;cd ../build/release && cmake ../.. -DREPERTORY_ENABLE_SKYNET=ON \
-DREPERTORY_ENABLE_S3=ON \
-DREPERTORY_ENABLE_SKYNET_PREMIUM_TESTS=ON \
-DREPERTORY_ENABLE_S3_TESTING=ON \
-DCMAKE_BUILD_TYPE=Release \
-DREPERTORY_WRITE_SUPPORT=ON && make -j10 || exit 1
cd ..
ln -sf release/repertory .
ln -sf release/unittests .
ln -sf release/compile_commands.json .

View File

@ -1,7 +1,21 @@
#!/bin/bash
BUILD_TYPE=$1
BUILD_CLEAN=$2
BUILD_ARCH=$3
cd "$(dirname "$0")"
SOURCE_DIR=$(dirname "$0")/..
SOURCE_DIR=$(realpath ${SOURCE_DIR})
./make_${BUILD_TYPE}.sh || exit 1
NAME=alpine
if [ -z "${BUILD_ARCH}" ]; then
BUILD_ARCH=64_bit
fi
docker stop repertory_${NAME}
docker rm repertory_${NAME}
docker build -t repertory:${NAME} - < ${SOURCE_DIR}/docker/${BUILD_ARCH}/${NAME} &&
docker run -td -u $(id -u):$(id -g) --device /dev/fuse --cap-add SYS_ADMIN --name repertory_${NAME} --env MY_NUM_JOBS=${MY_NUM_JOBS} -w ${SOURCE_DIR} -v ${SOURCE_DIR}:${SOURCE_DIR}:rw,z repertory:${NAME} &&
docker exec repertory_${NAME} /bin/bash -c "${SOURCE_DIR}/scripts/make_unix_docker.sh ${BUILD_TYPE} ${BUILD_CLEAN}"
docker stop repertory_${NAME}
docker rm repertory_${NAME}

61
scripts/make_unix_docker.sh Executable file
View File

@ -0,0 +1,61 @@
#!/bin/bash
BUILD_TYPE=$1
BUILD_CLEAN=$2
IS_MINGW=$3
if [ "${IS_MINGW}" == "1" ]; then
BUILD_ROOT=build3
else
BUILD_ROOT=build
fi
BUILD_FOLDER=$(echo "${BUILD_TYPE}" | tr '[:upper:]' '[:lower:]')
if [ "${BUILD_FOLDER}" == "release" ]; then
BUILD_TYPE=Release
fi
NUM_JOBS=${MY_NUM_JOBS}
if [[ -z "${NUM_JOBS}" ]]; then
NUM_JOBS=$(getconf _NPROCESSORS_ONLN 2> /dev/null || getconf NPROCESSORS_ONLN 2> /dev/null || echo 1)
if [ "${NUM_JOBS}" -gt "2" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 2)
elif [ "${NUM_JOBS}" -gt "1" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 1)
fi
fi
echo "Job count: ${NUM_JOBS}"
pushd "$(dirname "$0")"
mkdir -p ../${BUILD_ROOT}/${BUILD_FOLDER}
pushd ../${BUILD_ROOT}/${BUILD_FOLDER}
if [ "${IS_MINGW}" == "1" ]; then
TOOLCHAIN=$(realpath ../../cmake/mingw-w64-x86_64.cmake)
EXE_EXT=.exe
CMAKE_ADDITIONAL_OPTS=-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN}
fi
cmake ../.. ${CMAKE_ADDITIONAL_OPTS} \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DREPERTORY_ENABLE_S3=ON \
-DREPERTORY_ENABLE_S3_TESTING=ON || exit 1
if [ "${BUILD_CLEAN}" == "clean" ]; then
make clean
fi
make -j${NUM_JOBS} || exit 1
popd
pushd ../${BUILD_ROOT}
ln -sf ${BUILD_FOLDER}/compile_commands.json .
ln -sf ${BUILD_FOLDER}/repertory${EXE_EXT} .
ln -sf ${BUILD_FOLDER}/unittests${EXE_EXT} .
if [ "${IS_MINGW}" == "1" ]; then
ln -sf ${BUILD_FOLDER}/winfsp-x64.dll .
fi
popd
ln -sf ../3rd_party/cacert.pem ../${BUILD_ROOT}/cacert.pem
popd

View File

@ -1,7 +1,44 @@
@echo off
set BUILD_TYPE=%1
set MSVC_BUILD_TYPE=%1
set BUILD_CLEAN=%2
pushd "%~dp0"
make_%BUILD_TYPE%.cmd || exit 1
if "%MSVC_BUILD_TYPE%" == "" (
echo "Build type not set"
exit 1
)
if "%MSVC_BUILD_TYPE%" == "Debug" (
set BUILD_FOLDER=debug
) else (
if "%MSVC_BUILD_TYPE%" == "Release" (
set BUILD_FOLDER=release
) else (
set BUILD_FOLDER=%MSVC_BUILD_TYPE%
)
set MSVC_BUILD_TYPE=Release
)
if EXIST "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" (
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
) else (
if EXIST "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat" (
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
)
)
pushd "%~dp0%"
md ..\build2\%BUILD_FOLDER%
del /q ..\build2\%BUILD_FOLDER%\librepertory.lib
del /q ..\build2\%BUILD_FOLDER%\repertory.exe
del /q ..\build2\%BUILD_FOLDER%\unittests.exe
pushd "..\build2\%BUILD_FOLDER%"
cmake ..\.. -G "NMake Makefiles" -DREPERTORY_ENABLE_S3_TESTING=ON -DREPERTORY_ENABLE_S3=ON -DCMAKE_BUILD_TYPE=%MSVC_BUILD_TYPE% || exit 1
copy /y compile_commands.json ..
if "%BUILD_CLEAN%" == "clean" (
nmake clean || exit 1
)
nmake || exit 1
popd
popd

25
scripts/run_docker_shell.sh Executable file
View File

@ -0,0 +1,25 @@
#!/bin/bash
pushd "$(dirname "$0")"
CURRENT_DIR=$(pwd)
pushd "${CURRENT_DIR}/.."
NAME=$1
TYPE=$2
if [ -z "$NAME" ]; then
echo "Name not set"
else
if [ -z "${TYPE}" ]; then
TYPE=64_bit
fi
docker stop repertory_${NAME}
docker rm repertory_${NAME}
docker build -t repertory:${NAME} - < docker/${TYPE}/${NAME} &&
docker run -itd --device /dev/fuse --cap-add SYS_ADMIN --name repertory_${NAME} -v $(pwd):/mnt repertory:${NAME} &&
docker exec -it repertory_${NAME} /bin/bash
docker stop repertory_${NAME}
docker rm repertory_${NAME}
fi
popd
popd

11
scripts/setup_msys2.sh Executable file
View File

@ -0,0 +1,11 @@
pacman -Sqyuu --noconfirm &&
pacman -S --noconfirm msys2-keyring &&
pacman -S --noconfirm --needed --disable-download-timeout \
mingw64/mingw-w64-x86_64-cmake \
mingw64/mingw-w64-x86_64-gcc \
mingw64/mingw-w64-x86_64-gdb \
mingw64/mingw-w64-x86_64-make \
mingw64/mingw-w64-x86_64-toolchain \
msys/git \
msys/mercurial \
make