{"id":30237965,"url":"https://github.com/seqeralabs/wave-cli","last_synced_at":"2025-10-29T09:19:34.967Z","repository":{"id":172171562,"uuid":"648940312","full_name":"seqeralabs/wave-cli","owner":"seqeralabs","description":"Command line tool for Wave containers provisioning service","archived":false,"fork":false,"pushed_at":"2025-07-21T11:11:31.000Z","size":385,"stargazers_count":15,"open_issues_count":8,"forks_count":3,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-08-10T05:59:37.807Z","etag":null,"topics":["conda","containers","docker","kubernetes","singularity","spack"],"latest_commit_sha":null,"homepage":"https://seqera.io/wave","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seqeralabs.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.txt","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-06-03T09:15:02.000Z","updated_at":"2025-07-21T09:52:27.000Z","dependencies_parsed_at":"2023-10-03T01:20:57.113Z","dependency_job_id":"5fd39969-ac18-41cd-9a23-ab698c959575","html_url":"https://github.com/seqeralabs/wave-cli","commit_stats":{"total_commits":144,"total_committers":5,"mean_commits":28.8,"dds":"0.24305555555555558","last_synced_commit":"17adf569317e7c82af0b58e1ca815e2148760502"},"previous_names":["seqeralabs/wavelit","seqeralabs/wave-cli"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/seqeralabs/wave-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seqeralabs%2Fwave-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seqeralabs%2Fwave-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seqeralabs%2Fwave-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seqeralabs%2Fwave-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seqeralabs","download_url":"https://codeload.github.com/seqeralabs/wave-cli/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seqeralabs%2Fwave-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270515656,"owners_count":24598440,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-15T02:00:12.559Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["conda","containers","docker","kubernetes","singularity","spack"],"created_at":"2025-08-15T02:58:10.209Z","updated_at":"2025-10-29T09:19:29.935Z","avatar_url":"https://github.com/seqeralabs.png","language":"Java","readme":"# Wave CLI\n\nCommand line tool for [Wave containers provisioning service](https://github.com/seqeralabs/wave).\n\n### Summary \n\nWave allows augmenting existing containers and building containers on demand so\nthat it can be used in your Docker (replace-with-your-own-fav-container-engine) workflow.\n\n### Features\n\n* Build container images on-demand for a given container file (aka Dockerfile);\n* Build container images on-demand based on one or more [Conda](https://conda.io/) packages;\n* Build container images for a specified target platform (currently linux/amd64 and linux/arm64);\n* Push and cache built containers to a user-provided container repository;\n* Push Singularity native container images to OCI-compliant registries;\n* Mirror (ie. copy) container images on-demand to a given registry;\n* Scan container images on-demand for security vulnerabilities;\n  \n### Installation \n\n\n#### Binary download \n\nDownload the Wave pre-compiled binary for your operating system from the \n[GitHub releases page](https://github.com/seqeralabs/wave-cli/releases/latest) and give execute permission to it.\n\n#### Homebrew (Linux and macOS)\n\nIf you use [Homebrew](https://brew.sh/), you can install like this:\n\n```bash\n brew install seqeralabs/tap/wave-cli\n```\n\n### Get started\n\n1. Create a basic Dockerfile file (or use an existing one)\n   \n    ```bash\n    cat \u003c\u003c EOF \u003e ./Dockerfile\n    FROM alpine \n\n    RUN apk update \u0026\u0026 apk add bash cowsay \\\n            --update-cache \\\n            --repository https://alpine.global.ssl.fastly.net/alpine/edge/community \\\n            --repository https://alpine.global.ssl.fastly.net/alpine/edge/main \\\n            --repository https://dl-3.alpinelinux.org/alpine/edge/testing\n    EOF\n    ```\n\n2. Run it provisioning the container on-the-fly\n\n\n    ```bash\n    docker run --rm $(wave -f ./Dockerfile) cowsay \"Hello world\"\n    ```\n\n\n### Examples \n\n#### Augment a container image \n\n1. Create a directory holding the files to be added to your container:\n\n    ```bash\n    mkdir -p new-layer/usr/local/bin\n    printf 'echo Hello world!' \u003e new-layer/usr/local/bin/hello.sh \n    chmod +x new-layer/usr/local/bin/hello.sh\n    ```\n\n2. Augment the container with the local layer and run with Docker:\n\n    ```bash\n    container=$(wave -i alpine --layer new-layer)\n    docker run $container sh -c hello.sh\n    ```\n\n#### Build a container with Dockerfile \n\n1. Create a Dockerfile for your container image: \n\n    ```bash\n    cat \u003c\u003c EOF \u003e ./Dockerfile\n    FROM alpine \n    ADD hello.sh /usr/local/bin/\n    EOF\n    ```\n\n2. Create the build context directory:\n\n    ```bash\n    mkdir -p build-context/\n    printf 'echo Hello world!' \u003e build-context/hello.sh \n    chmod +x build-context/hello.sh \n    ```\n\n3. Build and run the container on the fly:\n\n    ```bash\n    container=$(wave -f Dockerfile --context build-context)\n    docker run $container sh -c hello.sh\n    ```\n\n#### Build a Conda multi-packages container \n\n```bash\ncontainer=$(wave --conda-package bamtools=2.5.2 --conda-package samtools=1.17)\ndocker run $container sh -c 'bamtools --version \u0026\u0026 samtools --version'\n```\n\n#### Build a container by using a Conda environment file\n\n1. Create the Conda environment file:\n\n    ```bash\n    cat \u003c\u003c EOF \u003e ./conda.yaml\n    name: my-conda\n    channels:\n    - bioconda\n    - conda-forge\n    dependencies:\n    - bamtools=2.5.2\n    - samtools=1.17\n    EOF\n    ```\n\n2. Build and run the container using the Conda environment:\n\n    ```bash\n    container=$(wave --conda-file ./conda.yaml)\n    docker run $container sh -c 'bamtools --version'\n    ```\n\n\n#### Build a container by using a Conda lock file\n\n```bash\ncontainer=$(wave --conda-package https://prefix.dev/envs/pditommaso/wave/6x60arx3od13/conda-lock.yml)\ndocker run $container cowpy 'Hello, world!'\n```\n\n\n#### Build a Conda package container arm64 architecture\n\n```bash\ncontainer=$(wave --conda-package fastp --platform linux/arm64)\ndocker run --platform linux/arm64 $container sh -c 'fastp --version'\n```\n\n#### Build a Singularity container using a Conda package and pushing to a OCI registry\n\n```bash\ncontainer=$(wave --singularity --conda-package bamtools=2.5.2 --build-repo docker.io/user/repo --freeze --await)\nsingularity exec $container bamtools --version\n```\n\n#### Mirror (aka copy) a container to another registry\n\n```bash\ncontainer=$(wave -i ubuntu:latest --mirror --build-repo \u003cYOUR REGISTRY\u003e --tower-token \u003cYOUR ACCESS TOKEN\u003e --await)\ndocker pull $container\n```\n\n#### Build a container and scan it for vulnerabilities\n\n```bash\nwave --conda-package bamtools=2.5.2 --scan-mode required --await -o yaml\n```\n\n### Development\n\n1. Install GraalVM-Java 21.0.1\n\n    ```bash\n    sdk install java 21.0.1-graal\n    ```\n\n    or if it's already installed\n\n   ```bash\n   sdk use java 21.0.1-graal\n   ```\n\n2. Compile \u0026 run tests \n\n    ```bash\n    ./gradlew check\n    ```\n\n3. Native compile\n\n    ```bash\n    ./gradlew app:nativeCompile\n    ```\n\n4. Run the native binary \n\n    ```bash\n    ./app/build/native/nativeCompile/wave --version\n    ```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseqeralabs%2Fwave-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseqeralabs%2Fwave-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseqeralabs%2Fwave-cli/lists"}