* No longer depends on a custom CircleCI docker image that comes with Bazel pre-installed. Since Bazel is now available through NPM, we should be able to use the version from `@bazel/bazel` in order to enforce a consistent environment on CI and locally. * This also reduces the amount of packages that need to be published (ngcontainer is removed) PR Close #26691
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| # Build the dist/packages-dist directory in the same fashion as the legacy
 | |
| # /build.sh script, by building the npm packages with Bazel and copying files.
 | |
| # This is needed for scripts and tests which are not updated to the Bazel output
 | |
| # layout (which always matches the input layout).
 | |
| # Do not add new dependencies on this script, instead adapt scripts to use the
 | |
| # new layout, and write new tests as Bazel targets.
 | |
| 
 | |
| set -u -e -o pipefail
 | |
| 
 | |
| cd "$(dirname "$0")"
 | |
| 
 | |
| # basedir is the workspace root
 | |
| readonly basedir=$(pwd)/..
 | |
| # We need to resolve the Bazel binary in the node modules because running Bazel
 | |
| # through `yarn bazel` causes additional output that throws off command stdout.
 | |
| readonly bazelBin=$(yarn bin)/bazel
 | |
| readonly bin=$(${bazelBin} info bazel-bin)
 | |
| 
 | |
| function buildTargetPackages() {
 | |
|   targets="$1"
 | |
|   destPath="$2"
 | |
|   compileMode="$3"
 | |
|   desc="$4"
 | |
| 
 | |
|   echo "##################################"
 | |
|   echo "scripts/build-packages-dist.sh:"
 | |
|   echo "  building @angular/* npm packages"
 | |
|   echo "  mode: ${desc}"
 | |
|   echo "##################################"
 | |
| 
 | |
|   echo "$targets" | xargs ${bazelBin} build --define=compile=$compileMode
 | |
| 
 | |
|   [ -d "${basedir}/${destPath}" ] || mkdir -p $basedir/${destPath}
 | |
| 
 | |
|   dirs=`echo "$targets" | sed -e 's/\/\/packages\/\(.*\):npm_package/\1/'`
 | |
| 
 | |
|   for pkg in $dirs; do
 | |
|     # Skip any that don't have an "npm_package" target
 | |
|     srcDir="${bin}/packages/${pkg}/npm_package"
 | |
|     destDir="${basedir}/${destPath}/${pkg}"
 | |
|     if [ -d $srcDir ]; then
 | |
|       echo "# Copy artifacts to ${destDir}"
 | |
|       rm -rf $destDir
 | |
|       cp -R $srcDir $destDir
 | |
|       chmod -R u+w $destDir
 | |
|     fi
 | |
|   done
 | |
| }
 | |
| 
 | |
| # Ideally these integration tests should run under bazel, and just list the npm
 | |
| # packages in their deps[].
 | |
| # Until then, we have to manually run bazel first to create the npm packages we
 | |
| # want to test.
 | |
| BAZEL_TARGETS=`${bazelBin} query --output=label 'attr("tags", "\[.*release-with-framework.*\]", //packages/...) intersect kind(".*_package", //packages/...)'`
 | |
| buildTargetPackages "$BAZEL_TARGETS" "dist/packages-dist" "legacy" "Production"
 | |
| 
 | |
| # We don't use the ivy build in the integration tests, only when publishing
 | |
| # snapshots.
 | |
| # This logic matches what we use in the .circleci/config.yml file to short-
 | |
| # circuit execution of the publish-packages job.
 | |
| [[  "${CI_PULL_REQUEST-}" != "false"
 | |
|     || "${CI_REPO_OWNER-}" != "angular"
 | |
|     || "${CI_REPO_NAME-}" != "angular"
 | |
|     || "${CI_BRANCH}" != "master"
 | |
| ]] && exit 0
 | |
| 
 | |
| buildTargetPackages "$BAZEL_TARGETS" "dist/packages-dist-ivy-aot" "aot" "Ivy AOT"
 |