-
Notifications
You must be signed in to change notification settings - Fork 56
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
build_dev_binpkgs: Ensure adevcontainer binpkgs are built
This change introduces build_dev_binpkgs, a script to build binary packages for all dependencies of the devcontainer. This works around an issue with build_packages, which doesn't - leading to build issues with the devcontainer later on. This particularly happens for more complex builds with the devcontainer. Additionally, a call to build_dev_binpkgs has been added to the package publishing step in ci-automation before binary packages are published. Signed-off-by: Thilo Fromm <thilofromm@microsoft.com>
- Loading branch information
Showing
2 changed files
with
99 additions
and
1 deletion.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
#!/bin/bash | ||
# Copyright (c) 2023 by the Flatcar Maintainers. | ||
# Use of this source code is governed by the Apache 2.0 license. | ||
|
||
. "$(dirname "$0")/common.sh" || exit 1 | ||
|
||
# Script must run inside the chroot | ||
assert_inside_chroot | ||
assert_not_root_user | ||
|
||
# Dependencies and packages to include by default. | ||
packages_default=( "coreos-devel/board-packages" ) | ||
|
||
# Packages that are rdeps of the above but should not be included. | ||
# (mostly large packages, e.g. programming languages etc.) | ||
skip_packages_default="dev-lang/rust,virtual/rust,dev-lang/go,dev-lang/go-bootstrap,dev-go/go-md2man" | ||
|
||
|
||
# Developer-visible flags. | ||
DEFINE_string board "${DEFAULT_BOARD}" \ | ||
"The board to build packages for." | ||
DEFINE_string skip_packages "${skip_packages_default[@]}" \ | ||
"Comma-separated list of packages in the dependency tree to skip." | ||
DEFINE_boolean pretend "${FLAGS_FALSE}" \ | ||
"List packages that would be built but do not actually build." | ||
|
||
FLAGS_HELP="usage: $(basename $0) [flags] [packages] | ||
build_dev_binpkgs builds binary packages for all dependencies of [packages] | ||
that are not present in '/build/<board>/var/lib/portage/pkgs/'. | ||
Useful for publishing a complete set of packages to a binhost. | ||
[packages] defaults to '${packages_default}' if not specified. | ||
" | ||
|
||
# Parse command line | ||
FLAGS "$@" || exit 1 | ||
eval set -- "${FLAGS_ARGV}" | ||
|
||
# Die on any errors. | ||
switch_to_strict_mode | ||
|
||
if [[ $# -eq 0 ]]; then | ||
set -- "${packages_default[@]}" | ||
fi | ||
# -- | ||
|
||
function my_board_emerge() { | ||
export PORTAGE_CONFIGROOT="/build/${FLAGS_board}" | ||
export SYSROOT="${SYSROOT:-/build/${FLAGS_board}}" | ||
export ROOT="/build/${FLAGS_board}" | ||
sudo -E emerge --root-deps=rdeps "${@}" | ||
} | ||
# -- | ||
|
||
pkg_build_list="$(mktemp)" | ||
pkg_skipped_list="${pkg_build_list}-skip" | ||
trap 'rm -f "${pkg_build_list}" "${pkg_skipped_list}"' EXIT | ||
|
||
info "Collecting list of binpkgs to build" | ||
|
||
my_board_emerge --pretend --root-deps=rdeps --emptytree ${@} \ | ||
| grep '\[ebuild' \ | ||
| sed 's/^\[[^]]\+\] \([^ :]\+\)*:.*/\1/' \ | ||
| while read pkg; do | ||
if [ -f "/build/${FLAGS_board}/var/lib/portage/pkgs/${pkg}.tbz2" ] ; then | ||
continue | ||
fi | ||
skip="" | ||
for s in ${FLAGS_skip_packages//,/ }; do | ||
if [[ ${pkg} = ${s}-* ]] ; then | ||
echo -n "${pkg} " >> "${pkg_skipped_list}" | ||
skip="true" | ||
break | ||
fi | ||
done | ||
[[ -z ${skip} ]] || continue | ||
echo "=${pkg}" | tee -a "${pkg_build_list}" | sed 's/^/ /' | ||
done | ||
# -- | ||
|
||
if [ -f "${pkg_skipped_list}" ] ; then | ||
info "Skipping binpkgs '$(cat "${pkg_skipped_list}")' because these are in the skip list." | ||
fi | ||
|
||
pretend="" | ||
if [[ "${FLAGS_pretend}" -eq "${FLAGS_TRUE}" ]]; then | ||
pretend="--pretend" | ||
fi | ||
|
||
my_board_emerge --buildpkg ${pretend} $(cat "${pkg_build_list}") |
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