Build Cromite #47
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build Cromite | |
permissions: | |
actions: none | |
checks: none | |
contents: none | |
deployments: none | |
issues: none | |
packages: none | |
pull-requests: none | |
repository-projects: none | |
security-events: none | |
statuses: none | |
on: | |
workflow_dispatch: | |
inputs: | |
sha: | |
description: 'uazo/cromite SHA' | |
required: true | |
default: '' | |
target_os: | |
description: 'targetos [android/win/all]' | |
required: true | |
default: 'all' | |
build: | |
description: 'android arch [arm/arm64/x64/all]' | |
required: true | |
default: 'all' | |
type: | |
description: 'runner? [dev/ci]' | |
required: true | |
default: 'ci' | |
debug: | |
description: 'debug? [true/false]' | |
required: true | |
default: 'false' | |
clangd: | |
description: 'clangd? [true/false]' | |
required: true | |
default: 'false' | |
env: | |
BROMITE_SHA: ${{ github.event.inputs.sha }} | |
REMOVEDOCKERSUPPORT: true | |
USELOCALIMAGE: true | |
jobs: | |
check_images: | |
runs-on: ${{ github.event.inputs.type }} | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v2 | |
with: | |
path: cromite | |
ref: ${{ github.event.inputs.sha }} | |
fetch-depth: 1 | |
- name: Enable proxy on container | |
shell: bash | |
run: | | |
if ! [[ -z "${HTTP_PROXY}" ]]; then | |
PROXY_ADDR=http://$(hostname -I | cut -d' ' -f1 | xargs):8118 | |
echo "PROXY_ADDR=$PROXY_ADDR" >> $GITHUB_ENV | |
sudo iptables -D INPUT -p tcp -s localhost --dport 8118 -j ACCEPT | |
sudo iptables -D INPUT -p tcp --dport 8118 -j DROP | |
fi | |
- name: Get current chromium version | |
shell: bash | |
run: | | |
export VERSION=$( cat ./cromite/build/RELEASE ) | |
rm -rf bromite | |
echo Current version is $VERSION | |
echo "VERSION=$VERSION" >> $GITHUB_ENV | |
cd cromite/tools | |
- name: Building build-deps container ${{ env.VERSION }} | |
shell: bash | |
run: | | |
IS_PRESENT=$(docker inspect --type=image uazo/build-deps:$VERSION > /dev/null ; echo $?) | |
if [ $IS_PRESENT -ne "0" ]; then | |
IS_PRESENT=$(docker manifest inspect uazo/build-deps:$VERSION > /dev/null ; echo $?) | |
if [ $IS_PRESENT -ne "0" ]; then | |
DOCKER_BUILDKIT=1 docker build -t uazo/build-deps:$VERSION \ | |
--progress plain \ | |
--build-arg VERSION=$VERSION \ | |
--build-arg HTTP_PROXY="$PROXY_ADDR" \ | |
--no-cache \ | |
cromite/tools/images/build-deps/. | |
fi | |
fi | |
- name: Building chromium container ${{ env.VERSION }} | |
shell: bash | |
run: | | |
IS_PRESENT=$(docker inspect --type=image uazo/chromium:$VERSION > /dev/null ; echo $?) | |
if [ $IS_PRESENT -ne "0" ]; then | |
IS_PRESENT=$(docker manifest inspect uazo/chromium:$VERSION > /dev/null ; echo $?) | |
if [ $IS_PRESENT -ne "0" ]; then | |
DOCKER_BUILDKIT=1 docker build -t uazo/chromium:$VERSION \ | |
--progress plain \ | |
--build-arg VERSION=$VERSION \ | |
--build-arg HTTP_PROXY="$PROXY_ADDR" \ | |
cromite/tools/images/chr-source/. | |
fi | |
fi | |
- name: Building cromite container ${{ env.VERSION }}-${{ env.BROMITE_SHA }} | |
shell: bash | |
run: | | |
IS_PRESENT=$(docker inspect --type=image uazo/cromite:$VERSION-$BROMITE_SHA > /dev/null ; echo $?) | |
if [ $IS_PRESENT -ne "0" ]; then | |
IS_PRESENT=$(docker manifest inspect uazo/cromite:$VERSION-$BROMITE_SHA > /dev/null ; echo $?) | |
if [ $IS_PRESENT -ne "0" ]; then | |
DOCKER_BUILDKIT=1 docker build -t uazo/cromite:$VERSION-$BROMITE_SHA --progress plain \ | |
--build-arg BROMITE_SHA=$BROMITE_SHA \ | |
--build-arg VERSION=$VERSION \ | |
--build-arg HTTP_PROXY="$PROXY_ADDR" \ | |
cromite/tools/images/bromite-source/. | |
fi | |
fi | |
- name: Building cromite-build container ${{ env.VERSION }}-${{ env.BROMITE_SHA }} | |
shell: bash | |
run: | | |
IS_PRESENT=$(docker inspect --type=image uazo/cromite-build:$VERSION-$BROMITE_SHA > /dev/null ; echo $?) | |
if [ $IS_PRESENT -ne "0" ]; then | |
IS_PRESENT=$(docker manifest inspect uazo/cromite-build:$VERSION-$BROMITE_SHA > /dev/null ; echo $?) | |
if [ $IS_PRESENT -ne "0" ]; then | |
DOCKER_BUILDKIT=1 docker build -t uazo/cromite-build:$VERSION-$BROMITE_SHA --progress plain \ | |
--build-arg BROMITE_SHA=$BROMITE_SHA \ | |
--build-arg VERSION=$VERSION \ | |
--build-arg HTTP_PROXY="$PROXY_ADDR" \ | |
--no-cache \ | |
cromite/tools/images/bromite-build/. | |
fi | |
fi | |
- name: Mark image to build | |
shell: bash | |
run: | | |
IS_PRESENT=$(docker inspect --type=image uazo/cromite-build:build > /dev/null ; echo $?) | |
if [ $IS_PRESENT -eq "0" ]; then | |
docker rmi uazo/cromite-build:build | |
fi | |
docker tag uazo/cromite-build:$VERSION-$BROMITE_SHA uazo/cromite-build:build | |
build: | |
runs-on: ${{ github.event.inputs.type }} | |
needs: check_images | |
if: success() | |
timeout-minutes: 1200 | |
container: | |
image: uazo/cromite-build:build | |
env: | |
REMOVEDOCKERSUPPORT: true # CUSTOM RUNNER: remove sharing of docker socket | |
USELOCALIMAGE: true # CUSTOM RUNNER: permit use of local images | |
USEINTERNALNETWORK: true # CUSTOM RUNNER: create the docker network as internal | |
WORKSPACE: /home/lg/working_dir | |
# kythe | |
KYTHE_CORPUS: chromium.googlesource.com/chromium/src | |
KYTHE_ROOT_DIRECTORY: /home/lg/working_dir/chromium/src | |
KYTHE_OUTPUT_DIRECTORY: /home/lg/working_dir/chromium/src/out/arm64/kythe | |
# cross build | |
DEPOT_TOOLS_WIN_TOOLCHAIN_BASE_URL: /win_sdk/10.0.22621.0/ | |
WINDOWSSDKDIR: "/win_sdk/10.0.22621.0/Windows Kits/10/" | |
GYP_MSVS_OVERRIDE_PATH: /win_sdk/10.0.22621.0/ | |
# compile in debug mode | |
TARGET_ISDEBUG: ${{ github.event.inputs.debug }} | |
TARGET_OS: ${{ github.event.inputs.target_os }} | |
USE_KEYSTORE: true | |
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} | |
CROMITE_PREF_HASH_SEED_BIN: ${{ secrets.CROMITE_PREF_HASH_SEED_BIN }} | |
volumes: | |
- /storage/images/${{ github.event.inputs.sha }}/android/${{ github.event.inputs.debug }}/arm:/home/lg/working_dir/chromium/src/out/arm | |
- /storage/images/${{ github.event.inputs.sha }}/android/${{ github.event.inputs.debug }}/arm64:/home/lg/working_dir/chromium/src/out/arm64 | |
- /storage/images/${{ github.event.inputs.sha }}/android/${{ github.event.inputs.debug }}/x64:/home/lg/working_dir/chromium/src/out/x64 | |
- /storage/images/${{ github.event.inputs.sha }}/win/x64:/home/lg/working_dir/chromium/src/out/win64 | |
- /tmp/proxy:/tmp/proxy | |
- /win_sdk:/win_sdk | |
steps: | |
- name: Prepare Build Container | |
shell: bash | |
run: | | |
# set workspace paths | |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH | |
cd $WORKSPACE | |
# reset proxy env | |
HTTP_PROXY= | |
HTTPS_PROXY= | |
http_proxy= | |
https_proxy= | |
# set out folder permissions | |
test -d chromium/src/out/arm || sudo mkdir -p chromium/src/out/arm && \ | |
sudo chown lg chromium/src/out && | |
sudo chown lg chromium/src/out/arm | |
test -d chromium/src/out/arm64 || sudo mkdir -p chromium/src/out/arm64 && \ | |
sudo chown lg chromium/src/out && | |
sudo chown lg chromium/src/out/arm64 | |
test -d chromium/src/out/win64 || sudo mkdir -p chromium/src/out/win64 && \ | |
sudo chown lg chromium/src/out && | |
sudo chown lg chromium/src/out/win64 | |
test -d chromium/src/out/x64 || sudo mkdir -p chromium/src/out/x64 && \ | |
sudo chown lg chromium/src/out && | |
sudo chown lg chromium/src/out/x64 | |
# make kythe output directory | |
test -d $KYTHE_OUTPUT_DIRECTORY || mkdir -p $KYTHE_OUTPUT_DIRECTORY | |
sudo mkdir -p /run/user/1000/ | |
sudo chown lg /run/user/1000/ | |
sudo chmod g-rxw /run/user/1000/ | |
sudo chmod o-rxw /run/user/1000/ | |
# prepare keystore | |
echo "::group::-------- prepare keystore" | |
cd $WORKSPACE | |
echo "${{ secrets.KEYSTORE }}" > cromite.keystore.asc | |
gpg --homedir ./ -d --passphrase "${{ secrets.KEYSTORE_PASSPHRASE }}" --batch cromite.keystore.asc > cromite.keystore | |
echo "::endgroup::" | |
- name: Build Bromite Android arm64 | |
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm64' || github.event.inputs.build == 'all') }} | |
shell: bash | |
run: | | |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH | |
cd $WORKSPACE/chromium/src | |
echo "::group::-------- gn gen" | |
gn gen --args="import(\"/home/lg/working_dir/bromite/build/bromite.gn_args\") $(cat ../../build_args.gni) target_cpu = \"arm64\" " out/arm64 | |
echo "::endgroup::" | |
echo "::group::-------- gn args" | |
gn args out/arm64/ --list --short | |
gn args out/arm64/ --list >out/arm64/gn_list | |
echo "::endgroup::" | |
ninja -C out/arm64 chrome_public_apk | |
cp ../../bromite/build/RELEASE out/arm64 | |
- name: Get ninja logs Android arm64 | |
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm64' || github.event.inputs.build == 'all') }} | |
shell: bash | |
run: | | |
cd $WORKSPACE | |
$WORKSPACE/ninjatracing/ninjatracing $WORKSPACE/chromium/src/out/arm64/.ninja_log >$WORKSPACE/chromium/src/out/arm64/ninja_log_trace.json | |
python3 $WORKSPACE/chromium/src/third_party/catapult/tracing/bin/trace2html $WORKSPACE/chromium/src/out/arm64/ninja_log_trace.json | |
- name: Build Bromite Windows x64 | |
if: ${{ github.event.inputs.target_os == 'win' || github.event.inputs.target_os == 'all' }} | |
shell: bash | |
run: | | |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH | |
cd $WORKSPACE/chromium/src | |
echo "::group::-------- gn gen" | |
gn gen --args="import(\"/home/lg/working_dir/bromite/build/bromite.gn_args\") target_os = \"win\" $(cat ../../build_args.gni) target_cpu = \"x64\" " out/win64 | |
echo "::endgroup::" | |
echo "::group::-------- gn args" | |
gn args out/win64/ --list --short | |
gn args out/win64/ --list >out/win64/gn_list | |
echo "::endgroup::" | |
ninja -C out/win64 chrome | |
cp ../../bromite/build/RELEASE out/win64 | |
- name: Get ninja logs Windows x64 | |
if: ${{ github.event.inputs.target_os == 'win' || github.event.inputs.target_os == 'all' }} | |
shell: bash | |
run: | | |
cd $WORKSPACE | |
$WORKSPACE/ninjatracing/ninjatracing $WORKSPACE/chromium/src/out/win64/.ninja_log >$WORKSPACE/chromium/src/out/win64/ninja_log_trace.json | |
python3 $WORKSPACE/chromium/src/third_party/catapult/tracing/bin/trace2html $WORKSPACE/chromium/src/out/win64/ninja_log_trace.json | |
- name: Build Bromite Android x64 | |
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'x64' || github.event.inputs.build == 'all') }} | |
shell: bash | |
run: | | |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH | |
cd $WORKSPACE/chromium/src | |
echo "::group::-------- gn gen" | |
gn gen --args="import(\"/home/lg/working_dir/bromite/build/bromite.gn_args\") $(cat ../../build_args.gni) target_cpu = \"x64\" " out/x64 | |
echo "::endgroup::" | |
echo "::group::-------- gn args" | |
gn args out/x64/ --list --short | |
gn args out/x64/ --list >out/x64/gn_list | |
echo "::endgroup::" | |
ninja -C out/x64 chrome_public_apk | |
cp ../../bromite/build/RELEASE out/x64 | |
- name: Get ninja logs Android x64 | |
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'x64' || github.event.inputs.build == 'all') }} | |
shell: bash | |
run: | | |
cd $WORKSPACE | |
$WORKSPACE/ninjatracing/ninjatracing $WORKSPACE/chromium/src/out/x64/.ninja_log >$WORKSPACE/chromium/src/out/x64/ninja_log_trace.json | |
python3 $WORKSPACE/chromium/src/third_party/catapult/tracing/bin/trace2html $WORKSPACE/chromium/src/out/x64/ninja_log_trace.json | |
- name: Generate breakpad symbols for Android arm64 | |
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm64' || github.event.inputs.build == 'all') }} | |
shell: bash | |
run: | | |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH | |
cd $WORKSPACE/chromium/src | |
echo "::group::-------- generating breakpad symbols" | |
ninja -C out/arm64 minidump_stackwalk dump_syms | |
components/crash/content/tools/generate_breakpad_symbols.py --build-dir=out/arm64 \ | |
--symbols-dir=out/arm64/symbols/ --binary=out/arm64/lib.unstripped/libchrome.so \ | |
--platform=android --clear --verbose | |
cp out/arm64/lib.unstripped/libchrome.so out/arm64/symbols/libchrome.lib.so | |
cp out/arm64/minidump_stackwalk out/arm64/symbols | |
cp out/arm64/dump_syms out/arm64/symbols | |
echo "::endgroup::" | |
- name: Generate Supersize data for Android arm64 | |
if: ${{ github.event.inputs.debug == 'false' && (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm64' || github.event.inputs.build == 'all') }} | |
shell: bash | |
run: | | |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH | |
cd $WORKSPACE/chromium/src | |
tools/binary_size/supersize archive out/arm64/chrome.size --apk-file out/arm64/apks/ChromePublic.apk -v | |
- name: Build Bromite Android arm | |
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm' || github.event.inputs.build == 'all') }} | |
shell: bash | |
run: | | |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH | |
cd $WORKSPACE/chromium/src | |
echo "::group::-------- gn gen" | |
gn gen --args="import(\"/home/lg/working_dir/bromite/build/bromite.gn_args\") $(cat ../../build_args.gni) target_cpu = \"arm\" " out/arm | |
echo "::endgroup::" | |
echo "::group::-------- gn args" | |
gn args out/arm/ --list --short | |
gn args out/arm/ --list >out/arm/gn_list | |
echo "::endgroup::" | |
ninja -C out/arm chrome_public_apk | |
cp ../../bromite/build/RELEASE out/arm | |
- name: Get ninja logs Android arm | |
if: ${{ (github.event.inputs.target_os == 'android' || github.event.inputs.target_os == 'all') && (github.event.inputs.build == 'arm' || github.event.inputs.build == 'all') }} | |
shell: bash | |
run: | | |
cd $WORKSPACE | |
$WORKSPACE/ninjatracing/ninjatracing $WORKSPACE/chromium/src/out/arm/.ninja_log >$WORKSPACE/chromium/src/out/arm/ninja_log_trace.json | |
python3 $WORKSPACE/chromium/src/third_party/catapult/tracing/bin/trace2html $WORKSPACE/chromium/src/out/arm/ninja_log_trace.json | |
- name: Generate clangd index for Android arm64 | |
if: ${{ github.event.inputs.clangd == 'true' }} | |
shell: bash | |
run: | | |
PATH=$WORKSPACE/chromium/src/third_party/llvm-build/Release+Asserts/bin:$WORKSPACE/depot_tools/:/usr/local/go/bin:$WORKSPACE/mtool/bin:$PATH | |
cd $WORKSPACE/chromium/src | |
test -f out/arm64/bromite.idx || \ | |
cp -r out/arm64 out/clangd && \ | |
gn gen --args="import(\"/home/lg/working_dir/bromite/build/bromite.gn_args\") $(cat ../../build_args.gni) skip_clangd_unsupported_options = true" out/clangd && \ | |
$WORKSPACE/ninja/ninja -C $WORKSPACE/chromium/src/out/clangd -a chrome_public_apk \ | |
-t compdb cc cxx objc objcxx >$WORKSPACE/chromium/src/out/clangd/compile_commands.json && \ | |
/home/lg/working_dir/clangd_snapshot_20211205/bin/clangd-indexer --executor=all-TUs out/clangd/compile_commands.json >out/arm64/bromite.idx && \ | |
rm -rf out/clangd |