imagebuilder: implement STRIP_ABI option for manifest target
When using apk as the package manager, imagebuilder make command
    make manifest STRIP_ABI=1
does not strip package names of their ABI-version suffix.  The ASU
server relies on this to validate builds, so many snapshot build
requests are failing.
Fix this by using the already existing package data parser in
make-index-json.py and augment it to write the result in manifest
format.
Fixes: https://github.com/openwrt/openwrt/issues/19274
Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/19278
Signed-off-by: Robert Marko <robimarko@gmail.com>
			
			
This commit is contained in:
		 Eric Fahlgren
					Eric Fahlgren
				
			
				
					committed by
					
						 Robert Marko
						Robert Marko
					
				
			
			
				
	
			
			
			 Robert Marko
						Robert Marko
					
				
			
						parent
						
							9d31db2833
						
					
				
				
					commit
					23dc466969
				
			| @@ -31,6 +31,8 @@ def parse_args(): | |||||||
|                         help="Required device architecture: like 'x86_64' or 'aarch64_generic'") |                         help="Required device architecture: like 'x86_64' or 'aarch64_generic'") | ||||||
|     parser.add_argument("-f", "--source-format", required=True, choices=source_format, |     parser.add_argument("-f", "--source-format", required=True, choices=source_format, | ||||||
|                         help="Required source format of input: 'apk' or 'opkg'") |                         help="Required source format of input: 'apk' or 'opkg'") | ||||||
|  |     parser.add_argument("-m", "--manifest", action="store_true", default=False, | ||||||
|  |                         help="Print output in manifest format, as package:version pairs") | ||||||
|     parser.add_argument(dest="source", |     parser.add_argument(dest="source", | ||||||
|                         help="File name for input, '-' for stdin") |                         help="File name for input, '-' for stdin") | ||||||
|     # fmt: on |     # fmt: on | ||||||
| @@ -42,7 +44,11 @@ def parse_apk(text: str) -> dict: | |||||||
|     packages: dict = {} |     packages: dict = {} | ||||||
|  |  | ||||||
|     data = json.loads(text) |     data = json.loads(text) | ||||||
|     for package in data.get("packages", []): |     if isinstance(data, dict) and "packages" in data: | ||||||
|  |         # Extract 'apk adbdump' dict field to 'apk query' package list | ||||||
|  |         data = data["packages"] | ||||||
|  |  | ||||||
|  |     for package in data: | ||||||
|         package_name: str = package["name"] |         package_name: str = package["name"] | ||||||
|  |  | ||||||
|         for tag in package.get("tags", []): |         for tag in package.get("tags", []): | ||||||
| @@ -83,6 +89,10 @@ if __name__ == "__main__": | |||||||
|         text: str = input.read() |         text: str = input.read() | ||||||
|  |  | ||||||
|     packages = parse_apk(text) if args.source_format == "apk" else parse_opkg(text) |     packages = parse_apk(text) if args.source_format == "apk" else parse_opkg(text) | ||||||
|  |     if args.manifest: | ||||||
|  |         for name, version in packages.items(): | ||||||
|  |             print(name, version) | ||||||
|  |     else: | ||||||
|         index = { |         index = { | ||||||
|             "version": 2, |             "version": 2, | ||||||
|             "architecture": args.architecture, |             "architecture": args.architecture, | ||||||
|   | |||||||
| @@ -168,7 +168,8 @@ _call_manifest: FORCE | |||||||
| ifeq ($(CONFIG_USE_APK),) | ifeq ($(CONFIG_USE_APK),) | ||||||
| 	$(OPKG) list-installed $(if $(STRIP_ABI),--strip-abi) | 	$(OPKG) list-installed $(if $(STRIP_ABI),--strip-abi) | ||||||
| else | else | ||||||
| 	$(APK) list --quiet --manifest --no-network | 	$(APK) query --format json --fields name,version,$(if $(STRIP_ABI),tags) --installed '*' | \ | ||||||
|  | 		$(SCRIPT_DIR)/make-index-json.py -a $(ARCH_PACKAGES) -f apk --manifest - | ||||||
| endif | endif | ||||||
|  |  | ||||||
| package_index: FORCE | package_index: FORCE | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user