Some checks failed
CodeQL / Analyze (push) Waiting to run
Docker Build & Push Simapp (main) / docker-build (push) Waiting to run
golangci-lint / lint (push) Waiting to run
Tests / Code Coverage / build (amd64) (push) Waiting to run
Tests / Code Coverage / build (arm64) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[additional-args:-tags="test_e2e" name:e2e path:./e2e]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:08-wasm path:./modules/light-clients/08-wasm]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:ibc-go path:.]) (push) Waiting to run
Deploy to GitHub Pages / Deploy to GitHub Pages (push) Has been cancelled
Buf-Push / push (push) Has been cancelled
97 lines
3.3 KiB
Python
Executable file
97 lines
3.3 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
"""
|
|
The purpose of this script is to output the version of the libwasm library that is
|
|
specified in the go.mod file in the wasm module.
|
|
|
|
This should be passed as a build argument to the Dockerfile to determine which static library should
|
|
be added.
|
|
|
|
usage: get-libwasm-version.py [-h] [--get-version | --no-get-version | --get-checksum | --no-get-checksum] [--wasm-library WASM_LIBRARY] [--wasm-go-mod-path WASM_GO_MOD_PATH]
|
|
|
|
Wasm dockerfile utility
|
|
|
|
options:
|
|
-h, --help show this help message and exit
|
|
--get-version, --no-get-version
|
|
Get the current version of CosmWasm specified in wasm module.
|
|
--get-checksum, --no-get-checksum
|
|
Returns the checksum of the libwasm library for the provided version.
|
|
--wasm-library WASM_LIBRARY
|
|
The name of the library to return the checksum for.
|
|
--wasm-go-mod-path WASM_GO_MOD_PATH
|
|
The relative path to the go.mod file for the wasm module.
|
|
"""
|
|
|
|
import argparse
|
|
import requests
|
|
|
|
WASM_IMPORT = "github.com/CosmWasm/wasmvm/v2"
|
|
|
|
|
|
def _get_wasm_version(wasm_go_mod_path: str) -> str:
|
|
"""get the version of the cosm wasm module from the go.mod file"""
|
|
with open(wasm_go_mod_path, "r") as f:
|
|
for line in f:
|
|
if WASM_IMPORT in line:
|
|
return _extract_wasm_version(line)
|
|
raise ValueError(f"Could not find {WASM_IMPORT} in {wasm_go_mod_path}")
|
|
|
|
|
|
def _get_wasm_lib_checksum(wasm_version: str, wasm_lib: str) -> str:
|
|
"""get the checksum of the wasm library for the given version"""
|
|
checksums_url = f"https://github.com/CosmWasm/wasmvm/releases/download/{wasm_version}/checksums.txt"
|
|
resp = requests.get(checksums_url)
|
|
resp.raise_for_status()
|
|
|
|
for line in resp.text.splitlines():
|
|
if wasm_lib in line:
|
|
return line.split(" ")[0].strip()
|
|
|
|
raise ValueError(f"Could not find {wasm_lib} in {checksums_url}")
|
|
|
|
|
|
def _extract_wasm_version(line: str) -> str:
|
|
"""extract the version from a line in the go.mod file"""
|
|
return line.split(" ")[1].strip()
|
|
|
|
|
|
def _parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(description="Wasm dockerfile utility")
|
|
|
|
group = parser.add_mutually_exclusive_group()
|
|
group.add_argument(
|
|
"--get-version",
|
|
action=argparse.BooleanOptionalAction,
|
|
help="Get the current version of CosmWasm specified in wasm module.",
|
|
)
|
|
group.add_argument(
|
|
"--get-checksum",
|
|
action=argparse.BooleanOptionalAction,
|
|
help="Returns the checksum of the libwasm library for the provided version."
|
|
)
|
|
parser.add_argument(
|
|
"--wasm-library",
|
|
default="libwasmvm_muslc.x86_64.a",
|
|
help="The name of the library to return the checksum for."
|
|
)
|
|
parser.add_argument(
|
|
"--wasm-go-mod-path",
|
|
default="modules/light-clients/08-wasm/go.mod",
|
|
help="The relative path to the go.mod file for the wasm module."
|
|
)
|
|
return parser.parse_args()
|
|
|
|
|
|
def main(args: argparse.Namespace):
|
|
if args.get_version:
|
|
version = _get_wasm_version(args.wasm_go_mod_path)
|
|
print(version)
|
|
return
|
|
if args.get_checksum:
|
|
checksum = _get_wasm_lib_checksum(_get_wasm_version(args.wasm_go_mod_path), args.wasm_library)
|
|
print(checksum)
|
|
return
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main(_parse_args())
|