mirror of
https://github.com/ironfox-oss/IronFox.git
synced 2026-07-31 01:46:33 -04:00
fix: Upload artifacts to S3 storage (instead of GitLab directly) - lets us bypass the size limits and reduces our reliance/dependency on GitLab
Signed-off-by: celenity <celenity@celenity.dev>
This commit is contained in:
@@ -175,8 +175,6 @@ build-geckoview:
|
||||
- BUILD_VARIANT: ["arm64", "arm", "x86_64"]
|
||||
variables:
|
||||
RUNNER_SCRIPT_TIMEOUT: 1h 50m
|
||||
IRONFOX_JOB_ARTIFACT_NAME: "build-geckoview-$BUILD_VARIANT"
|
||||
IRONFOX_ARTIFACT_INCLUDES: "aar;logs"
|
||||
<<: *build_variables
|
||||
script:
|
||||
- set -euo pipefail
|
||||
@@ -186,7 +184,17 @@ build-geckoview:
|
||||
- echo "CI - Building GeckoView (${BUILD_VARIANT})..."
|
||||
- bash -x scripts/ci-build.sh "${BUILD_VARIANT}" 'geckoview'
|
||||
- echo "CI - Built GeckoView (${BUILD_VARIANT})."
|
||||
<<: *compressed_artifact_output
|
||||
- echo 'CI - Uploading artifact...'
|
||||
- bash scripts/ci-upload-artifacts.sh geckoview "${BUILD_VARIANT}"
|
||||
- echo 'CI - Uploaded artifact.'
|
||||
artifacts:
|
||||
untracked: false
|
||||
when: always
|
||||
when: always
|
||||
access: all
|
||||
expire_in: "30 days"
|
||||
paths:
|
||||
- $CI_PROJECT_DIR/artifacts/logs/**/*
|
||||
rules:
|
||||
- if: $CI_PROJECT_NAMESPACE != "ironfox-oss"
|
||||
when: never
|
||||
@@ -206,7 +214,7 @@ build-fenix:
|
||||
- job: "build-docker"
|
||||
optional: true
|
||||
- job: "build-geckoview"
|
||||
artifacts: true
|
||||
artifacts: false
|
||||
optional: false
|
||||
tags:
|
||||
- saas-linux-2xlarge-amd64
|
||||
@@ -214,8 +222,6 @@ build-fenix:
|
||||
BUILD_VARIANT: "bundle"
|
||||
BUILD_VARIANT_PRETTY: "Bundle"
|
||||
RUNNER_SCRIPT_TIMEOUT: 2h 50m
|
||||
IRONFOX_JOB_ARTIFACT_NAME: "build-fenix-$BUILD_VARIANT"
|
||||
IRONFOX_ARTIFACT_INCLUDES: "apk;apks;logs"
|
||||
<<: *build_variables
|
||||
script:
|
||||
- set -euo pipefail
|
||||
@@ -226,8 +232,17 @@ build-fenix:
|
||||
- echo "CI - Building Fenix (${BUILD_VARIANT_PRETTY})..."
|
||||
- bash -x scripts/ci-build.sh "${BUILD_VARIANT}" 'fenix'
|
||||
- echo "CI - Built Fenix (${BUILD_VARIANT_PRETTY})."
|
||||
|
||||
<<: *compressed_artifact_output
|
||||
- echo 'CI - Uploading artifact...'
|
||||
- bash scripts/ci-upload-artifacts.sh fenix "${BUILD_VARIANT}"
|
||||
- echo 'CI - Uploaded artifact.'
|
||||
artifacts:
|
||||
untracked: false
|
||||
when: always
|
||||
when: always
|
||||
access: all
|
||||
expire_in: "30 days"
|
||||
paths:
|
||||
- $CI_PROJECT_DIR/artifacts/logs/**/*
|
||||
rules:
|
||||
- if: $CI_PROJECT_NAMESPACE != "ironfox-oss"
|
||||
when: never
|
||||
@@ -247,10 +262,10 @@ prepare-release:
|
||||
- job: "build-docker"
|
||||
optional: true
|
||||
- job: "build-geckoview"
|
||||
artifacts: true
|
||||
artifacts: false
|
||||
optional: true
|
||||
- job: "build-fenix"
|
||||
artifacts: true
|
||||
artifacts: false
|
||||
optional: true
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
@@ -268,13 +283,20 @@ prepare-release:
|
||||
script:
|
||||
- set -euo pipefail
|
||||
- echo 'CI - Preparing secrets...'
|
||||
- bash scripts/ci-prep.sh s3
|
||||
- bash scripts/ci-prep.sh s3-releases
|
||||
- echo 'CI - Prepared secrets.'
|
||||
- echo 'CI - Downloading dependencies...'
|
||||
- bash -x scripts/get_sources.sh python
|
||||
- bash -x scripts/get_sources.sh uv
|
||||
- bash -x scripts/get_sources.sh s3cmd
|
||||
- echo 'CI - Downloaded dependencies.'
|
||||
- echo 'CI - Downloading artifacts...'
|
||||
- bash -x scripts/ci-download-artifacts.sh fenix arm64
|
||||
- bash -x scripts/ci-download-artifacts.sh fenix arm
|
||||
- bash -x scripts/ci-download-artifacts.sh fenix x86_64
|
||||
- bash -x scripts/ci-download-artifacts.sh fenix universal
|
||||
- bash -x scripts/ci-download-artifacts.sh fenix bundle
|
||||
- echo 'CI - Downloaded artifacts.'
|
||||
- echo 'CI - Publishing packages...'
|
||||
- bash scripts/ci-publish-packages.sh
|
||||
- echo 'CI - Published packages.'
|
||||
|
||||
@@ -55,17 +55,6 @@ if [[ "${ci_build_project}" == 'fenix' ]]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "${ci_build_arch}" == 'bundle' ]]; then
|
||||
# Extract our GeckoView AAR artifacts
|
||||
mkdir -vp "${IRONFOX_GECKOVIEW_AAR_ARM64_DIR}"
|
||||
mkdir -vp "${IRONFOX_GECKOVIEW_AAR_ARM_DIR}"
|
||||
mkdir -vp "${IRONFOX_GECKOVIEW_AAR_X86_64_DIR}"
|
||||
|
||||
"${IRONFOX_TAR}" xvJf "${IRONFOX_ARTIFACTS}/build-geckoview-arm64.tar.xz" -C "${IRONFOX_GECKOVIEW_AAR_ARM64_DIR}"
|
||||
"${IRONFOX_TAR}" xvJf "${IRONFOX_ARTIFACTS}/build-geckoview-arm.tar.xz" -C "${IRONFOX_GECKOVIEW_AAR_ARM_DIR}"
|
||||
"${IRONFOX_TAR}" xvJf "${IRONFOX_ARTIFACTS}/build-geckoview-x86_64.tar.xz" -C "${IRONFOX_GECKOVIEW_AAR_X86_64_DIR}"
|
||||
fi
|
||||
|
||||
# Get sources
|
||||
if [[ "${ci_build_project}" == 'geckoview' ]]; then
|
||||
# If we're only building GeckoView, we don't need to download all sources
|
||||
@@ -93,6 +82,13 @@ if [[ "${ci_build_project}" == 'geckoview' ]]; then
|
||||
bash -x "${IRONFOX_SCRIPTS}/get_sources.sh" 'wasi'
|
||||
else
|
||||
bash -x "${IRONFOX_SCRIPTS}/get_sources.sh"
|
||||
|
||||
# If we're building a Fenix bundle, we also need to download our GeckoView artifacts
|
||||
if [[ "${ci_build_arch}" == 'bundle' ]]; then
|
||||
bash -x "${IRONFOX_SCRIPTS}/ci-download-artifacts.sh" 'geckoview' 'arm64'
|
||||
bash -x "${IRONFOX_SCRIPTS}/ci-download-artifacts.sh" 'geckoview' 'arm'
|
||||
bash -x "${IRONFOX_SCRIPTS}/ci-download-artifacts.sh" 'geckoview' 'x86_64'
|
||||
fi
|
||||
fi
|
||||
|
||||
# Prepare sources
|
||||
@@ -108,27 +104,3 @@ fi
|
||||
|
||||
# Build
|
||||
bash -x "${IRONFOX_SCRIPTS}/build.sh" "${ci_build_arch}" "${ci_build_project}"
|
||||
|
||||
# Copy our GeckoView AAR archives to the artifacts directory for publishing
|
||||
if [[ "${ci_build_project}" == 'geckoview' ]]; then
|
||||
mkdir -vp "${IRONFOX_AAR_ARTIFACTS}"
|
||||
if [[ "${ci_build_arch}" == 'arm64' ]]; then
|
||||
cp -v "${IRONFOX_OUTPUTS_GECKOVIEW_AAR_ARM64}" "${IRONFOX_AAR_ARTIFACTS}/"
|
||||
elif [[ "${ci_build_arch}" == 'arm' ]]; then
|
||||
cp -v "${IRONFOX_OUTPUTS_GECKOVIEW_AAR_ARM}" "${IRONFOX_AAR_ARTIFACTS}/"
|
||||
elif [[ "${ci_build_arch}" == 'x86_64' ]]; then
|
||||
cp -v "${IRONFOX_OUTPUTS_GECKOVIEW_AAR_X86_64}" "${IRONFOX_AAR_ARTIFACTS}/"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Copy our Fenix outputs to the artifacts directory for publishing
|
||||
if [[ "${ci_build_project}" == 'fenix' ]]; then
|
||||
mkdir -vp "${IRONFOX_APK_ARTIFACTS}"
|
||||
mkdir -vp "${IRONFOX_APKS_ARTIFACTS}"
|
||||
|
||||
cp -v "${IRONFOX_OUTPUTS_ARM64}" "${IRONFOX_APK_ARTIFACTS}/"
|
||||
cp -v "${IRONFOX_OUTPUTS_ARM}" "${IRONFOX_APK_ARTIFACTS}/"
|
||||
cp -v "${IRONFOX_OUTPUTS_X86_64}" "${IRONFOX_APK_ARTIFACTS}/"
|
||||
cp -v "${IRONFOX_OUTPUTS_UNIVERSAL}" "${IRONFOX_APK_ARTIFACTS}/"
|
||||
cp -v "${IRONFOX_OUTPUTS_BUNDLE}" "${IRONFOX_APKS_ARTIFACTS}/"
|
||||
fi
|
||||
|
||||
@@ -50,4 +50,4 @@ readonly IRONFOX_CI_BUILD_FAILED
|
||||
export IRONFOX_CI_BUILD_FAILED
|
||||
|
||||
# Compress our archives
|
||||
compress_archives
|
||||
#compress_archives
|
||||
|
||||
152
scripts/ci-download-artifacts-if.sh
Executable file
152
scripts/ci-download-artifacts-if.sh
Executable file
@@ -0,0 +1,152 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Set-up our environment
|
||||
if [[ -z "${IRONFOX_CI+x}" ]]; then
|
||||
export IRONFOX_CI=1
|
||||
fi
|
||||
source $(dirname $0)/env.sh
|
||||
|
||||
# Include utilities
|
||||
source "${IRONFOX_UTILS}"
|
||||
|
||||
# Include version info
|
||||
source "${IRONFOX_VERSIONS}"
|
||||
|
||||
if [[ -z "${IRONFOX_FROM_AR_DOWN+x}" ]]; then
|
||||
echo_red_text 'ERROR: Do not call ci-download-artifacts-if.sh directly. Instead, use ci-download-artifacts.sh.' >&1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
readonly down_artifact="$1"
|
||||
|
||||
# Set-up target parameters
|
||||
IRONFOX_AR_DOWN_FENIX=0
|
||||
IRONFOX_AR_DOWN_GECKOVIEW=0
|
||||
|
||||
if [[ "${down_artifact}" == 'fenix' ]]; then
|
||||
# Download Fenix
|
||||
IRONFOX_AR_DOWN_FENIX=1
|
||||
elif [[ "${down_artifact}" == 'geckoview' ]]; then
|
||||
# Push GeckoView
|
||||
IRONFOX_AR_DOWN_GECKOVIEW=1
|
||||
else
|
||||
echo_red_text "ERROR: Invalid artifact: ${down_artifact}\n You must enter one of the following:"
|
||||
echo 'Fenix: fenix'
|
||||
echo 'GeckoView: geckoview'
|
||||
exit 1
|
||||
fi
|
||||
readonly IRONFOX_AR_DOWN_FENIX
|
||||
readonly IRONFOX_AR_DOWN_GECKOVIEW
|
||||
|
||||
readonly down_arch="$2"
|
||||
|
||||
if [[ "${down_arch}" != 'arm64' ]] && [[ "${down_arch}" != 'arm' ]] && [[ "${down_arch}" != 'x86_64' ]] && [[ "${down_arch}" != 'bundle' ]]; then
|
||||
echo_red_text "ERROR: Invalid target architecture: ${down_arch}\n You must enter one of the following:"
|
||||
echo 'ARM64: arm64'
|
||||
echo 'ARM: arm'
|
||||
echo 'x86_64: x86_64'
|
||||
echo 'Bundle: bundle'
|
||||
exit 1
|
||||
fi
|
||||
readonly IRONFOX_AR_DOWN_ARCH="${down_arch}"
|
||||
|
||||
# Function to download and verify the SHA512sum of an artifact
|
||||
function download_artifact() {
|
||||
local readonly pipeline_id="$1"
|
||||
local readonly artifact="$2"
|
||||
local readonly arch="$3"
|
||||
local readonly output_dir="$4"
|
||||
|
||||
if [[ "${arch}" == 'arm64' ]]; then
|
||||
local readonly arch_suffix='arm64-v8a'
|
||||
elif [[ "${arch}" == 'arm' ]]; then
|
||||
local readonly arch_suffix='armeabi-v7a'
|
||||
elif [[ "${arch}" == 'x86_64' ]]; then
|
||||
local readonly arch_suffix='x86_64'
|
||||
elif [[ "${arch}" == 'universal' ]]; then
|
||||
local readonly arch_suffix='universal'
|
||||
fi
|
||||
|
||||
if [[ "${artifact}" == 'fenix' ]]; then
|
||||
if [[ "${arch}" == 'bundle' ]]; then
|
||||
if [[ "${IRONFOX_RELEASE}" == 1 ]]; then
|
||||
local readonly target_file="ironfox-${IRONFOX_VERSION}.apks"
|
||||
else
|
||||
local readonly target_file="ironfox-${IRONFOX_CHANNEL}-${IRONFOX_VERSION}.apks"
|
||||
fi
|
||||
else
|
||||
if [[ "${IRONFOX_RELEASE}" == 1 ]]; then
|
||||
local readonly target_file="ironfox-${IRONFOX_VERSION}-${arch_suffix}.apk"
|
||||
else
|
||||
local readonly target_file="ironfox-${IRONFOX_CHANNEL}-${IRONFOX_VERSION}-${arch_suffix}.apk"
|
||||
fi
|
||||
fi
|
||||
elif [[ "${artifact}" == 'geckoview' ]]; then
|
||||
local readonly target_file="geckoview-${arch_suffix}.zip"
|
||||
fi
|
||||
|
||||
local readonly target_expected_sha512sum="${target_file}-sha512sum.txt"
|
||||
local readonly target_expected_sha512sum_url="https://artifacts.ironfoxoss.org/${pipeline_id}/${target_expected_sha512sum}"
|
||||
local readonly target_file_url="https://artifacts.ironfoxoss.org/${pipeline_id}/${target_file}"
|
||||
local readonly output_file="${output_dir}/${target_file}"
|
||||
local readonly output_expected_sha512sum="${output_dir}/${target_expected_sha512sum}"
|
||||
|
||||
# Download the artifact
|
||||
mkdir -p "${output_dir}"
|
||||
echo_red_text "Downloading ${target_file} from ${target_file_url}..."
|
||||
curl ${IRONFOX_CURL_FLAGS} --location "${target_file_url}" --output "${output_file}"
|
||||
echo_green_text "SUCCESS: Downloaded ${target_file}"
|
||||
|
||||
# Check the SHA512sum
|
||||
echo_red_text "Validating SHA512sum for ${target_file}.."
|
||||
curl ${IRONFOX_CURL_FLAGS} --location "${target_expected_sha512sum_url}" --output "${output_expected_sha512sum}"
|
||||
local readonly expected_sha512sum=$(cat "${output_expected_sha512sum}" | xargs)
|
||||
local readonly local_sha512sum=$(sha512sum "${output_file}" | "${IRONFOX_AWK}" '{print $1}')
|
||||
if [[ "${local_sha512sum}" != "${expected_sha512sum}" ]]; then
|
||||
echo_red_text 'ERROR: Checksum validation failed.'
|
||||
echo "Expected SHA512sum: ${expected_sha512sum}"
|
||||
echo "Actual SHA512sum: ${local_sha512sum}"
|
||||
|
||||
# If checksum validation fails, also just clean-up the files
|
||||
rm -f "${output_file}"
|
||||
rm -f "${output_expected_sha512sum}"
|
||||
exit 1
|
||||
fi
|
||||
echo_green_text "SUCCESS: Checksum validated for ${target_file}"
|
||||
echo "SHA512sum: ${local_sha512sum}"
|
||||
}
|
||||
|
||||
if [[ "${IRONFOX_AR_DOWN_FENIX}" == 1 ]]; then
|
||||
if [[ "${IRONFOX_AR_DOWN_ARCH}" == 'arm64' ]]; then
|
||||
download_artifact "${CI_PIPELINE_ID}" 'fenix' 'arm64' "${IRONFOX_APK_ARTIFACTS}"
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_DOWN_ARCH}" == 'arm' ]]; then
|
||||
download_artifact "${CI_PIPELINE_ID}" 'fenix' 'arm' "${IRONFOX_APK_ARTIFACTS}"
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_DOWN_ARCH}" == 'x86_64' ]]; then
|
||||
download_artifact "${CI_PIPELINE_ID}" 'fenix' 'x86_64' "${IRONFOX_APK_ARTIFACTS}"
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_DOWN_ARCH}" == 'bundle' ]]; then
|
||||
download_artifact "${CI_PIPELINE_ID}" 'fenix' 'universal' "${IRONFOX_APK_ARTIFACTS}"
|
||||
download_artifact "${CI_PIPELINE_ID}" 'fenix' 'bundle' "${IRONFOX_APKS_ARTIFACTS}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_DOWN_GECKOVIEW}" == 1 ]]; then
|
||||
if [[ "${IRONFOX_AR_DOWN_ARCH}" == 'arm64' ]]; then
|
||||
download_artifact "${CI_PIPELINE_ID}" 'geckoview' 'arm64' "${IRONFOX_AAR_ARTIFACTS}"
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_DOWN_ARCH}" == 'arm' ]]; then
|
||||
download_artifact "${CI_PIPELINE_ID}" 'geckoview' 'arm' "${IRONFOX_AAR_ARTIFACTS}"
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_DOWN_ARCH}" == 'x86_64' ]]; then
|
||||
download_artifact "${CI_PIPELINE_ID}" 'geckoview' 'x86_64' "${IRONFOX_AAR_ARTIFACTS}"
|
||||
fi
|
||||
fi
|
||||
43
scripts/ci-download-artifacts.sh
Executable file
43
scripts/ci-download-artifacts.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
if [[ "${CI_COMMIT_REF_NAME}" == "${PRODUCTION_BRANCH}" ]]; then
|
||||
# Target release
|
||||
export IRONFOX_RELEASE=1
|
||||
fi
|
||||
|
||||
# Set-up our environment
|
||||
if [[ -z "${IRONFOX_CI+x}" ]]; then
|
||||
export IRONFOX_CI=1
|
||||
fi
|
||||
if [[ -z "${IRONFOX_SET_ENVS+x}" ]]; then
|
||||
bash -x $(dirname $0)/env.sh
|
||||
fi
|
||||
source $(dirname $0)/env.sh
|
||||
|
||||
# Include utilities
|
||||
source "${IRONFOX_UTILS}"
|
||||
|
||||
# Set-up target parameters
|
||||
readonly target_artifact=$(echo "${1}" | "${IRONFOX_AWK}" '{print tolower($0)}')
|
||||
readonly target_arch=$(echo "${2}" | "${IRONFOX_AWK}" '{print tolower($0)}')
|
||||
|
||||
# Upload our artifacts
|
||||
readonly IRONFOX_FROM_AR_DOWN=1
|
||||
export IRONFOX_FROM_AR_DOWN
|
||||
if [[ "${IRONFOX_LOG_AR_DOWN}" == 1 ]]; then
|
||||
readonly AR_DOWN_LOG_FILE="${IRONFOX_LOG_DIR}/download-artifacts-${CI_PIPELINE_ID}-${target_artifact}.log"
|
||||
|
||||
# If the log file already exists, remove it
|
||||
if [[ -f "${AR_DOWN_LOG_FILE}" ]]; then
|
||||
rm "${AR_DOWN_LOG_FILE}"
|
||||
fi
|
||||
|
||||
# Ensure our log directory exists
|
||||
mkdir -vp "${IRONFOX_LOG_DIR}"
|
||||
|
||||
bash -x "${IRONFOX_SCRIPTS}/ci-download-artifacts-if.sh" "${target_artifact}" "${target_arch}" > >(tee -a "${AR_DOWN_LOG_FILE}") 2>&1
|
||||
else
|
||||
bash -x "${IRONFOX_SCRIPTS}/ci-download-artifacts-if.sh" "${target_artifact}" "${target_arch}"
|
||||
fi
|
||||
@@ -22,22 +22,26 @@ source "${IRONFOX_UTILS}"
|
||||
|
||||
# Set-up target parameters
|
||||
if [[ -z "${1+x}" ]]; then
|
||||
echo_red_text "Usage: $0 android-keystore|s3|sb" >&1
|
||||
echo_red_text "Usage: $0 android-keystore|s3-artifacts|s3-releases|sb" >&1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
readonly ci_prep_target=$(echo "${1}" | "${IRONFOX_AWK}" '{print tolower($0)}')
|
||||
|
||||
IRONFOX_CI_PREP_ANDROID_KEYSTORE=0
|
||||
IRONFOX_CI_PREP_S3=0
|
||||
IRONFOX_CI_PREP_S3_ARTIFACTS=0
|
||||
IRONFOX_CI_PREP_S3_RELEASES=0
|
||||
IRONFOX_CI_PREP_SB_GAPI_KEY=0
|
||||
|
||||
if [[ "${ci_prep_target}" == 'android-ks' ]]; then
|
||||
# Set-up the Android keystore
|
||||
IRONFOX_CI_PREP_ANDROID_KEYSTORE=1
|
||||
elif [[ "${ci_prep_target}" == 's3' ]]; then
|
||||
# Set-up S3 storage
|
||||
IRONFOX_CI_PREP_S3=1
|
||||
elif [[ "${ci_prep_target}" == 's3-artifacts' ]]; then
|
||||
# Set-up S3 storage - Artifacts
|
||||
IRONFOX_CI_PREP_S3_ARTIFACTS=1
|
||||
elif [[ "${ci_prep_target}" == 's3-releases' ]]; then
|
||||
# Set-up S3 storage - Releases
|
||||
IRONFOX_CI_PREP_S3_RELEASES=1
|
||||
elif [[ "${ci_prep_target}" == 'sb' ]]; then
|
||||
# Set-up the Google Safe Browsing API key
|
||||
IRONFOX_CI_PREP_SB_GAPI_KEY=1
|
||||
@@ -45,11 +49,13 @@ else
|
||||
echo_red_text "ERROR: Invalid target: ${ci_prep_target}\n You must enter one of the following:"
|
||||
echo 'Android keystore: android-keystore'
|
||||
echo 'Google Safe Browsing API key: sb'
|
||||
echo 'S3 storage: s3'
|
||||
echo 'S3 storage - Artifacts: s3-artifacts'
|
||||
echo 'S3 storage - Releases: s3-releases'
|
||||
exit 1
|
||||
fi
|
||||
readonly IRONFOX_CI_PREP_ANDROID_KEYSTORE
|
||||
readonly IRONFOX_CI_PREP_S3
|
||||
readonly IRONFOX_CI_PREP_S3_ARTIFACTS
|
||||
readonly IRONFOX_CI_PREP_S3_RELEASES
|
||||
readonly IRONFOX_CI_PREP_SB_GAPI_KEY
|
||||
|
||||
# Android keystore
|
||||
@@ -162,9 +168,135 @@ function prep_android_keystore() {
|
||||
echo_green_text 'SUCCESS: Prepared Android keystore'
|
||||
}
|
||||
|
||||
# S3 storage
|
||||
function prep_s3() {
|
||||
echo_red_text 'Preparing S3 storage...'
|
||||
# S3 storage - Artifacts
|
||||
function prep_s3_artifacts() {
|
||||
echo_red_text 'Preparing S3 storage - Artifacts...'
|
||||
|
||||
# First, ensure that environment variables specified externally (from CI) are properly set...
|
||||
|
||||
## S3 access key
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY+x}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_ACCESS_KEY environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
readonly IRONFOX_ARTIFACTS_S3_ACCESS_KEY
|
||||
|
||||
## S3 bucket name
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME+x}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_BUCKET_NAME environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
readonly IRONFOX_ARTIFACTS_S3_BUCKET_NAME
|
||||
|
||||
## S3 endpoint
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_ENDPOINT+x}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_ENDPOINT environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
readonly IRONFOX_ARTIFACTS_S3_ENDPOINT
|
||||
|
||||
## S3 secret key
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_SECRET_KEY+x}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_SECRET_KEY environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
readonly IRONFOX_ARTIFACTS_S3_SECRET_KEY
|
||||
|
||||
# Now, ensure that our S3 file variables (defined at `env_common.sh`, set at `env_ci.sh`) are properly set...
|
||||
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}" == 'null' ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE environment variable has not been specified! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}" == 'null' ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE environment variable has not been specified! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}" == 'null' ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE environment variable has not been specified! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}" == 'null' ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE environment variable has not been specified! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create our directories
|
||||
mkdir -p $(dirname "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}")
|
||||
mkdir -p $(dirname "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}")
|
||||
mkdir -p $(dirname "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}")
|
||||
mkdir -p $(dirname "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}")
|
||||
|
||||
# Create the S3 access key file
|
||||
touch "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}"
|
||||
chmod 600 "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}"
|
||||
echo -n "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY}" > "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}"
|
||||
|
||||
# Create the S3 bucket name file
|
||||
touch "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}"
|
||||
chmod 600 "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}"
|
||||
echo -n "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME}" > "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}"
|
||||
|
||||
# Create the S3 endpoint file
|
||||
touch "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}"
|
||||
chmod 600 "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}"
|
||||
echo -n "${IRONFOX_ARTIFACTS_S3_ENDPOINT}" > "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}"
|
||||
|
||||
# Create the S3 secret key file
|
||||
touch "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}"
|
||||
chmod 600 "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}"
|
||||
echo -n "${IRONFOX_ARTIFACTS_S3_SECRET_KEY}" > "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}"
|
||||
|
||||
# Ensure nothing went wrong...
|
||||
if [[ ! -s "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 access key file ${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE} is empty!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -s "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 bucket name file ${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE} is empty!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -s "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 endpoint file ${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE} is empty!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -s "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 secret key file ${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE} is empty!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo_green_text 'SUCCESS: Prepared S3 storage - Artifacts'
|
||||
}
|
||||
|
||||
# S3 storage - Releases
|
||||
function prep_s3_releases() {
|
||||
echo_red_text 'Preparing S3 storage - Releases...'
|
||||
|
||||
# First, ensure that environment variables specified externally (from CI) are properly set...
|
||||
|
||||
@@ -285,7 +417,7 @@ function prep_s3() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo_green_text 'SUCCESS: Prepared S3 storage'
|
||||
echo_green_text 'SUCCESS: Prepared S3 storage - Releases'
|
||||
}
|
||||
|
||||
# Google Safe Browsing API key
|
||||
@@ -332,8 +464,10 @@ function prep_sb_gapi_key() {
|
||||
# Prepare our secrets...
|
||||
if [[ "${IRONFOX_CI_PREP_ANDROID_KEYSTORE}" == 1 ]]; then
|
||||
prep_android_keystore
|
||||
elif [[ "${IRONFOX_CI_PREP_S3}" == 1 ]]; then
|
||||
prep_s3
|
||||
elif [[ "${IRONFOX_CI_PREP_S3_ARTIFACTS}" == 1 ]]; then
|
||||
prep_s3_artifacts
|
||||
elif [[ "${IRONFOX_CI_PREP_S3_RELEASES}" == 1 ]]; then
|
||||
prep_s3_releases
|
||||
elif [[ "${IRONFOX_CI_PREP_SB_GAPI_KEY}" == 1 ]]; then
|
||||
prep_sb_gapi_key
|
||||
fi
|
||||
|
||||
@@ -43,7 +43,7 @@ function download_release() {
|
||||
if [[ "${local_sha512sum}" != "${expected_sha512sum}" ]]; then
|
||||
echo_red_text 'ERROR: Checksum validation failed.'
|
||||
echo "Expected SHA512sum: ${expected_sha512sum}"
|
||||
echo "Actual SHA512sum: ${local_sha512sum}"
|
||||
echo "Actual SHA512sum: ${local_sha512sum}"
|
||||
|
||||
# If checksum validation fails, also just clean-up the files
|
||||
rm -f "${output_apk}"
|
||||
|
||||
338
scripts/ci-upload-artifacts-if.sh
Executable file
338
scripts/ci-upload-artifacts-if.sh
Executable file
@@ -0,0 +1,338 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Ensure this is never ran with xtrace...
|
||||
set +x
|
||||
|
||||
# Set-up our environment
|
||||
if [[ -z "${IRONFOX_CI+x}" ]]; then
|
||||
export IRONFOX_CI=1
|
||||
fi
|
||||
source $(dirname $0)/env.sh
|
||||
|
||||
# Include utilities
|
||||
source "${IRONFOX_UTILS}"
|
||||
|
||||
if [[ -z "${IRONFOX_FROM_AR_UP+x}" ]]; then
|
||||
echo_red_text 'ERROR: Do not call ci-upload-artifacts-if.sh directly. Instead, use ci-upload-artifacts.sh.' >&1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}" == 'null' ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE environment variable has not been specified! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 access key file not found! (${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE})"
|
||||
echo_green_text "Please ensure the IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE environment variable is set to the correct path in which the key file is located."
|
||||
echo_red_text "Aborting..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -s "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 access key file ${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE} is empty!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_RELEASES_S3_BUCKET_NAME_FILE}" == 'null' ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_RELEASES_S3_BUCKET_NAME_FILE environment variable has not been specified! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 bucket name file not found! (${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE})"
|
||||
echo_green_text "Please ensure the IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE environment variable is set to the correct path in which the bucket name file is located."
|
||||
echo_red_text "Aborting..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -s "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 bucket name file ${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE} is empty!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}" == 'null' ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE environment variable has not been specified! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 endpoint file not found! (${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE})"
|
||||
echo_green_text "Please ensure the IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE environment variable is set to the correct path in which the endpoint file is located."
|
||||
echo_red_text "Aborting..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -s "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 bucket name file ${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE} is empty!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}" == 'null' ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE environment variable has not been specified! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}" ]]; then
|
||||
echo_red_text 'ERROR: The IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE environment variable is missing! Aborting...'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 secret key file not found! (${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE})"
|
||||
echo_green_text "Please ensure the IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE environment variable is set to the correct path in which the key file is located."
|
||||
echo_red_text "Aborting..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -s "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}" ]]; then
|
||||
echo_red_text "ERROR: S3 secret key file ${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE} is empty!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
readonly up_artifact="$1"
|
||||
|
||||
# Set-up target parameters
|
||||
IRONFOX_AR_UP_FENIX=0
|
||||
IRONFOX_AR_UP_GECKOVIEW=0
|
||||
|
||||
if [[ "${up_artifact}" == 'fenix' ]]; then
|
||||
# Push Fenix
|
||||
IRONFOX_AR_UP_FENIX=1
|
||||
elif [[ "${up_artifact}" == 'geckoview' ]]; then
|
||||
# Push GeckoView
|
||||
IRONFOX_AR_UP_GECKOVIEW=1
|
||||
else
|
||||
echo_red_text "ERROR: Invalid artifact: ${up_artifact}\n You must enter one of the following:"
|
||||
echo 'Fenix: fenix'
|
||||
echo 'GeckoView: geckoview'
|
||||
exit 1
|
||||
fi
|
||||
readonly IRONFOX_AR_UP_FENIX
|
||||
readonly IRONFOX_AR_UP_GECKOVIEW
|
||||
|
||||
readonly up_arch="$2"
|
||||
|
||||
if [[ "${up_arch}" != 'arm64' ]] && [[ "${up_arch}" != 'arm' ]] && [[ "${up_arch}" != 'x86_64' ]] && [[ "${up_arch}" != 'bundle' ]]; then
|
||||
echo_red_text "ERROR: Invalid target architecture: ${up_arch}\n You must enter one of the following:"
|
||||
echo 'ARM64: arm64'
|
||||
echo 'ARM: arm'
|
||||
echo 'x86_64: x86_64'
|
||||
echo 'Bundle: bundle'
|
||||
exit 1
|
||||
fi
|
||||
readonly IRONFOX_AR_UP_ARCH="${up_arch}"
|
||||
|
||||
# Set timezone to UTC for consistency
|
||||
unset TZ
|
||||
export TZ="UTC"
|
||||
|
||||
# Verifies that a file exists and is not empty
|
||||
function verify_file() {
|
||||
function print_usage() {
|
||||
echo "Usage: verify_file '/path/to/file'"
|
||||
}
|
||||
|
||||
if [[ -z "${1+x}" ]]; then
|
||||
echo_red_text 'ERROR: Please specify the path to a file to verify'
|
||||
print_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local readonly file_to_verify="$1"
|
||||
|
||||
if [[ ! -f "${file_to_verify}" ]]; then
|
||||
echo_red_text "ERROR: File ${file_to_verify} does not exist!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -s "${file_to_verify}" ]]; then
|
||||
echo_red_text "ERROR: File ${file_to_verify} is empty!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Pushes a file to S3
|
||||
function push_file() {
|
||||
function print_usage() {
|
||||
echo "Usage: push_file '/path/to/file' 'path/on/s3'"
|
||||
}
|
||||
|
||||
if [[ -z "${1+x}" ]]; then
|
||||
echo_red_text 'ERROR: Please specify the path to a file that should be uploaded to S3 storage'
|
||||
print_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${2+x}" ]]; then
|
||||
echo_red_text 'ERROR: Please specify the target path on S3 storage for where the file should be uploaded'
|
||||
print_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local readonly push_file="$1"
|
||||
local readonly s3_path="$2"
|
||||
local readonly s3_full_path="${s3_path}/$(basename "${push_file}")"
|
||||
|
||||
# Ensure our file to push is valid
|
||||
verify_file "${push_file}"
|
||||
|
||||
# Set our MIME type
|
||||
case "${push_file}" in
|
||||
*.apk)
|
||||
local readonly mime_type='application/vnd.android.package-archive'
|
||||
;;
|
||||
*.apks)
|
||||
local readonly mime_type='application/vnd.android.package-archive'
|
||||
;;
|
||||
*.json)
|
||||
local readonly mime_type='application/json'
|
||||
;;
|
||||
*.log)
|
||||
local readonly mime_type='text/plain'
|
||||
;;
|
||||
*.txt)
|
||||
local readonly mime_type='text/plain'
|
||||
;;
|
||||
*.zip)
|
||||
local readonly mime_type='application/zip'
|
||||
;;
|
||||
*)
|
||||
echo_red_text "ERROR: Unsupported file type: ${push_file}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
local readonly s3_access_key=$(cat "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE}" | xargs)
|
||||
local readonly s3_bucket_name=$(cat "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE}" | xargs)
|
||||
local readonly s3_endpoint=$(cat "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE}" | xargs)
|
||||
local readonly s3_secret_key=$(cat "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE}" | xargs)
|
||||
|
||||
echo_red_text "Uploading ${push_file} to S3..."
|
||||
source "${IRONFOX_PYENV}"
|
||||
"${IRONFOX_S3CMD}" ${IRONFOX_S3CMD_FLAGS} --mime-type="${mime_type}" put "${push_file}" "s3://${s3_bucket_name}/${s3_full_path}" \
|
||||
--access_key="${s3_access_key}" \
|
||||
--secret_key="${s3_secret_key}" \
|
||||
--host="${s3_endpoint}" \
|
||||
--host-bucket="${s3_endpoint}"
|
||||
echo_green_text "SUCCESS: Uploaded ${push_file} to S3"
|
||||
}
|
||||
|
||||
# Creates and pushes a SHA512sum for a file to S3
|
||||
function add_sha512sum() {
|
||||
function print_usage() {
|
||||
echo "Usage: add_sha512sum '/path/to/file'"
|
||||
}
|
||||
|
||||
if [[ -z "${1+x}" ]]; then
|
||||
echo_red_text 'ERROR: Please specify the path to a file that a SHA512sum should be created for'
|
||||
print_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local readonly sha512sum_file_in="$1"
|
||||
local readonly sha512sum_file_name=$(basename "${sha512sum_file_in}")
|
||||
local readonly sha512sum_file_path=$(dirname "${sha512sum_file_in}")
|
||||
|
||||
if [[ -z "${2+x}" ]]; then
|
||||
local readonly sha512sum_s3path=$(basename "${sha512sum_file_path}" | "${IRONFOX_AWK}" '{print tolower($0)}')
|
||||
else
|
||||
local readonly sha512sum_s3path="$2"
|
||||
fi
|
||||
|
||||
# Ensure our file to create a SHA512sum for is valid
|
||||
verify_file "${sha512sum_file_in}"
|
||||
|
||||
local readonly sha512sum_file_out="${sha512sum_file_path}/${sha512sum_file_name}-sha512sum.txt"
|
||||
|
||||
# If there's already a SHA512sum file, remove it
|
||||
if [[ -f "${sha512sum_file_out}" ]]; then
|
||||
rm -f "${sha512sum_file_out}"
|
||||
fi
|
||||
|
||||
local readonly local_sha512sum=$(sha512sum "${sha512sum_file_in}" | "${IRONFOX_AWK}" '{print $1}')
|
||||
echo -n "${local_sha512sum}" > "${sha512sum_file_out}"
|
||||
|
||||
push_file "${sha512sum_file_out}" "${sha512sum_s3path}"
|
||||
}
|
||||
|
||||
# Creates a SHA512sum for and pushes a file to S3
|
||||
function push_and_add_sha512sum() {
|
||||
function print_usage() {
|
||||
echo "Usage: push_and_add_sha512sum '/path/to/file' 'path/on/s3'"
|
||||
}
|
||||
|
||||
if [[ -z "${1+x}" ]]; then
|
||||
echo_red_text 'ERROR: Please specify the path to a file that should be uploaded to S3 storage'
|
||||
print_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${2+x}" ]]; then
|
||||
echo_red_text 'ERROR: Please specify the target path on S3 storage for where the file should be uploaded'
|
||||
print_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local readonly file_in="$1"
|
||||
local readonly s3_path_out="$2"
|
||||
|
||||
# Ensure our file to create a SHA512sum for and push is valid
|
||||
verify_file "${file_in}"
|
||||
|
||||
# Push our file to S3
|
||||
push_file "${file_in}" "${s3_path_out}"
|
||||
|
||||
# Create and push a SHA512sum for our file to S3
|
||||
add_sha512sum "${file_in}" "${s3_path_out}"
|
||||
}
|
||||
|
||||
if [[ "${IRONFOX_AR_UP_FENIX}" == 1 ]]; then
|
||||
if [[ "${IRONFOX_AR_UP_ARCH}" == 'arm64' ]] || [[ "${IRONFOX_AR_UP_ARCH}" == 'bundle' ]]; then
|
||||
push_and_add_sha512sum "${IRONFOX_OUTPUTS_ARM64}" "${CI_PIPELINE_ID}"
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_UP_ARCH}" == 'arm' ]] || [[ "${IRONFOX_AR_UP_ARCH}" == 'bundle' ]]; then
|
||||
push_and_add_sha512sum "${IRONFOX_OUTPUTS_ARM}" "${CI_PIPELINE_ID}"
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_UP_ARCH}" == 'x86_64' ]] || [[ "${IRONFOX_AR_UP_ARCH}" == 'bundle' ]]; then
|
||||
push_and_add_sha512sum "${IRONFOX_OUTPUTS_X86_64}" "${CI_PIPELINE_ID}"
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_UP_ARCH}" == 'bundle' ]]; then
|
||||
push_and_add_sha512sum "${IRONFOX_OUTPUTS_UNIVERSAL}" "${CI_PIPELINE_ID}"
|
||||
push_and_add_sha512sum "${IRONFOX_OUTPUTS_BUNDLE}" "${CI_PIPELINE_ID}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_UP_GECKOVIEW}" == 1 ]]; then
|
||||
if [[ "${IRONFOX_AR_UP_ARCH}" == 'arm64' ]]; then
|
||||
push_and_add_sha512sum "${IRONFOX_OUTPUTS_GECKOVIEW_AAR_ARM64}" "${CI_PIPELINE_ID}"
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_UP_ARCH}" == 'arm' ]]; then
|
||||
push_and_add_sha512sum "${IRONFOX_OUTPUTS_GECKOVIEW_AAR_ARM}" "${CI_PIPELINE_ID}"
|
||||
fi
|
||||
|
||||
if [[ "${IRONFOX_AR_UP_ARCH}" == 'x86_64' ]]; then
|
||||
push_and_add_sha512sum "${IRONFOX_OUTPUTS_GECKOVIEW_AAR_ARM}" "${CI_PIPELINE_ID}"
|
||||
fi
|
||||
fi
|
||||
43
scripts/ci-upload-artifacts.sh
Executable file
43
scripts/ci-upload-artifacts.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
if [[ "${CI_COMMIT_REF_NAME}" == "${PRODUCTION_BRANCH}" ]]; then
|
||||
# Target release
|
||||
export IRONFOX_RELEASE=1
|
||||
fi
|
||||
|
||||
# Set-up our environment
|
||||
if [[ -z "${IRONFOX_CI+x}" ]]; then
|
||||
export IRONFOX_CI=1
|
||||
fi
|
||||
if [[ -z "${IRONFOX_SET_ENVS+x}" ]]; then
|
||||
bash -x $(dirname $0)/env.sh
|
||||
fi
|
||||
source $(dirname $0)/env.sh
|
||||
|
||||
# Include utilities
|
||||
source "${IRONFOX_UTILS}"
|
||||
|
||||
# Set-up target parameters
|
||||
readonly target_artifact=$(echo "${1}" | "${IRONFOX_AWK}" '{print tolower($0)}')
|
||||
readonly target_arch=$(echo "${2}" | "${IRONFOX_AWK}" '{print tolower($0)}')
|
||||
|
||||
# Upload our artifacts
|
||||
readonly IRONFOX_FROM_AR_UP=1
|
||||
export IRONFOX_FROM_AR_UP
|
||||
if [[ "${IRONFOX_LOG_AR_UP}" == 1 ]]; then
|
||||
readonly AR_UP_LOG_FILE="${IRONFOX_LOG_DIR}/upload-artifacts-${CI_PIPELINE_ID}-${target_artifact}.log"
|
||||
|
||||
# If the log file already exists, remove it
|
||||
if [[ -f "${AR_UP_LOG_FILE}" ]]; then
|
||||
rm "${AR_UP_LOG_FILE}"
|
||||
fi
|
||||
|
||||
# Ensure our log directory exists
|
||||
mkdir -vp "${IRONFOX_LOG_DIR}"
|
||||
|
||||
bash "${IRONFOX_SCRIPTS}/ci-upload-artifacts-if.sh" "${target_artifact}" "${target_arch}" > >(tee -a "${AR_UP_LOG_FILE}") 2>&1
|
||||
else
|
||||
bash "${IRONFOX_SCRIPTS}/ci-upload-artifacts-if.sh" "${target_artifact}" "${target_arch}"
|
||||
fi
|
||||
@@ -19,18 +19,23 @@ export IRONFOX_LOCAL_AS_VERSION_OVERRIDE="$("${IRONFOX_DATE}" -d "${CI_PIPELINE_
|
||||
export IRONFOX_LOCAL_GLEAN_VERSION_OVERRIDE="$("${IRONFOX_DATE}" -d "${CI_PIPELINE_CREATED_AT}" "+%s%N")"
|
||||
|
||||
# GeckoView AAR archives
|
||||
export IRONFOX_GECKOVIEW_AAR_ARM64_DIR="${IRONFOX_EXTERNAL}/geckoview-arm64"
|
||||
export IRONFOX_GECKOVIEW_AAR_ARM64="${IRONFOX_GECKOVIEW_AAR_ARM64_DIR}/aar/geckoview-arm64-v8a.zip"
|
||||
export IRONFOX_GECKOVIEW_AAR_ARM_DIR="${IRONFOX_EXTERNAL}/geckoview-arm"
|
||||
export IRONFOX_GECKOVIEW_AAR_ARM="${IRONFOX_GECKOVIEW_AAR_ARM_DIR}/aar/geckoview-armeabi-v7a.zip"
|
||||
export IRONFOX_GECKOVIEW_AAR_X86_64_DIR="${IRONFOX_EXTERNAL}/geckoview-x86_64"
|
||||
export IRONFOX_GECKOVIEW_AAR_X86_64="${IRONFOX_GECKOVIEW_AAR_X86_64_DIR}/aar/geckoview-x86_64.zip"
|
||||
export IRONFOX_GECKOVIEW_AAR_ARM64="${IRONFOX_AAR_ARTIFACTS}/geckoview-arm64-v8a.zip"
|
||||
export IRONFOX_GECKOVIEW_AAR_ARM="${IRONFOX_AAR_ARTIFACTS}/geckoview-armeabi-v7a.zip"
|
||||
export IRONFOX_GECKOVIEW_AAR_X86_64="${IRONFOX_AAR_ARTIFACTS}/geckoview-x86_64.zip"
|
||||
export IRONFOX_GECKOVIEW_BUNDLE_DIRECT=1
|
||||
|
||||
# Log directory
|
||||
export IRONFOX_LOG_DIR="${IRONFOX_LOG_ARTIFACTS}"
|
||||
|
||||
# S3
|
||||
|
||||
## Artifacts
|
||||
export IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE='/opt/IronFox/ironfox-artifacts-s3-access-key.txt'
|
||||
export IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE='/opt/IronFox/ironfox-artifacts-s3-bucket-name.txt'
|
||||
export IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE='/opt/IronFox/ironfox-artifacts-s3-endpoint.txt'
|
||||
export IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE='/opt/IronFox/ironfox-artifacts-s3-secret-key.txt'
|
||||
|
||||
## Releases
|
||||
export IRONFOX_RELEASES_S3_ACCESS_KEY_FILE='/opt/IronFox/ironfox-releases-s3-access-key.txt'
|
||||
export IRONFOX_RELEASES_S3_BUCKET_NAME_FILE='/opt/IronFox/ironfox-releases-s3-bucket-name.txt'
|
||||
export IRONFOX_RELEASES_S3_ENDPOINT_FILE='/opt/IronFox/ironfox-releases-s3-endpoint.txt'
|
||||
|
||||
@@ -176,6 +176,22 @@ fi
|
||||
readonly IRONFOX_LOG_BUILD
|
||||
export IRONFOX_LOG_BUILD
|
||||
|
||||
# Should we create a log file for ci-download-artifacts.sh? (Default)
|
||||
readonly IRONFOX_LOG_AR_DOWN_DEFAULT=1
|
||||
if [[ -z "${IRONFOX_LOG_AR_DOWN+x}" ]]; then
|
||||
IRONFOX_LOG_AR_DOWN="${IRONFOX_LOG_AR_DOWN_DEFAULT}"
|
||||
fi
|
||||
readonly IRONFOX_LOG_AR_DOWN
|
||||
export IRONFOX_LOG_AR_DOWN
|
||||
|
||||
# Should we create a log file for ci-upload-artifacts.sh? (Default)
|
||||
readonly IRONFOX_LOG_AR_UP_DEFAULT=1
|
||||
if [[ -z "${IRONFOX_LOG_AR_UP+x}" ]]; then
|
||||
IRONFOX_LOG_AR_UP="${IRONFOX_LOG_AR_UP_DEFAULT}"
|
||||
fi
|
||||
readonly IRONFOX_LOG_AR_UP
|
||||
export IRONFOX_LOG_AR_UP
|
||||
|
||||
# Should we create a log file for prebuild.sh? (Default)
|
||||
readonly IRONFOX_LOG_PREBUILD_DEFAULT=1
|
||||
if [[ -z "${IRONFOX_LOG_PREBUILD+x}" ]]; then
|
||||
@@ -1131,7 +1147,43 @@ export IRONFOX_SIGN_SKIP_ADB
|
||||
|
||||
# S3
|
||||
|
||||
# S3 access key
|
||||
## Artifacts
|
||||
|
||||
### S3 access key
|
||||
readonly IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE_DEFAULT='null'
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE+x}" ]]; then
|
||||
IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE="${IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE_DEFAULT}"
|
||||
fi
|
||||
readonly IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE
|
||||
export IRONFOX_ARTIFACTS_S3_ACCESS_KEY_FILE
|
||||
|
||||
### S3 bucket name
|
||||
readonly IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE_DEFAULT='null'
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE+x}" ]]; then
|
||||
IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE="${IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE_DEFAULT}"
|
||||
fi
|
||||
readonly IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE
|
||||
export IRONFOX_ARTIFACTS_S3_BUCKET_NAME_FILE
|
||||
|
||||
### S3 endpoint
|
||||
readonly IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE_DEFAULT='null'
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE+x}" ]]; then
|
||||
IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE="${IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE_DEFAULT}"
|
||||
fi
|
||||
readonly IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE
|
||||
export IRONFOX_ARTIFACTS_S3_ENDPOINT_FILE
|
||||
|
||||
### S3 secret key
|
||||
readonly IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE_DEFAULT='null'
|
||||
if [[ -z "${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE+x}" ]]; then
|
||||
IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE="${IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE_DEFAULT}"
|
||||
fi
|
||||
readonly IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE
|
||||
export IRONFOX_ARTIFACTS_S3_SECRET_KEY_FILE
|
||||
|
||||
## Releases
|
||||
|
||||
### S3 access key
|
||||
readonly IRONFOX_RELEASES_S3_ACCESS_KEY_FILE_DEFAULT='null'
|
||||
if [[ -z "${IRONFOX_RELEASES_S3_ACCESS_KEY_FILE+x}" ]]; then
|
||||
IRONFOX_RELEASES_S3_ACCESS_KEY_FILE="${IRONFOX_RELEASES_S3_ACCESS_KEY_FILE_DEFAULT}"
|
||||
@@ -1139,7 +1191,7 @@ fi
|
||||
readonly IRONFOX_RELEASES_S3_ACCESS_KEY_FILE
|
||||
export IRONFOX_RELEASES_S3_ACCESS_KEY_FILE
|
||||
|
||||
# S3 bucket name
|
||||
### S3 bucket name
|
||||
readonly IRONFOX_RELEASES_S3_BUCKET_NAME_FILE_DEFAULT='null'
|
||||
if [[ -z "${IRONFOX_RELEASES_S3_BUCKET_NAME_FILE+x}" ]]; then
|
||||
IRONFOX_RELEASES_S3_BUCKET_NAME_FILE="${IRONFOX_RELEASES_S3_BUCKET_NAME_FILE_DEFAULT}"
|
||||
@@ -1147,7 +1199,7 @@ fi
|
||||
readonly IRONFOX_RELEASES_S3_BUCKET_NAME_FILE
|
||||
export IRONFOX_RELEASES_S3_BUCKET_NAME_FILE
|
||||
|
||||
# S3 endpoint
|
||||
### S3 endpoint
|
||||
readonly IRONFOX_RELEASES_S3_ENDPOINT_FILE_DEFAULT='null'
|
||||
if [[ -z "${IRONFOX_RELEASES_S3_ENDPOINT_FILE+x}" ]]; then
|
||||
IRONFOX_RELEASES_S3_ENDPOINT_FILE="${IRONFOX_RELEASES_S3_ENDPOINT_FILE_DEFAULT}"
|
||||
@@ -1155,7 +1207,7 @@ fi
|
||||
readonly IRONFOX_RELEASES_S3_ENDPOINT_FILE
|
||||
export IRONFOX_RELEASES_S3_ENDPOINT_FILE
|
||||
|
||||
# S3 secret key
|
||||
### S3 secret key
|
||||
readonly IRONFOX_RELEASES_S3_SECRET_KEY_FILE_DEFAULT='null'
|
||||
if [[ -z "${IRONFOX_RELEASES_S3_SECRET_KEY_FILE+x}" ]]; then
|
||||
IRONFOX_RELEASES_S3_SECRET_KEY_FILE="${IRONFOX_RELEASES_S3_SECRET_KEY_FILE_DEFAULT}"
|
||||
@@ -1189,30 +1241,6 @@ fi
|
||||
readonly IRONFOX_GECKOVIEW_AAR_X86_64
|
||||
export IRONFOX_GECKOVIEW_AAR_X86_64
|
||||
|
||||
# Location of where CI should extract the ARM64 GeckoView AAR archive
|
||||
readonly IRONFOX_GECKOVIEW_AAR_ARM64_DIR_DEFAULT="${IRONFOX_EXTERNAL}/geckoview-arm64"
|
||||
if [[ -z "${IRONFOX_GECKOVIEW_AAR_ARM64_DIR+x}" ]]; then
|
||||
IRONFOX_GECKOVIEW_AAR_ARM64_DIR="${IRONFOX_GECKOVIEW_AAR_ARM64_DIR_DEFAULT}"
|
||||
fi
|
||||
readonly IRONFOX_GECKOVIEW_AAR_ARM64_DIR
|
||||
export IRONFOX_GECKOVIEW_AAR_ARM64_DIR
|
||||
|
||||
# Location of where CI should extract the ARM GeckoView AAR archive
|
||||
readonly IRONFOX_GECKOVIEW_AAR_ARM_DIR_DEFAULT="${IRONFOX_EXTERNAL}/geckoview-arm"
|
||||
if [[ -z "${IRONFOX_GECKOVIEW_AAR_ARM_DIR+x}" ]]; then
|
||||
IRONFOX_GECKOVIEW_AAR_ARM_DIR="${IRONFOX_GECKOVIEW_AAR_ARM_DIR_DEFAULT}"
|
||||
fi
|
||||
readonly IRONFOX_GECKOVIEW_AAR_ARM_DIR
|
||||
export IRONFOX_GECKOVIEW_AAR_ARM_DIR
|
||||
|
||||
# Location of where CI should extract the x86_64 GeckoView AAR archive
|
||||
readonly IRONFOX_GECKOVIEW_AAR_X86_64_DIR_DEFAULT="${IRONFOX_EXTERNAL}/geckoview-x86_64"
|
||||
if [[ -z "${IRONFOX_GECKOVIEW_AAR_X86_64_DIR+x}" ]]; then
|
||||
IRONFOX_GECKOVIEW_AAR_X86_64_DIR="${IRONFOX_GECKOVIEW_AAR_X86_64_DIR_DEFAULT}"
|
||||
fi
|
||||
readonly IRONFOX_GECKOVIEW_AAR_X86_64_DIR
|
||||
export IRONFOX_GECKOVIEW_AAR_X86_64_DIR
|
||||
|
||||
source "${IRONFOX_VERSIONS}"
|
||||
|
||||
# Node.js
|
||||
@@ -1363,7 +1391,7 @@ export IRONFOX_OUTPUTS_BUNDLE_AAB
|
||||
if [[ "${IRONFOX_RELEASE}" == 1 ]]; then
|
||||
readonly IRONFOX_OUTPUTS_BUNDLE_DEFAULT="${IRONFOX_OUTPUTS_APKS}/ironfox-${IRONFOX_VERSION}.apks"
|
||||
else
|
||||
readonly IRONFOX_OUTPUTS_BUNDLE_DEFAULT="${IRONFOX_OUTPUTS_APK}/ironfox-${IRONFOX_CHANNEL}-${IRONFOX_VERSION}.apks"
|
||||
readonly IRONFOX_OUTPUTS_BUNDLE_DEFAULT="${IRONFOX_OUTPUTS_APKS}/ironfox-${IRONFOX_CHANNEL}-${IRONFOX_VERSION}.apks"
|
||||
fi
|
||||
if [[ -z "${IRONFOX_OUTPUTS_BUNDLE+x}" ]]; then
|
||||
IRONFOX_OUTPUTS_BUNDLE="${IRONFOX_OUTPUTS_BUNDLE_DEFAULT}"
|
||||
|
||||
Reference in New Issue
Block a user