Skip to content

.github/workflows/main.yml #45

.github/workflows/main.yml

.github/workflows/main.yml #45

Workflow file for this run

on:
workflow_dispatch:
jobs:
GetTag:
runs-on: ubuntu-20.04
outputs:
output1: ${{ steps.tag.outputs.thetag }}
output2: ${{ steps.tag.outputs.theid }}
output3: ${{ steps.tag.outputs.gitian }}
steps:
- name: Grab tag from runid (comfy)
id: tag
run: |
get_workflow_runs(){ page=$1 repo=$2 workflow=$3
FOUND_BIN=0
PREPARE=0
DEBUG=https://api.github.com/repos/monero-project/${repo}/actions/runs?page=$page
echo $DEBUG
runs=$(curl \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
https://api.github.com/repos/monero-project/${repo}/actions/runs?page=$page)
for row in $(echo "${runs}" | jq -r '.workflow_runs[] | @base64'); do
_jq() {
echo ${row} | base64 --decode | jq -r ${1}
}
if [[ $(_jq '.path') = ".github/workflows/$workflow" ]]; then
TAG=$(_jq '.head_branch')
#echo $TAG
is_v=${TAG:0:1}
is_p=${TAG:0:9}
IFS='.' read -ra SPLIT <<< "$TAG"
if [[ $is_p == "prepare-v" ]] || [[ $is_v == "v" ]] && [[ ${#SPLIT[@]} -eq 4 ]]; then
RUNID=$(_jq '.id')
FOUND_BIN=1
if [[ $is_p = "prepare-v" ]]; then
echo "BUILD prepare in use"
TAG="${TAG/prepare-v/v}"
PREPARE=1
fi
break
fi
fi
done
if [[ $FOUND_BIN -eq 0 ]]; then
((page+=1))
get_workflow_runs $page $repo $workflow
else
FOUND_BIN=0
fi
}
get_workflow_runs 1 monero-gui build.yml
echo $TAG
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
if [[ $PREPARE = 1 ]]; then
echo "Caution: this is a build-prepare not official release" >> $GITHUB_STEP_SUMMARY
fi
echo "theid=$RUNID" >> "$GITHUB_OUTPUT"
echo "thetag=$TAG" >> "$GITHUB_OUTPUT"
echo "tag: ${TAG}" >> $GITHUB_STEP_SUMMARY
echo "runid: ${RUNID}" >> $GITHUB_STEP_SUMMARY
get_workflow_runs 1 monero gitian.yml
echo "gitian=$RUNID" >> "$GITHUB_OUTPUT"
echo "gitianid: ${RUNID}" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
MakeExeWINE:
runs-on: ubuntu-20.04
needs: GetTag
steps:
- uses: actions/checkout@v4
- name: Set up dependencies
run: |
sudo apt-add-repository -y ppa:ondrej/php
sudo apt-get install ppa-purge
sudo ppa-purge -y ppa:ondrej/php
sudo dpkg --add-architecture i386
sudo apt-get update -qq
sudo apt-get install -yqq wine-stable
- name: "Everything"
run: |
sudo apt-get install -y jq curl
RUN_ID=${{ needs.GetTag.outputs.output2 }}
GH_KEY="${{ secrets.GITHUB_TOKEN }}"
TAG=${{needs.GetTag.outputs.output1}}
GITIAN_ID=${{needs.GetTag.outputs.output3}}
# Download docker-windows-static
download_artifact(){ run_id=$1 repo=$2 get_name=$3 save_as=$4 gh_key=$5
echo https://api.github.com/repos/monero-project/${repo}/actions/runs/${run_id}/artifacts
workflow_run=$(curl \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/monero-project/${repo}/actions/runs/${run_id}/artifacts)
num=0
for artifact_name in $(echo ${workflow_run} | jq -r '.artifacts[].name'); do
if [[ "${artifact_name}" == "${get_name}" ]]; then
URL=$(echo ${workflow_run} | jq -r ".artifacts[${num}].archive_download_url")
TAG=$(echo ${workflow_run} | jq -r ".artifacts[${num}].workflow_run.head_branch")
break
fi
((num+=1))
done
curl \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token ${gh_key}" \
-L -o "${save_as}" \
"${URL}"
echo $URL
}
declare -A innoFiles
innoFiles["Default.isl"]="179da3422d7bbb65bb2052f9c0b370ab66ddd6f24693d90accbd7d7d73d4f1a4"
innoFiles["ISCC.exe"]="0d02e30a6ad432a50eb86f1ecf330147046e671de340bcb43a170fecbd19bf51"
innoFiles["ISCmplr.dll"]="5ea9bb338795bffa33da5581e5fe1c976a561f6dc32105635dcd518fbb5a33b4"
innoFiles["islzma.dll"]="0b2e19e473a47e10578b05a2f3b43ad96603f3ee1e397c06a280c3b7458a76e2"
innoFiles["ISPPBuiltins.iss"]="a7c5a10f4aac60862082985cfdf8bc5e703fa7fb9cfff4e1deb1d9452862057f"
innoFiles["Setup.e32"]="088622096c373250d04e46de5cda072a921a89900c57988bbe52f1e308e48043"
innoFiles["SetupLdr.e32"]="86154d725c21660f220e957eb6dcaf73ca609eef486dcdce6d5d7c286abd03d5"
innoFiles["ISPP.dll"]="1be06b60090221d7a7d236d374ab4ff7e6a56013107f806be4bea2b79dad3703"
innoFiles["opengl32sw.dll"]="963641a718f9cae2705d5299eae9b7444e84e72ab3bef96a691510dd05fa1da4"
echo "Verify InnoSetup files"
cd utils
for f in *; do
hash=$(sha256sum $f | awk '{print $1}')
if [[ "${innoFiles[$f]}" != "${hash}" ]]; then
echo "Hash mismatch $f"
exit
else
echo "Verified $f"
fi
done
cd ..
#download artifact also sets the TAG variable
download_artifact $RUN_ID monero-gui "docker-windows-static" "docker-windows-static" "${GH_KEY}"
#download gitian cli files
download_artifact $GITIAN_ID monero "Windows" "Windows" "${GH_KEY}"
#Extract static files to frombuild
unzip "docker-windows-static" -d frombuild
#Extract gitian files here
unzip "Windows"
unzip "monero-x86_64-w64-mingw32-${TAG}.zip" -d clifiles
# Download CLI/PDF file(s)
wget -q "https://github.com/monero-ecosystem/monero-GUI-guide/releases/download/v1.9/monero-gui-wallet-guide.pdf"
# Create lowgfx bat file with heredoc (windows powershell uses \r\n)
cr=$'\r'
tee "start-low-graphics-mode.bat" <<EOF
@echo off$cr
$cr
set QMLSCENE_DEVICE=softwarecontext$cr
$cr
start /b monero-wallet-gui.exe$cr
EOF
mkdir -p "dummy/monero-gui-${TAG}/extras"
HEAD="clifiles/monero-x86_64-w64-mingw32-${TAG}"
OUT="dummy/monero-gui-${TAG}"
echo "HEAD is ${HEAD}"
license="${HEAD}/LICENSE"
monerod="${HEAD}/monerod.exe"
mv $license "${OUT}/"
mv $monerod "${OUT}/"
readme="${HEAD}/README.md"; rm "${readme}"
anon="${HEAD}/ANONYMITY_NETWORKS.md"; rm "${anon}"
dest="dummy/monero-gui-${TAG}"
cp monero-gui-wallet-guide.pdf "${dest}/"
cp frombuild/monero-wallet-gui.exe "${dest}/"
cp utils/opengl32sw.dll "${dest}/"
cp start-low-graphics-mode.bat "${dest}/"
ls ${HEAD}
for f in "${HEAD}/*"; do
echo "$f"
cp $f "dummy/monero-gui-${TAG}/extras"
done
dest="dummy/monero-gui-${TAG}"
mkdir inno; cd inno
git init
git remote add -f origin https://github.com/monero-project/monero-gui
git sparse-checkout init
git sparse-checkout set "installers/windows"
git pull origin master
mkdir -p installers/windows/bin
cd ..
for f in "${dest}/*"; do
cp -r $f "inno/installers/windows/bin"
done
strip_v="${TAG:1}"
inno_file='inno/installers/windows/Monero.iss'
# mistake in v0.18.1.1. to reproduce hash use line 13
# -e '13 cTouchDate=none \nTouchTime=none' \
lines="$(cat $inno_file)"
SAVEIFS=$IFS
IFS=$'\n'
lines=($lines)
IFS=$SAVEIFS
num=1
setup="[Setup]"
define="#define GuiVersion GetFileVersion(\"bin\monero-wallet-gui.exe\")"
readme="Source: {#file AddBackslash(SourcePath) + \"ReadMe.htm\"}; DestDir: \"{app}\"; DestName: \"ReadMe.htm\"; Flags: ignoreversion"
for line in "${lines[@]}"; do
if [[ "$line" = "$setup"* ]] ; then
echo "we found setup $num"
setup=$num
elif [[ "$line" = "$define"* ]] ; then
echo "we found define $num"
define=$num
elif [[ "$line" = "$readme"* ]] ; then
echo "we found readme $num"
readme=$num
sed -i "${readme} cSource: \"ReadMe.htm\"; DestDir: \"{app}\"; Flags: ignoreversion" ${inno_file}
fi
((num+=1))
done
sed -i \
-e "${define} c#define GuiVersion \"${strip_v}\"" \
-e "${setup} c\[Setup\] \nTouchDate=none \nTouchTime=none" ${inno_file}
for f in "utils/*"; do
cp $f "inno/installers/windows"
done
HOMEDIR="$(pwd)"
stamp=$(stat -c '%y' frombuild/monero-wallet-gui.exe)
corrected_stamp=$(date -d"${stamp} +0 hours" +"%Y%m%d%H%M.%S")
for f in "inno/installers/windows/*" "inno/installers/windows/**/*" "inno/installers/windows/**/**/*"; do
echo $f
touch -t "${corrected_stamp}" $f
done
wine inno/installers/windows/ISCC.exe inno/installers/windows/Monero.iss
mkdir bin
mv inno/installers/windows/Output/mysetup.exe "bin/monero-gui-install-win-x64-${TAG}.exe"
- name: Print hashes
run: |
hash_exe=$(sha256sum bin/monero-gui-install-win-x64-${{needs.GetTag.outputs.output1}}.exe | awk '{print $1}')
echo "Hash of gitian built cli zip:" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
echo $(sha256sum monero-x86_64-w64-mingw32-${{needs.GetTag.outputs.output1}}.zip) >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
echo "Monero GUI installer hash:" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
echo "${hash_exe} monero-gui-install-win-x64-${{needs.GetTag.outputs.output1}}.exe" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
- name: Archive code coverage results
uses: actions/upload-artifact@v4
with:
name: monero-gui-install-win-x64-${{needs.GetTag.outputs.output1}}
path: bin/monero-gui-install-win-x64-${{needs.GetTag.outputs.output1}}.exe