From 450bcaa7e99337fe13f2268bc0b63f3f0f514b80 Mon Sep 17 00:00:00 2001 From: celenity Date: Fri, 7 Aug 2026 21:01:13 +0000 Subject: [PATCH] fix: Clean-up and update release handling (specifically for release notes) Notably: - Changes are now specified directly at `CHANGELOG.md` (instead of just in the PR) - Release notes and information are now uploaded to `https://ironfoxoss.org/releases` (So we can now just link to/use this page for releases directly, instead of using GitLab) Signed-off-by: celenity --- CHANGELOG.md | 1 + scripts/ci-publish-packages.sh | 223 ++++++++++++++++++++------------- scripts/ci-update-site.sh | 39 +++++- templates/release-notes.md | 65 ++++++++++ 4 files changed, 240 insertions(+), 88 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 templates/release-notes.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..53325fe1 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ +- Updated to Firefox [`153.0.3`](https://firefox.com/firefox/android/153.0.3/releasenotes/). diff --git a/scripts/ci-publish-packages.sh b/scripts/ci-publish-packages.sh index 8e793983..177334b7 100755 --- a/scripts/ci-publish-packages.sh +++ b/scripts/ci-publish-packages.sh @@ -26,7 +26,40 @@ verify_file_with_env "${IRONFOX_RELEASES_S3_BUCKET_NAME_FILE}" 'IRONFOX_RELEASES verify_file_with_env "${IRONFOX_RELEASES_S3_ENDPOINT_FILE}" 'IRONFOX_RELEASES_S3_ENDPOINT_FILE' || exit 1 verify_file_with_env "${IRONFOX_RELEASES_S3_SECRET_KEY_FILE}" 'IRONFOX_RELEASES_S3_SECRET_KEY_FILE' || exit 1 -readonly GENERIC_PACKAGES_URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic" +# Constants + +# Base releases URL +readonly IRONFOX_RELEASES_URL='https://releases.ironfoxoss.org' +readonly IRONFOX_RELEASES_BASE_URL="${IRONFOX_RELEASES_URL}/ironfox/releases/${IRONFOX_VERSION}" + +# GitLab +readonly IRONFOX_GITLAB_API_URL='https://gitlab.com/api/v4' +readonly IRONFOX_GITLAB_PROJECT_ID='65779408' +readonly IRONFOX_GITLAB_GENERIC_PACKAGES_URL="${IRONFOX_GITLAB_API_URL}/projects/${IRONFOX_GITLAB_PROJECT_ID}/packages/generic" + +# Final release notes file +readonly IRONFOX_RELEASE_NOTES="${IRONFOX_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-release-notes.md" + +# Artifacts +readonly IRONFOX_APK_ARM64="${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-arm64-v8a.apk" +readonly IRONFOX_APK_ARM="${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-armeabi-v7a.apk" +readonly IRONFOX_APK_X86_64="${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-x86_64.apk" +readonly IRONFOX_APK_UNIVERSAL="${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-universal.apk" +readonly IRONFOX_APKSET="${IRONFOX_APKS_ARTIFACTS}/ironfox-${IRONFOX_VERSION}.apks" + +# Ensure we have our artifacts +verify_file "${IRONFOX_APK_ARM64}" || exit 1 +verify_file "${IRONFOX_APK_ARM}" || exit 1 +verify_file "${IRONFOX_APK_X86_64}" || exit 1 +verify_file "${IRONFOX_APK_UNIVERSAL}" || exit 1 +verify_file "${IRONFOX_APKSET}" || exit 1 + +# Artifact SHA512sums +readonly IRONFOX_ARM64_SHA512SUM=$("${IRONFOX_SHASUM}" -a 512 "${IRONFOX_APK_ARM64}" | "${IRONFOX_AWK}" '{print $1}') +readonly IRONFOX_ARM_SHA512SUM=$("${IRONFOX_SHASUM}" -a 512 "${IRONFOX_APK_ARM}" | "${IRONFOX_AWK}" '{print $1}') +readonly IRONFOX_X86_64_SHA512SUM=$("${IRONFOX_SHASUM}" -a 512 "${IRONFOX_APK_X86_64}" | "${IRONFOX_AWK}" '{print $1}') +readonly IRONFOX_UNIVERSAL_SHA512SUM=$("${IRONFOX_SHASUM}" -a 512 "${IRONFOX_APK_UNIVERSAL}" | "${IRONFOX_AWK}" '{print $1}') +readonly IRONFOX_BUNDLE_SHA512SUM=$("${IRONFOX_SHASUM}" -a 512 "${IRONFOX_APKSET}" | "${IRONFOX_AWK}" '{print $1}') function upload_to_package_registry() { local -r upload_file="$1" @@ -34,7 +67,7 @@ function upload_to_package_registry() { local -r upload_file_name="$("${IRONFOX_BASENAME}" "${upload_file}")" "${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --no-verbose --header "PRIVATE-TOKEN: ${GITLAB_CI_API_TOKEN}" \ --upload-file "${upload_file}" \ - "${GENERIC_PACKAGES_URL}/${upload_package_name}/${IRONFOX_VERSION}/${upload_file_name}" + "${IRONFOX_GITLAB_GENERIC_PACKAGES_URL}/${upload_package_name}/${IRONFOX_VERSION}/${upload_file_name}" } # Pushes a file to S3 @@ -73,6 +106,9 @@ function push_to_s3() { *.json) local -r mime_type='application/json' ;; + *.md) + local -r mime_type='text/markdown' + ;; *.txt) local -r mime_type='text/plain' ;; @@ -137,13 +173,6 @@ function add_sha512sum() { "${IRONFOX_MKDIR}" -vp "${IRONFOX_BUILD}" -readonly RELEASE_NOTES_FILE="${IRONFOX_BUILD}/release-notes.md" -readonly CHECKSUMS_FILE="${IRONFOX_BUILD}/asset-checksums.txt" -readonly RELEASE_FILE="${IRONFOX_BUILD}/release.yml" - -echo -n "" > "${RELEASE_NOTES_FILE}" -echo -n "" > "${CHECKSUMS_FILE}" - declare -a assets function upload_asset() { local -r asset_package_name="$1" @@ -151,44 +180,109 @@ function upload_asset() { local -r asset_file="$3" local -r asset_file_name="$("${IRONFOX_BASENAME}" "${asset_file}")" - echo "\`${asset_file_name}\`: " >> "${CHECKSUMS_FILE}" - echo "\`\`\`text" >> "${CHECKSUMS_FILE}" - "${IRONFOX_SHASUM}" -a 512 -b "${asset_file}" | "${IRONFOX_CUT}" -d ' ' -f 1 >> "${CHECKSUMS_FILE}" - echo "\`\`\`" >> "${CHECKSUMS_FILE}" - echo '' >> "${CHECKSUMS_FILE}" upload_to_package_registry "${asset_file}" "${asset_package_name}" push_to_s3 "${asset_file}" "${asset_s3_path}" add_sha512sum "${asset_file}" "${asset_s3_path}" } function upload_apk_arm64() { - upload_asset 'apk' "ironfox/releases/${IRONFOX_VERSION}/arm64-v8a" "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-arm64-v8a.apk" - local -r arm64_file_name="$("${IRONFOX_BASENAME}" "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-arm64-v8a.apk")" - assets+=("{\"name\": \"${arm64_file_name}\",\"url\": \"https://releases.ironfoxoss.org/ironfox/releases/${IRONFOX_VERSION}/arm64-v8a/${arm64_file_name}\",\"link_type\": \"package\",\"direct_asset_path\": \"/${arm64_file_name}\"}") + upload_asset 'apk' "ironfox/releases/${IRONFOX_VERSION}/arm64-v8a" "${IRONFOX_APK_ARM64}" + local -r arm64_file_name="$("${IRONFOX_BASENAME}" "${IRONFOX_APK_ARM64}")" + assets+=("{\"name\": \"${arm64_file_name}\",\"url\": \"${IRONFOX_RELEASES_BASE_URL}/arm64-v8a/${arm64_file_name}\",\"link_type\": \"package\",\"direct_asset_path\": \"/${arm64_file_name}\"}") } function upload_apk_arm() { - upload_asset 'apk' "ironfox/releases/${IRONFOX_VERSION}/armeabi-v7a" "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-armeabi-v7a.apk" - local -r arm_file_name="$("${IRONFOX_BASENAME}" "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-armeabi-v7a.apk")" - assets+=("{\"name\": \"${arm_file_name}\",\"url\": \"https://releases.ironfoxoss.org/ironfox/releases/${IRONFOX_VERSION}/armeabi-v7a/${arm_file_name}\",\"link_type\": \"package\",\"direct_asset_path\": \"/${arm_file_name}\"}") + upload_asset 'apk' "ironfox/releases/${IRONFOX_VERSION}/armeabi-v7a" "${IRONFOX_APK_ARM}" + local -r arm_file_name="$("${IRONFOX_BASENAME}" "${IRONFOX_APK_ARM}")" + assets+=("{\"name\": \"${arm_file_name}\",\"url\": \"${IRONFOX_RELEASES_BASE_URL}/armeabi-v7a/${arm_file_name}\",\"link_type\": \"package\",\"direct_asset_path\": \"/${arm_file_name}\"}") } function upload_apk_x86_64() { - upload_asset 'apk' "ironfox/releases/${IRONFOX_VERSION}/x86_64" "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-x86_64.apk" - local -r x86_64_file_name="$("${IRONFOX_BASENAME}" "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-x86_64.apk")" - assets+=("{\"name\": \"${x86_64_file_name}\",\"url\": \"https://releases.ironfoxoss.org/ironfox/releases/${IRONFOX_VERSION}/x86_64/${x86_64_file_name}\",\"link_type\": \"package\",\"direct_asset_path\": \"/${x86_64_file_name}\"}") + upload_asset 'apk' "ironfox/releases/${IRONFOX_VERSION}/x86_64" "${IRONFOX_APK_X86_64}" + local -r x86_64_file_name="$("${IRONFOX_BASENAME}" "${IRONFOX_APK_X86_64}")" + assets+=("{\"name\": \"${x86_64_file_name}\",\"url\": \"${IRONFOX_RELEASES_BASE_URL}/x86_64/${x86_64_file_name}\",\"link_type\": \"package\",\"direct_asset_path\": \"/${x86_64_file_name}\"}") } function upload_apk_universal() { - upload_asset 'apk' "ironfox/releases/${IRONFOX_VERSION}/universal" "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-universal.apk" - local -r universal_file_name="$("${IRONFOX_BASENAME}" "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-universal.apk")" - assets+=("{\"name\": \"${universal_file_name}\",\"url\": \"https://releases.ironfoxoss.org/ironfox/releases/${IRONFOX_VERSION}/universal/${universal_file_name}\",\"link_type\": \"package\",\"direct_asset_path\": \"/${universal_file_name}\"}") + upload_asset 'apk' "ironfox/releases/${IRONFOX_VERSION}/universal" "${IRONFOX_APK_UNIVERSAL}" + local -r universal_file_name="$("${IRONFOX_BASENAME}" "${IRONFOX_APK_UNIVERSAL}")" + assets+=("{\"name\": \"${universal_file_name}\",\"url\": \"${IRONFOX_RELEASES_BASE_URL}/universal/${universal_file_name}\",\"link_type\": \"package\",\"direct_asset_path\": \"/${universal_file_name}\"}") } function upload_apkset() { - upload_asset 'apkset' "ironfox/releases/${IRONFOX_VERSION}/bundle" "${IRONFOX_APKS_ARTIFACTS}/ironfox-${IRONFOX_VERSION}.apks" - local -r bundle_file_name="$("${IRONFOX_BASENAME}" "${IRONFOX_APKS_ARTIFACTS}/ironfox-${IRONFOX_VERSION}.apks")" - assets+=("{\"name\": \"${bundle_file_name}\",\"url\": \"https://releases.ironfoxoss.org/ironfox/releases/${IRONFOX_VERSION}/bundle/${bundle_file_name}\",\"link_type\": \"package\",\"direct_asset_path\": \"/${bundle_file_name}\"}") + upload_asset 'apkset' "ironfox/releases/${IRONFOX_VERSION}/bundle" "${IRONFOX_APKSET}" + local -r bundle_file_name="$("${IRONFOX_BASENAME}" "${IRONFOX_APKSET}")" + assets+=("{\"name\": \"${bundle_file_name}\",\"url\": \"${IRONFOX_RELEASES_BASE_URL}/bundle/${bundle_file_name}\",\"link_type\": \"package\",\"direct_asset_path\": \"/${bundle_file_name}\"}") +} + +# Create release notes +function create_release_notes() { + # Ensure our changelog (for release-specific changes) exists + local -r IRONFOX_CHANGELOG_FILE="${IRONFOX_ROOT}/CHANGELOG.md" + verify_file "${IRONFOX_CHANGELOG_FILE}" || exit 1 + + # Ensure our release template exists + local -r IRONFOX_RELEASE_TEMPLATE="${IRONFOX_TEMPLATES}/release-notes.md" + verify_file "${IRONFOX_RELEASE_TEMPLATE}" || exit 1 + + local -r IRONFOX_RELEASE_NOTES_TEMP="${IRONFOX_TEMP}/ironfox-${IRONFOX_VERSION}-release-notes-temp.md" + "${IRONFOX_RM}" -f "${IRONFOX_RELEASE_NOTES}" "${IRONFOX_RELEASE_NOTES_TEMP}" + + "${IRONFOX_MKDIR}" -p "${IRONFOX_ARTIFACTS}" "${IRONFOX_TEMP}" + "${IRONFOX_CP}" -f "${IRONFOX_RELEASE_TEMPLATE}" "${IRONFOX_RELEASE_NOTES_TEMP}" + + # Set our version + "${IRONFOX_SED}" -i "s|{IRONFOX_VERSION}|${IRONFOX_VERSION}|g" "${IRONFOX_RELEASE_NOTES_TEMP}" + + # Set the previous (current) version + local -r IRONFOX_PREVIOUS_VERSION=$("${IRONFOX_CAT}" "${IRONFOX_ROOT}/previous_release.txt" | "${IRONFOX_XARGS}") + "${IRONFOX_SED}" -i "s|{IRONFOX_PREVIOUS_VERSION}|${IRONFOX_PREVIOUS_VERSION}|g" "${IRONFOX_RELEASE_NOTES_TEMP}" + + # Set our SHA512sums + "${IRONFOX_SED}" -i "s|{IRONFOX_ARM64_SHA512SUM}|${IRONFOX_ARM64_SHA512SUM}|g" "${IRONFOX_RELEASE_NOTES_TEMP}" + "${IRONFOX_SED}" -i "s|{IRONFOX_ARM_SHA512SUM}|${IRONFOX_ARM_SHA512SUM}|g" "${IRONFOX_RELEASE_NOTES_TEMP}" + "${IRONFOX_SED}" -i "s|{IRONFOX_X86_64_SHA512SUM}|${IRONFOX_X86_64_SHA512SUM}|g" "${IRONFOX_RELEASE_NOTES_TEMP}" + "${IRONFOX_SED}" -i "s|{IRONFOX_UNIVERSAL_SHA512SUM}|${IRONFOX_UNIVERSAL_SHA512SUM}|g" "${IRONFOX_RELEASE_NOTES_TEMP}" + "${IRONFOX_SED}" -i "s|{IRONFOX_BUNDLE_SHA512SUM}|${IRONFOX_BUNDLE_SHA512SUM}|g" "${IRONFOX_RELEASE_NOTES_TEMP}" + + # Set CI commit + job ID + "${IRONFOX_SED}" -i "s|{CI_COMMIT_SHA}|${CI_COMMIT_SHA}|g" "${IRONFOX_RELEASE_NOTES_TEMP}" + "${IRONFOX_SED}" -i "s|{CI_COMMIT_SHORT_SHA}|${CI_COMMIT_SHORT_SHA}|g" "${IRONFOX_RELEASE_NOTES_TEMP}" + "${IRONFOX_SED}" -i "s|{CI_JOB_ID}|${CI_JOB_ID}|g" "${IRONFOX_RELEASE_NOTES_TEMP}" + + # Add release-specific changes + local -r IRONFOX_CHANGELOG=$("${IRONFOX_CAT}" "${IRONFOX_CHANGELOG_FILE}") + { + echo "# IronFox ${IRONFOX_VERSION}" + echo '____' + echo '' + echo '## Changes' + echo '' + "${IRONFOX_CAT}" "${IRONFOX_ROOT}/CHANGELOG.md" + echo '' + "${IRONFOX_CAT}" "${IRONFOX_RELEASE_NOTES_TEMP}" + } >> "${IRONFOX_RELEASE_NOTES}" + + "${IRONFOX_RM}" -f "${IRONFOX_RELEASE_NOTES_TEMP}" + + echo_green_text "SUCCESS: Created release notes for IronFox: ${IRONFOX_VERSION}" +} + +# Create our universal updates.json +## (ex. used by Obtainium) +function create_universal_json() { + "${IRONFOX_CP}" -f "${IRONFOX_TEMPLATES}/updates.json" "${IRONFOX_ROOT}/updates.json" + + "${IRONFOX_SED}" -i "s|{IRONFOX_VERSION}|${IRONFOX_VERSION}|" "${IRONFOX_ROOT}/updates.json" + "${IRONFOX_SED}" -i "s|ironfox-{IRONFOX_VERSION}|ironfox-${IRONFOX_VERSION}|" "${IRONFOX_ROOT}/updates.json" + "${IRONFOX_SED}" -i "s|{IRONFOX_ARM64_SHA512SUM}|${IRONFOX_ARM64_SHA512SUM}|" "${IRONFOX_ROOT}/updates.json" + "${IRONFOX_SED}" -i "s|{IRONFOX_ARM_SHA512SUM}|${IRONFOX_ARM_SHA512SUM}|" "${IRONFOX_ROOT}/updates.json" + "${IRONFOX_SED}" -i "s|{IRONFOX_X86_64_SHA512SUM}|${IRONFOX_X86_64_SHA512SUM}|" "${IRONFOX_ROOT}/updates.json" + "${IRONFOX_SED}" -i "s|{IRONFOX_UNIVERSAL_SHA512SUM}|${IRONFOX_UNIVERSAL_SHA512SUM}|" "${IRONFOX_ROOT}/updates.json" + "${IRONFOX_SED}" -i "s|{IRONFOX_BUNDLE_SHA512SUM}|${IRONFOX_BUNDLE_SHA512SUM}|" "${IRONFOX_ROOT}/updates.json" + + push_to_s3 "${IRONFOX_ROOT}/updates.json" 'ironfox/releases' + add_sha512sum "${IRONFOX_ROOT}/updates.json" 'ironfox/releases' } # Upload packages to package registry @@ -200,28 +294,12 @@ upload_apkset # Update our universal updates.json file ## (ex. used by Obtainium) -"${IRONFOX_CP}" -f "${IRONFOX_TEMPLATES}/updates.json" "${IRONFOX_ROOT}/updates.json" - -readonly IRONFOX_ARM64_SHA512SUM=$("${IRONFOX_SHASUM}" -a 512 "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-arm64-v8a.apk" | "${IRONFOX_AWK}" '{print $1}') -readonly IRONFOX_ARM_SHA512SUM=$("${IRONFOX_SHASUM}" -a 512 "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-armeabi-v7a.apk" | "${IRONFOX_AWK}" '{print $1}') -readonly IRONFOX_X86_64_SHA512SUM=$("${IRONFOX_SHASUM}" -a 512 "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-x86_64.apk" | "${IRONFOX_AWK}" '{print $1}') -readonly IRONFOX_UNIVERSAL_SHA512SUM=$("${IRONFOX_SHASUM}" -a 512 "${IRONFOX_APK_ARTIFACTS}/ironfox-${IRONFOX_VERSION}-universal.apk" | "${IRONFOX_AWK}" '{print $1}') -readonly IRONFOX_BUNDLE_SHA512SUM=$("${IRONFOX_SHASUM}" -a 512 "${IRONFOX_APKS_ARTIFACTS}/ironfox-${IRONFOX_VERSION}.apks" | "${IRONFOX_AWK}" '{print $1}') - -"${IRONFOX_SED}" -i "s|{IRONFOX_VERSION}|${IRONFOX_VERSION}|" "${IRONFOX_ROOT}/updates.json" -"${IRONFOX_SED}" -i "s|ironfox-{IRONFOX_VERSION}|ironfox-${IRONFOX_VERSION}|" "${IRONFOX_ROOT}/updates.json" -"${IRONFOX_SED}" -i "s|{IRONFOX_ARM64_SHA512SUM}|${IRONFOX_ARM64_SHA512SUM}|" "${IRONFOX_ROOT}/updates.json" -"${IRONFOX_SED}" -i "s|{IRONFOX_ARM_SHA512SUM}|${IRONFOX_ARM_SHA512SUM}|" "${IRONFOX_ROOT}/updates.json" -"${IRONFOX_SED}" -i "s|{IRONFOX_X86_64_SHA512SUM}|${IRONFOX_X86_64_SHA512SUM}|" "${IRONFOX_ROOT}/updates.json" -"${IRONFOX_SED}" -i "s|{IRONFOX_UNIVERSAL_SHA512SUM}|${IRONFOX_UNIVERSAL_SHA512SUM}|" "${IRONFOX_ROOT}/updates.json" -"${IRONFOX_SED}" -i "s|{IRONFOX_BUNDLE_SHA512SUM}|${IRONFOX_BUNDLE_SHA512SUM}|" "${IRONFOX_ROOT}/updates.json" - -push_to_s3 "${IRONFOX_ROOT}/updates.json" 'ironfox/releases' +create_universal_json # Because we now upload all releases to releases.ironfoxoss.org, we only want to keep the last 3 releases in ex. F-Droid ## In order to do so, we need to store/upload the current and prior 2 versions of IronFox as text files -"${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --location 'https://releases.ironfoxoss.org/ironfox/releases/latest_release.txt' --output "${IRONFOX_ROOT}/current-latest_release.txt" -"${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --location 'https://releases.ironfoxoss.org/ironfox/releases/previous_release.txt' --output "${IRONFOX_ROOT}/current-previous_release.txt" +"${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --location "${IRONFOX_RELEASES_URL}/ironfox/releases/latest_release.txt" --output "${IRONFOX_ROOT}/current-latest_release.txt" +"${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --location "${IRONFOX_RELEASES_URL}/ironfox/releases/previous_release.txt" --output "${IRONFOX_ROOT}/current-previous_release.txt" echo -n "${IRONFOX_VERSION}" > "${IRONFOX_ROOT}/latest_release.txt" "${IRONFOX_CP}" "${IRONFOX_ROOT}/current-latest_release.txt" "${IRONFOX_ROOT}/previous_release.txt" @@ -236,52 +314,23 @@ add_sha512sum "${IRONFOX_ROOT}/previous_release.txt" 'ironfox/releases' push_to_s3 "${IRONFOX_ROOT}/previous_release.txt" 'ironfox/releases' add_sha512sum "${IRONFOX_ROOT}/previous_previous_release.txt" 'ironfox/releases' -{ - readonly changelog_file="${IRONFOX_ROOT}/changelogs/${IRONFOX_VERSION}.md" - if [[ -f "${changelog_file}" ]]; then - "${IRONFOX_CAT}" "${changelog_file}" - fi +# Create release notes +## (NOTE: This needs to run after we have previous_release.txt above, so that we can properly set the previous version) +create_release_notes - echo "# IronFox ${IRONFOX_VERSION}" - echo '____' - echo '' - - echo '## Changes' - echo '' - echo '- ' - echo '' - - echo '## App Verification' - echo "To verify the integrity/authenticity of your IronFox installation, in addition to [the checksums](#checksums) provided below, we highly recommend using [\`AppVerifier\`](https://github.com/soupslurpr/AppVerifier):" - echo '' - echo "Package ID: \`org.ironfoxoss.ironfox\`" - echo '' - echo 'SHA256 hash of signing certificate:' - echo "\`\`\`text" - echo 'C5:E2:91:B5:A5:71:F9:C8:CD:9A:97:99:C2:C9:4E:02:EC:97:03:94:88:93:F2:CA:75:6D:67:B9:42:04:F9:04' - echo "\`\`\`" - echo '' - echo '---' - echo '' - - echo '## Checksums' - echo '' - "${IRONFOX_CAT}" ${CHECKSUMS_FILE} - echo '' - - echo '---' - echo "_This release was automatically generated by the CI/CD pipeline ([view pipeline](${CI_JOB_URL})) and is guaranteed to be generated from commit [${CI_COMMIT_SHORT_SHA}](${CI_PROJECT_URL}/-/tree/${CI_COMMIT_SHA})._" - echo '' -} >> "${RELEASE_NOTES_FILE}" +# Push release notes +push_to_s3 "${IRONFOX_RELEASE_NOTES}" "ironfox/releases/${IRONFOX_VERSION}" +add_sha512sum "${IRONFOX_RELEASE_NOTES}" "ironfox/releases/${IRONFOX_VERSION}" +# Add assets to GitLab release { echo "---" - echo "name: IronFox v${IRONFOX_VERSION}" + echo "name: IronFox ${IRONFOX_VERSION}" echo "tag-name: v${IRONFOX_VERSION}" echo "description: |" - "${IRONFOX_AWK}" '{print " " $0}' < "${RELEASE_NOTES_FILE}" + "${IRONFOX_AWK}" '{print " " $0}' < "${IRONFOX_RELEASE_NOTES}" echo "assets-link:" for asset in "${assets[@]}"; do echo " - '${asset}'" done -} > "${RELEASE_FILE}" +} > "${IRONFOX_BUILD}/release.yml" diff --git a/scripts/ci-update-site.sh b/scripts/ci-update-site.sh index 429ac6ca..c3afd237 100644 --- a/scripts/ci-update-site.sh +++ b/scripts/ci-update-site.sh @@ -35,7 +35,44 @@ source "${IRONFOX_PYENV}" "${IRONFOX_SED}" -i "s/IRONFOX_VERSION = .*/IRONFOX_VERSION = \"${IRONFOX_VERSION}\";/g" \ ./src/version.ts +# Update release notes +"${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --location "https://releases.ironfoxoss.org/ironfox/releases/${IRONFOX_VERSION}/ironfox-${IRONFOX_VERSION}-release-notes.md" --output "${IRONFOX_VERSION}-temp.md" + +"${IRONFOX_CP}" -f ./release-notes.md ./release-notes-temp.md +"${IRONFOX_RM}" -f ./release-notes.md + +"${IRONFOX_SED}" -i "s|# IronFox ${IRONFOX_VERSION}||g" "${IRONFOX_VERSION}-temp.md" +{ + echo "
" + echo "

${IRONFOX_VERSION}

" + echo "
" + "${IRONFOX_CAT}" "${IRONFOX_VERSION}-temp.md" + echo '' +} >> "${IRONFOX_VERSION}.md" +"${IRONFOX_RM}" -f "${IRONFOX_VERSION}-temp.md" + +"${IRONFOX_CAT}" "${IRONFOX_VERSION}.md" ./release-notes-temp.md > ./release-notes.md +"${IRONFOX_RM}" -f "${IRONFOX_VERSION}.md" +"${IRONFOX_RM}" -f ./release-notes-temp.md + +"${IRONFOX_RM}" -f ./src/content/docs/releases.mdx +{ + echo '---' + echo 'title: IronFox releases' + echo '---' + echo '' + echo 'import { IRONFOX_VERSION } from "../../version.ts";' + echo 'import MarkdownLayout from "../../layouts/MarkdownLayout.astro";' + echo '' + echo '' + echo '' + echo '> Latest release: {IRONFOX_VERSION}' + echo '' + "${IRONFOX_CAT}" ./release-notes.md + echo '' +} >> ./src/content/docs/releases.mdx + # Commit changes -"${IRONFOX_GIT}" add src +"${IRONFOX_GIT}" add src release-notes.md "${IRONFOX_GIT}" commit -m "feat: update patch docs to reflect ironfox-oss/IronFox@${CI_COMMIT_SHA}" "${IRONFOX_GIT}" push origin "HEAD:${TARGET_REPO_BRANCH}" diff --git a/templates/release-notes.md b/templates/release-notes.md new file mode 100644 index 00000000..b89ebad6 --- /dev/null +++ b/templates/release-notes.md @@ -0,0 +1,65 @@ +--- + +Codeberg: See [here](https://codeberg.org/ironfox-oss/IronFox/compare/v{IRONFOX_PREVIOUS_VERSION}...v{IRONFOX_VERSION}) for more details. + +GitLab: See [here](https://gitlab.com/ironfox-oss/IronFox/-/compare/v{IRONFOX_PREVIOUS_VERSION}...v{IRONFOX_VERSION}) for more details. + +GitHub: See [here](https://github.com/ironfox-oss/IronFox/compare/v{IRONFOX_PREVIOUS_VERSION}...v{IRONFOX_VERSION}) for more details. + +--- + +## Downloads + +Downloads for this release of IronFox can be found below: + +- **Universal**: [`https://releases.ironfoxoss.org/ironfox/releases/{IRONFOX_VERSION}/universal/ironfox-{IRONFOX_VERSION}-universal.apk`](https://releases.ironfoxoss.org/ironfox/releases/{IRONFOX_VERSION}/universal/ironfox-{IRONFOX_VERSION}-universal.apk) +- **ARM64**: [`https://releases.ironfoxoss.org/ironfox/releases/{IRONFOX_VERSION}/arm64-v8a/ironfox-{IRONFOX_VERSION}-arm64-v8a.apk`](https://releases.ironfoxoss.org/ironfox/releases/{IRONFOX_VERSION}/arm64-v8a/ironfox-{IRONFOX_VERSION}-arm64-v8a.apk) +- **ARM**: [`https://releases.ironfoxoss.org/ironfox/releases/{IRONFOX_VERSION}/armeabi-v7a/ironfox-{IRONFOX_VERSION}-armeabi-v7a.apk`](https://releases.ironfoxoss.org/ironfox/releases/{IRONFOX_VERSION}/armeabi-v7a/ironfox-{IRONFOX_VERSION}-armeabi-v7a.apk) +- **x86_64**: [`https://releases.ironfoxoss.org/ironfox/releases/{IRONFOX_VERSION}/x86_64/ironfox-{IRONFOX_VERSION}-x86_64.apk`](https://releases.ironfoxoss.org/ironfox/releases/{IRONFOX_VERSION}/x86_64/ironfox-{IRONFOX_VERSION}-x86_64.apk) +- **Bundle** *(ApkSet)*: [`https://releases.ironfoxoss.org/ironfox/releases/{IRONFOX_VERSION}/bundle/ironfox-{IRONFOX_VERSION}.apks`](https://releases.ironfoxoss.org/ironfox/releases/{IRONFOX_VERSION}/bundle/ironfox-{IRONFOX_VERSION}.apks) + +--- + +## App Verification + +To verify the integrity/authenticity of your IronFox installation, in addition to [the SHA512sums](#sha512sums) provided below, we highly recommend using [`AppVerifier`](https://github.com/soupslurpr/AppVerifier): + +Package ID: `org.ironfoxoss.ironfox` + +SHA256 hash of signing certificate: + +```text +C5:E2:91:B5:A5:71:F9:C8:CD:9A:97:99:C2:C9:4E:02:EC:97:03:94:88:93:F2:CA:75:6D:67:B9:42:04:F9:04 +``` + +--- + +## SHA512sums + +`ironfox-{IRONFOX_VERSION}-arm64-v8a.apk`: +```text +{IRONFOX_ARM64_SHA512SUM} +``` + +`ironfox-{IRONFOX_VERSION}-armeabi-v7a.apk`: +```text +{IRONFOX_ARM_SHA512SUM} +``` + +`ironfox-{IRONFOX_VERSION}-x86_64.apk`: +```text +{IRONFOX_X86_64_SHA512SUM} +``` + +`ironfox-{IRONFOX_VERSION}-universal.apk`: +```text +{IRONFOX_UNIVERSAL_SHA512SUM} +``` + +`ironfox-{IRONFOX_VERSION}.apks`: +```text +{IRONFOX_BUNDLE_SHA512SUM} +``` + +--- +_This release was automatically generated by the CI/CD pipeline ([view pipeline](https://gitlab.com/ironfox-oss/IronFox/-/jobs/{CI_JOB_ID})) and is guaranteed to be generated from commit [{CI_COMMIT_SHORT_SHA}](https://gitlab.com/ironfox-oss/IronFox/-/tree/{CI_COMMIT_SHA})._