From 476726e162b51e7fa4395155f75c6f2921f326c7 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Tue, 25 Jun 2024 16:22:30 +0900 Subject: [PATCH] Set up build lib for Debian x86_64 action/workflow --- .forgejo/workflows/release-and-assets.yml | 114 +++++++++++++++++++++- 1 file changed, 111 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/release-and-assets.yml b/.forgejo/workflows/release-and-assets.yml index 49e6307..0423fb4 100644 --- a/.forgejo/workflows/release-and-assets.yml +++ b/.forgejo/workflows/release-and-assets.yml @@ -23,7 +23,8 @@ jobs: -H 'Content-Type: application/json' \ -d "{ \"name\": \"3d_collision_helpers version ${GITHUB_REF_NAME}\", - \"tag_name\": \"${GITHUB_REF_NAME}\" + \"tag_name\": \"${GITHUB_REF_NAME}\", + \"body\": \" SHA256SUMS\" }" >&/dev/null assets-release-x86_64: @@ -74,7 +75,7 @@ jobs: -H 'Content-Type: application/json' \ -d "{ \"body\":\"$(jq .body < current_release_info.json | sed -e 's/^"//' -e 's/"$//') - SHA256SUM $(find "$THE_CURRENT_WORKING_DIRECTORY" -maxdepth 1 -name "*$SHARED_LIB_ASSET_NAME" -execdir sha256sum '{}' ';')\" + $(find "$THE_CURRENT_WORKING_DIRECTORY" -maxdepth 1 -name "*$SHARED_LIB_ASSET_NAME" -execdir sha256sum '{}' ';' | sed -e 's|\./3d_collision|3d_collision|')\" }" >&/dev/null curl --fail-with-body -X POST \ "https://git.seodisparate.com/api/v1/repos/stephenseo/3d_collision_helpers/releases/$(jq .id < $THE_CURRENT_WORKING_DIRECTORY/release_info.json)/assets" \ @@ -104,7 +105,7 @@ jobs: -H 'Content-Type: application/json' \ -d "{ \"body\":\"$(jq .body < current_release_info.json | sed -e 's/^"//' -e 's/"$//') - SHA256SUM $(find "$THE_CURRENT_WORKING_DIRECTORY" -maxdepth 1 -name "*$STATIC_LIB_ASSET_NAME" -execdir sha256sum '{}' ';')\" + $(find "$THE_CURRENT_WORKING_DIRECTORY" -maxdepth 1 -name "*$STATIC_LIB_ASSET_NAME" -execdir sha256sum '{}' ';' | sed -e 's|\./3d_collision|3d_collision|')\" }" >&/dev/null curl --fail-with-body -X POST \ "https://git.seodisparate.com/api/v1/repos/stephenseo/3d_collision_helpers/releases/$(jq .id < $THE_CURRENT_WORKING_DIRECTORY/release_info.json)/assets" \ @@ -113,3 +114,110 @@ jobs: -H 'Content-Type: multipart/form-data' \ -F "attachment=@${THE_CURRENT_WORKING_DIRECTORY}/$STATIC_LIB_ASSET_NAME;type=application/zstd" > client_attach.json fi + + assets-release-x86_64-debian: + needs: assets-release-x86_64 + if: ${{ always() }} + runs-on: docker_debian_bookworm + env: + SHARED_LIB_ASSET_NAME: "3d_collision_helpers_${{ github.ref_name }}_debian_shared.tar.zst" + STATIC_LIB_ASSET_NAME: "3d_collision_helpers_${{ github.ref_name }}_debian_static.tar.zst" + steps: + - name: Update and upgrade with apt + run: apt-get --yes update && apt-get --yes upgrade + - name: Get necessary packages + run: apt-get --yes install gcc g++ jq curl cmake make zstd sed git + - name: Get release info + run: | + curl -X GET \ + "https://git.seodisparate.com/api/v1/repos/stephenseo/3d_collision_helpers/releases/tags/${GITHUB_REF_NAME}" \ + -H 'accept: application/json' -o release_info.json + - name: Check if asset exists + run: | + for asset in $(jq '.assets[].name' < release_info.json | tr -d '"'); do + if [[ "$asset" == "$SHARED_LIB_ASSET_NAME" ]]; then + touch shared_lib_exists + elif [[ "$asset" == "$STATIC_LIB_ASSET_NAME" ]]; then + touch static_lib_exists + fi + done + - name: Build shared if asset does not exist + run: | + if ! [[ -e shared_lib_exists ]]; then + if ! [[ -d 3dch_cloned ]]; then + git clone --depth=1 --no-single-branch https://git.seodisparate.com/stephenseo/3d_collision_helpers.git 3dch_cloned + fi + pushd 3dch_cloned >&/dev/null && git restore . && git checkout "${GITHUB_REF_NAME}" && popd >&/dev/null + # Debian's gcc doesn't know about "-fstrict-flex-arrays=3". + sed -i -e 's/-fstrict-flex-arrays=3//g' 3dch_cloned/CMakeLists.txt + cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=On -DCMAKE_INSTALL_PREFIX=/usr -S 3dch_cloned -B buildReleaseShared + make -C buildReleaseShared + make DESTDIR=$(pwd)/sharedOut -C buildReleaseShared install + + pushd sharedOut >&/dev/null + + tar --sort=name -I'zstd --compress -T0 --ultra -20' -cf "$SHARED_LIB_ASSET_NAME" usr + + popd >&/dev/null + + curl -X GET \ + "https://git.seodisparate.com/api/v1/repos/stephenseo/3d_collision_helpers/releases/tags/${GITHUB_REF_NAME}" \ + -H 'accept: application/json' -o release_info_latest.json + + curl --fail-with-body -X PATCH \ + "https://git.seodisparate.com/api/v1/repos/stephenseo/3d_collision_helpers/releases/$(jq .id < release_info_latest.json)" \ + -H 'accept: application/json' \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -H 'Content-Type: application/json' \ + -d "{ + \"body\": \"$(jq .body < release_info_latest.json | sed -e 's/^"//' -e 's/"$//') + $(cd sharedOut && sha256sum "$SHARED_LIB_ASSET_NAME")\" + "} >&/dev/null + + curl --fail-with-body -X POST \ + "https://git.seodisparate.com/api/v1/repos/stephenseo/3d_collision_helpers/releases/$(jq .id < release_info_latest.json)/assets" \ + -H 'accept: application/json' \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -H 'Content-Type: multipart/form-data' \ + -F "attachment=@sharedOut/${SHARED_LIB_ASSET_NAME};type=application/zstd" >&/dev/null + fi + - name: Build static if asset does not exist + run: | + if ! [[ -e static_lib_exists ]]; then + if ! [[ -d 3dch_cloned ]]; then + git clone --depth=1 --no-single-branch https://git.seodisparate.com/stephenseo/3d_collision_helpers.git 3dch_cloned + fi + pushd 3dch_cloned >&/dev/null && git restore . && git checkout "${GITHUB_REF_NAME}" && popd >&/dev/null + # Debian's gcc doesn't know about "-fstrict-flex-arrays=3". + sed -i -e 's/-fstrict-flex-arrays=3//g' 3dch_cloned/CMakeLists.txt + cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=Off -DCMAKE_INSTALL_PREFIX=/usr -S 3dch_cloned -B buildReleaseStatic + make -C buildReleaseStatic + make DESTDIR=$(pwd)/staticOut -C buildReleaseStatic install + + pushd staticOut >&/dev/null + + tar --sort=name -I'zstd --compress -T0 --ultra -20' -cf "$STATIC_LIB_ASSET_NAME" usr + + popd >&/dev/null + + curl -X GET \ + "https://git.seodisparate.com/api/v1/repos/stephenseo/3d_collision_helpers/releases/tags/${GITHUB_REF_NAME}" \ + -H 'accept: application/json' -o release_info_latest.json + + curl --fail-with-body -X PATCH \ + "https://git.seodisparate.com/api/v1/repos/stephenseo/3d_collision_helpers/releases/$(jq .id < release_info_latest.json)" \ + -H 'accept: application/json' \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -H 'Content-Type: application/json' \ + -d "{ + \"body\": \"$(jq .body < release_info_latest.json | sed -e 's/^"//' -e 's/"$//') + $(cd staticOut && sha256sum "$STATIC_LIB_ASSET_NAME")\" + "} >&/dev/null + + curl --fail-with-body -X POST \ + "https://git.seodisparate.com/api/v1/repos/stephenseo/3d_collision_helpers/releases/$(jq .id < release_info_latest.json)/assets" \ + -H 'accept: application/json' \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -H 'Content-Type: multipart/form-data' \ + -F "attachment=@staticOut/${STATIC_LIB_ASSET_NAME};type=application/zstd" >&/dev/null + fi