From 40d1d97d8f03d1fa794535306a009bc8681de520 Mon Sep 17 00:00:00 2001 From: Aaron Wislang Date: Thu, 3 Oct 2024 12:56:06 -0400 Subject: [PATCH 01/75] cargo component run -> serve --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c40c97..4b2830a 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ The HTTP server uses the `wasi:http/proxy` world. You can run it locally in a `wasmtime` instance by using the following [cargo-component] command: ```rust -$ cargo component run +$ cargo component serve ``` ## Working with deployment artifacts From e24664bde6bb8969c2b336c2333ae5a8a1289950 Mon Sep 17 00:00:00 2001 From: Joshua Duffney Date: Mon, 21 Oct 2024 09:59:51 -0500 Subject: [PATCH 02/75] mod: add meta tag action for versioning --- .github/workflows/publish.yml | 72 +++++++++++++++++++---------------- scripts/publish.sh | 6 +-- 2 files changed, 42 insertions(+), 36 deletions(-) mode change 100755 => 100644 scripts/publish.sh diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c686f18..912768a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,6 +4,8 @@ on: push: branches: - main + tags: + - v* workflow_dispatch: env: @@ -14,36 +16,40 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Cache cargo bin - id: cache-cargo - uses: actions/cache@v3 - env: - cache-name: cache-cargo-bin - with: - path: ~/.cargo/bin - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('scripts/install.sh') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - - if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} - name: Run install script - continue-on-error: false - run: bash scripts/install.sh - - - name: Run build script - run: bash scripts/build.sh - - - name: Run publish script - run: bash scripts/publish.sh + - name: Checkout repository + uses: actions/checkout@v2 + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.actor }}/rust-wasi-hello + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Cache cargo bin + id: cache-cargo + uses: actions/cache@v3 + env: + cache-name: cache-cargo-bin + with: + path: ~/.cargo/bin + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('scripts/install.sh') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + + - if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} + name: Run install script + continue-on-error: false + run: bash scripts/install.sh + + - name: Run build script + run: bash scripts/build.sh + + - name: Run publish script + run: bash scripts/publish.sh ${{ steps.meta.outputs.tags }} diff --git a/scripts/publish.sh b/scripts/publish.sh old mode 100755 new mode 100644 index ef227d9..e9281fd --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -1,9 +1,9 @@ #!/bin/bash - +tags = "$1" # not running in github actions? use gh cli to login, etc, locally if [ "$GITHUB_ACTIONS" != "true" ]; then # login to the registry - # if running locally, we may need to: + # if running locally, we may need to: # gh auth refresh -h github.com -s write:packages,read:packages gh auth token | docker login ghcr.io --username YOURUSERNAME --password-stdin GH_USER=$(gh api user --jq '.login') @@ -11,6 +11,6 @@ if [ "$GITHUB_ACTIONS" != "true" ]; then fi PROJECT_NAME="rust_wasi_hello" -REGISTRY_REFERENCE="ghcr.io/${IMAGE_NAME}:latest" +REGISTRY_REFERENCE="ghcr.io/${IMAGE_NAME}:${tags}" wkg oci push $REGISTRY_REFERENCE target/wasm32-wasip1/release/$PROJECT_NAME.wasm From c3db2d5abb9ab2b132d69372a479077db2134f38 Mon Sep 17 00:00:00 2001 From: Joshua Duffney Date: Tue, 22 Oct 2024 09:37:21 -0500 Subject: [PATCH 03/75] fix: extra spaces --- scripts/publish.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/publish.sh b/scripts/publish.sh index e9281fd..338f6de 100644 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -1,5 +1,5 @@ #!/bin/bash -tags = "$1" +tags="$1" # not running in github actions? use gh cli to login, etc, locally if [ "$GITHUB_ACTIONS" != "true" ]; then # login to the registry From 47f155fd4434820c67da7c5ed0bb66beb9a5e66d Mon Sep 17 00:00:00 2001 From: Joshua Duffney Date: Tue, 22 Oct 2024 09:58:40 -0500 Subject: [PATCH 04/75] mod: update value passed to publish --- .github/workflows/publish.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 912768a..0f03799 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,6 +23,11 @@ jobs: uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.actor }}/rust-wasi-hello + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: @@ -52,4 +57,4 @@ jobs: run: bash scripts/build.sh - name: Run publish script - run: bash scripts/publish.sh ${{ steps.meta.outputs.tags }} + run: bash scripts/publish.sh ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} From 4c5701fde145278cea4b6ab757cd9944f138ce01 Mon Sep 17 00:00:00 2001 From: Joshua Duffney Date: Tue, 22 Oct 2024 10:12:03 -0500 Subject: [PATCH 05/75] mod: remove branch trigger --- .github/workflows/publish.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0f03799..a086b43 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -2,8 +2,6 @@ name: Publish a Wasm Component to GitHub Artifacts on: push: - branches: - - main tags: - v* workflow_dispatch: @@ -24,10 +22,7 @@ jobs: with: images: ghcr.io/${{ github.actor }}/rust-wasi-hello tags: | - type=ref,event=branch - type=ref,event=pr type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: From 1c791037a36bd92ade14f6057febdebd06997e86 Mon Sep 17 00:00:00 2001 From: Yosh Date: Tue, 19 Nov 2024 18:30:04 +0100 Subject: [PATCH 06/75] get ready to submit to the BA --- CODE_OF_CONDUCT.md | 143 +++++++++++++++++++++++++++++ LICENSE | 219 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 363 insertions(+), 1 deletion(-) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 LICENSE diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..67e41cd --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,143 @@ +# Bytecode Alliance Organizational Code of Conduct (OCoC) + +*Note*: this Code of Conduct pertains to organizations' behavior. Please also see the [Individual Code of Conduct](CODE_OF_CONDUCT.md). + +## Preamble + +The Bytecode Alliance (BA) welcomes involvement from organizations, +including commercial organizations. This document is an +*organizational* code of conduct, intended particularly to provide +guidance to commercial organizations. It is distinct from the +[Individual Code of Conduct (ICoC)](CODE_OF_CONDUCT.md), and does not +replace the ICoC. This OCoC applies to any group of people acting in +concert as a BA member or as a participant in BA activities, whether +or not that group is formally incorporated in some jurisdiction. + +The code of conduct described below is not a set of rigid rules, and +we did not write it to encompass every conceivable scenario that might +arise. For example, it is theoretically possible there would be times +when asserting patents is in the best interest of the BA community as +a whole. In such instances, consult with the BA, strive for +consensus, and interpret these rules with an intent that is generous +to the community the BA serves. + +While we may revise these guidelines from time to time based on +real-world experience, overall they are based on a simple principle: + +*Bytecode Alliance members should observe the distinction between + public community functions and private functions — especially + commercial ones — and should ensure that the latter support, or at + least do not harm, the former.* + +## Guidelines + + * **Do not cause confusion about Wasm standards or interoperability.** + + Having an interoperable WebAssembly core is a high priority for + the BA, and members should strive to preserve that core. It is fine + to develop additional non-standard features or APIs, but they + should always be clearly distinguished from the core interoperable + Wasm. + + Treat the WebAssembly name and any BA-associated names with + respect, and follow BA trademark and branding guidelines. If you + distribute a customized version of software originally produced by + the BA, or if you build a product or service using BA-derived + software, use names that clearly distinguish your work from the + original. (You should still provide proper attribution to the + original, of course, wherever such attribution would normally be + given.) + + Further, do not use the WebAssembly name or BA-associated names in + other public namespaces in ways that could cause confusion, e.g., + in company names, names of commercial service offerings, domain + names, publicly-visible social media accounts or online service + accounts, etc. It may sometimes be reasonable, however, to + register such a name in a new namespace and then immediately donate + control of that account to the BA, because that would help the project + maintain its identity. + + For further guidance, see the BA Trademark and Branding Policy + [TODO: create policy, then insert link]. + + * **Do not restrict contributors.** If your company requires + employees or contractors to sign non-compete agreements, those + agreements must not prevent people from participating in the BA or + contributing to related projects. + + This does not mean that all non-compete agreements are incompatible + with this code of conduct. For example, a company may restrict an + employee's ability to solicit the company's customers. However, an + agreement must not block any form of technical or social + participation in BA activities, including but not limited to the + implementation of particular features. + + The accumulation of experience and expertise in individual persons, + who are ultimately free to direct their energy and attention as + they decide, is one of the most important drivers of progress in + open source projects. A company that limits this freedom may hinder + the success of the BA's efforts. + + * **Do not use patents as offensive weapons.** If any BA participant + prevents the adoption or development of BA technologies by + asserting its patents, that undermines the purpose of the + coalition. The collaboration fostered by the BA cannot include + members who act to undermine its work. + + * **Practice responsible disclosure** for security vulnerabilities. + Use designated, non-public reporting channels to disclose technical + vulnerabilities, and give the project a reasonable period to + respond, remediate, and patch. [TODO: optionally include the + security vulnerability reporting URL here.] + + Vulnerability reporters may patch their company's own offerings, as + long as that patching does not significantly delay the reporting of + the vulnerability. Vulnerability information should never be used + for unilateral commercial advantage. Vendors may legitimately + compete on the speed and reliability with which they deploy + security fixes, but withholding vulnerability information damages + everyone in the long run by risking harm to the BA project's + reputation and to the security of all users. + + * **Respect the letter and spirit of open source practice.** While + there is not space to list here all possible aspects of standard + open source practice, some examples will help show what we mean: + + * Abide by all applicable open source license terms. Do not engage + in copyright violation or misattribution of any kind. + + * Do not claim others' ideas or designs as your own. + + * When others engage in publicly visible work (e.g., an upcoming + demo that is coordinated in a public issue tracker), do not + unilaterally announce early releases or early demonstrations of + that work ahead of their schedule in order to secure private + advantage (such as marketplace advantage) for yourself. + + The BA reserves the right to determine what constitutes good open + source practices and to take action as it deems appropriate to + encourage, and if necessary enforce, such practices. + +## Enforcement + +Instances of organizational behavior in violation of the OCoC may +be reported by contacting the Bytecode Alliance CoC team at +[report@bytecodealliance.org](mailto:report@bytecodealliance.org). The +CoC team will review and investigate all complaints, and will respond +in a way that it deems appropriate to the circumstances. The CoC team +is obligated to maintain confidentiality with regard to the reporter of +an incident. Further details of specific enforcement policies may be +posted separately. + +When the BA deems an organization in violation of this OCoC, the BA +will, at its sole discretion, determine what action to take. The BA +will decide what type, degree, and duration of corrective action is +needed, if any, before a violating organization can be considered for +membership (if it was not already a member) or can have its membership +reinstated (if it was a member and the BA canceled its membership due +to the violation). + +In practice, the BA's first approach will be to start a conversation, +with punitive enforcement used only as a last resort. Violations +often turn out to be unintentional and swiftly correctable with all +parties acting in good faith. \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..be1d7c4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,219 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- LLVM Exceptions to the Apache 2.0 License ---- + +As an exception, if, as a result of your compiling your source code, portions +of this Software are embedded into an Object form of such source code, you +may redistribute such embedded portions in such Object form without complying +with the conditions of Sections 4(a), 4(b) and 4(d) of the License. + +In addition, if you combine or link compiled forms of this Software with +software that is licensed under the GPLv2 ("Combined Software") and if a +court of competent jurisdiction determines that the patent provision (Section +3), the indemnity provision (Section 9) or other Section of the License +conflicts with the conditions of the GPLv2, you may retroactively and +prospectively choose to deem waived or otherwise exclude such Section(s) of +the License, but only in their entirety and only with respect to the Combined +Software. diff --git a/README.md b/README.md index 4b2830a..fe311cf 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,6 @@ on the pull + serve pattern we've shown here. ## License -MIT OR Apache-2.0 +Apache-2.0 with LLVM Exception [cargo-component]: https://github.com/bytecodealliance/cargo-component From c180f6a0ef62fcb90ae3595ef6a0090451e6dc2e Mon Sep 17 00:00:00 2001 From: Yosh Date: Wed, 20 Nov 2024 16:20:18 +0100 Subject: [PATCH 07/75] get ready to upstream --- .github/CODEOWNERS | 7 +++ .../CODE_OF_CONDUCT.md | 0 .github/CONTRIBUTING.md | 55 +++++++++++++++++++ .github/dependabot.yml | 6 ++ README.md | 2 +- 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 .github/CODEOWNERS rename CODE_OF_CONDUCT.md => .github/CODE_OF_CONDUCT.md (100%) create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/dependabot.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..932b49e --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,7 @@ +# These owners are the default owners for everything in the repo. +* @yoshuawuyts + +# These owners own specific parts of the repo +.devcontainer @asw101 +.github/workflows @asw101 @duffney +.github/scripts @asw101 @duffney diff --git a/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md similarity index 100% rename from CODE_OF_CONDUCT.md rename to .github/CODE_OF_CONDUCT.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..e4e380a --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,55 @@ +# Contributing +Contributions include code, documentation, answering user questions, running the +project's infrastructure, and advocating for all types of users. + +The project welcomes all contributions from anyone willing to work in good faith +with other contributors and the community. No contribution is too small and all +contributions are valued. + +This guide explains the process for contributing to the project's GitHub +Repository. + +- [Code of Conduct](#code-of-conduct) +- [Bad Actors](#bad-actors) + +## Code of Conduct +The project has a [Code of Conduct](./CODE_OF_CONDUCT.md) that *all* +contributors are expected to follow. This code describes the *minimum* behavior +expectations for all contributors. + +As a contributor, how you choose to act and interact towards your +fellow contributors, as well as to the community, will reflect back not only +on yourself but on the project as a whole. The Code of Conduct is designed and +intended, above all else, to help establish a culture within the project that +allows anyone and everyone who wants to contribute to feel safe doing so. + +Should any individual act in any way that is considered in violation of the +[Code of Conduct](./CODE_OF_CONDUCT.md), corrective actions will be taken. It is +possible, however, for any individual to *act* in such a manner that is not in +violation of the strict letter of the Code of Conduct guidelines while still +going completely against the spirit of what that Code is intended to accomplish. + +Open, diverse, and inclusive communities live and die on the basis of trust. +Contributors can disagree with one another so long as they trust that those +disagreements are in good faith and everyone is working towards a common +goal. + +## Bad Actors +All contributors to tacitly agree to abide by both the letter and +spirit of the [Code of Conduct](./CODE_OF_CONDUCT.md). Failure, or +unwillingness, to do so will result in contributions being respectfully +declined. + +A *bad actor* is someone who repeatedly violates the *spirit* of the Code of +Conduct through consistent failure to self-regulate the way in which they +interact with other contributors in the project. In doing so, bad actors +alienate other contributors, discourage collaboration, and generally reflect +poorly on the project as a whole. + +Being a bad actor may be intentional or unintentional. Typically, unintentional +bad behavior can be easily corrected by being quick to apologize and correct +course *even if you are not entirely convinced you need to*. Giving other +contributors the benefit of the doubt and having a sincere willingness to admit +that you *might* be wrong is critical for any successful open collaboration. + +Don't be a bad actor. \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..4af2269 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "cargo" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/README.md b/README.md index fe311cf..cfcb14c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Rust WASI Hello +# WASI Rust Sample [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/yoshuawuyts/rust-wasi-hello) From 293a42b864a0ec80cd295c462498455f97061735 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Nov 2024 15:21:38 +0000 Subject: [PATCH 08/75] Bump wasi from 0.13.2+wasi-0.2.1 to 0.13.3+wasi-0.2.2 Bumps [wasi](https://github.com/bytecodealliance/wasi-rs) from 0.13.2+wasi-0.2.1 to 0.13.3+wasi-0.2.2. - [Commits](https://github.com/bytecodealliance/wasi-rs/compare/0.13.2...0.13.3) --- updated-dependencies: - dependency-name: wasi dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Cargo.lock | 14 +++++++------- Cargo.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8a7c74a..c03abe2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,27 +18,27 @@ dependencies = [ [[package]] name = "wasi" -version = "0.13.2+wasi-0.2.1" +version = "0.13.3+wasi-0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9860ef2271bc7a6e1f985ac4438862a165137fe585ac10bdfad0a8aeb37ba25" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" dependencies = [ - "wit-bindgen-rt 0.29.0", + "wit-bindgen-rt 0.33.0", ] [[package]] name = "wit-bindgen-rt" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18e27825442721d23ed98591a80f55220cfe0bf883d92b1ead6c9be237bb34" +checksum = "b2de7a3b06b9725d129b5cbd1beca968feed919c433305a23da46843185ecdd6" dependencies = [ "bitflags", ] [[package]] name = "wit-bindgen-rt" -version = "0.30.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2de7a3b06b9725d129b5cbd1beca968feed919c433305a23da46843185ecdd6" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ "bitflags", ] diff --git a/Cargo.toml b/Cargo.toml index 479c501..6faabbe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,5 @@ package = "component:rust-wasi-hello" proxy = true [dependencies] -wasi = "0.13.2" +wasi = "0.13.3" wit-bindgen-rt = { version = "0.30.0", features = ["bitflags"] } From f478b0a6e6dc2fa93f26ec22d6f563c62fec6d50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Nov 2024 15:37:35 +0000 Subject: [PATCH 09/75] Bump wit-bindgen-rt from 0.30.0 to 0.33.0 Bumps [wit-bindgen-rt](https://github.com/bytecodealliance/wasi-rs) from 0.30.0 to 0.33.0. - [Commits](https://github.com/bytecodealliance/wasi-rs/commits) --- updated-dependencies: - dependency-name: wit-bindgen-rt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 13 ++----------- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c03abe2..e9fc9e6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,7 +13,7 @@ name = "rust-wasi-hello" version = "0.0.0" dependencies = [ "wasi", - "wit-bindgen-rt 0.30.0", + "wit-bindgen-rt", ] [[package]] @@ -22,16 +22,7 @@ version = "0.13.3+wasi-0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" dependencies = [ - "wit-bindgen-rt 0.33.0", -] - -[[package]] -name = "wit-bindgen-rt" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2de7a3b06b9725d129b5cbd1beca968feed919c433305a23da46843185ecdd6" -dependencies = [ - "bitflags", + "wit-bindgen-rt", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 6faabbe..be48b60 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,4 +15,4 @@ proxy = true [dependencies] wasi = "0.13.3" -wit-bindgen-rt = { version = "0.30.0", features = ["bitflags"] } +wit-bindgen-rt = { version = "0.33.0", features = ["bitflags"] } From 92de96b01cfabb7eb7886263e478a87b3e8e9f78 Mon Sep 17 00:00:00 2001 From: Yosh Date: Mon, 25 Nov 2024 17:49:25 +0100 Subject: [PATCH 10/75] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index cfcb14c..b3ad3c2 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,11 @@ on the pull + serve pattern we've shown here. - [ ] Add deploy remote artifact - [ ] Show wkg pull and run locally +## See Also + +**Hosts** +- [sample-wasi-http-aks-wasmcloud](https://github.com/yoshuawuyts/sample-wasi-aks-wasmcloud) - A `wasi:http` example host environment running on AKS using the WasmCloud runtime + ## License Apache-2.0 with LLVM Exception From f0627bbf7552518441d08c7b98c1684ab6194ce4 Mon Sep 17 00:00:00 2001 From: Yosh Date: Tue, 26 Nov 2024 02:05:28 +0100 Subject: [PATCH 11/75] configure default target --- .cargo/config.toml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..e89194f --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,5 @@ +[build] +target = "wasm32-wasip2" + +[target.wasm32-wasip2] +runner = "wasmtime -Shttp" From a5ee8d6c8c5fcdeb917586c17cac61228e36d3c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 11:17:04 +0000 Subject: [PATCH 12/75] Bump wit-bindgen-rt from 0.33.0 to 0.36.0 Bumps [wit-bindgen-rt](https://github.com/bytecodealliance/wasi-rs) from 0.33.0 to 0.36.0. - [Commits](https://github.com/bytecodealliance/wasi-rs/commits) --- updated-dependencies: - dependency-name: wit-bindgen-rt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 13 +++++++++++-- Cargo.toml | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e9fc9e6..7108708 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,7 +13,7 @@ name = "rust-wasi-hello" version = "0.0.0" dependencies = [ "wasi", - "wit-bindgen-rt", + "wit-bindgen-rt 0.36.0", ] [[package]] @@ -22,7 +22,7 @@ version = "0.13.3+wasi-0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen-rt 0.33.0", ] [[package]] @@ -33,3 +33,12 @@ checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ "bitflags", ] + +[[package]] +name = "wit-bindgen-rt" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7947d0131c7c9da3f01dfde0ab8bd4c4cf3c5bd49b6dba0ae640f1fa752572ea" +dependencies = [ + "bitflags", +] diff --git a/Cargo.toml b/Cargo.toml index be48b60..9cdda95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,4 +15,4 @@ proxy = true [dependencies] wasi = "0.13.3" -wit-bindgen-rt = { version = "0.33.0", features = ["bitflags"] } +wit-bindgen-rt = { version = "0.36.0", features = ["bitflags"] } From 4b0e7aff7986027a59657e0de5d2aa179ecd2e75 Mon Sep 17 00:00:00 2001 From: Yosh <2467194+yoshuawuyts@users.noreply.github.com> Date: Thu, 5 Dec 2024 17:28:59 +0100 Subject: [PATCH 13/75] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b3ad3c2..39e01d9 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ on the pull + serve pattern we've shown here. ## See Also **Hosts** -- [sample-wasi-http-aks-wasmcloud](https://github.com/yoshuawuyts/sample-wasi-aks-wasmcloud) - A `wasi:http` example host environment running on AKS using the WasmCloud runtime +- [sample-wasi-http-aks-wasmcloud](https://github.com/yoshuawuyts/sample-wasi-http-aks-wasmcloud) - A `wasi:http` example host environment running on AKS using the WasmCloud runtime ## License From 5883e381b40b10ecc2a9a298b0c5f9b57aabd031 Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Thu, 9 Jan 2025 09:58:03 -0600 Subject: [PATCH 14/75] feat: keyless signing --- .github/workflows/publish.yml | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a086b43..530796e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -30,6 +30,9 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + - name: Install cosign + uses: sigstore/cosign-installer@v3.7.0 + - name: Cache cargo bin id: cache-cargo uses: actions/cache@v3 @@ -51,5 +54,17 @@ jobs: - name: Run build script run: bash scripts/build.sh - - name: Run publish script - run: bash scripts/publish.sh ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} + # - name: Run publish script + # run: bash scripts/publish.sh ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} + + # using my version until the PR is merged upstream + # https://github.com/bytecodealliance/wkg-github-action/pull/7 + - name: Publish to GitHub Container Registry + uses: duffney/wkg-github-action@9680cbd1dd38119bbc519c6c3e0b7fffe0b4982c + with: + file: target/wasm32-wasi/release/rust_wasi_hello.wasm + oci-reference-without-tag: ghcr.io/${{ github.actor }}/rust-wasi-hello + version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} + + - name: Sign the wasm component + run: cosign sign --yes ghcr.io/${{ github.actor }}/rust-wasi-hello@${{ steps.publish.outputs.digest }} From 793b9a850e1df5a9eaa0b991dc2cc8b9a56ed3a5 Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Thu, 9 Jan 2025 10:14:58 -0600 Subject: [PATCH 15/75] fix: correct file path --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 530796e..8c794da 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -62,7 +62,7 @@ jobs: - name: Publish to GitHub Container Registry uses: duffney/wkg-github-action@9680cbd1dd38119bbc519c6c3e0b7fffe0b4982c with: - file: target/wasm32-wasi/release/rust_wasi_hello.wasm + file: target/wasm32-wasip1/release/rust_wasi_hello.wasm oci-reference-without-tag: ghcr.io/${{ github.actor }}/rust-wasi-hello version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} From 5dd76f9dfa1ae9900ce5223876e59d1cbe9d60de Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Thu, 9 Jan 2025 11:43:00 -0600 Subject: [PATCH 16/75] mod: add permissions for wkg push action --- .github/workflows/publish.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8c794da..60f8b67 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -12,6 +12,10 @@ env: jobs: publish: runs-on: ubuntu-latest + permissions: + id-token: write + packages: write + contents: read steps: - name: Checkout repository From 81b7d8666c95411eee6d9c2a6de3876d0afbd8f9 Mon Sep 17 00:00:00 2001 From: Joshua Duffney Date: Fri, 10 Jan 2025 15:46:57 -0600 Subject: [PATCH 17/75] mod: publish artifacts under repo path --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 60f8b67..478af6d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -67,8 +67,8 @@ jobs: uses: duffney/wkg-github-action@9680cbd1dd38119bbc519c6c3e0b7fffe0b4982c with: file: target/wasm32-wasip1/release/rust_wasi_hello.wasm - oci-reference-without-tag: ghcr.io/${{ github.actor }}/rust-wasi-hello + oci-reference-without-tag: ghcr.io/${{ IMAGE_NAME }}/rust-wasi-hello version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} - name: Sign the wasm component - run: cosign sign --yes ghcr.io/${{ github.actor }}/rust-wasi-hello@${{ steps.publish.outputs.digest }} + run: cosign sign --yes ghcr.io/${{ IMAGE_NAME }}/rust-wasi-hello@${{ steps.publish.outputs.digest }} From 0c415f46f8e6506b8d15e2c37f35252d931e393d Mon Sep 17 00:00:00 2001 From: Joshua Duffney Date: Fri, 10 Jan 2025 15:50:15 -0600 Subject: [PATCH 18/75] fix: env var names --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 478af6d..6e84c2c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -67,8 +67,8 @@ jobs: uses: duffney/wkg-github-action@9680cbd1dd38119bbc519c6c3e0b7fffe0b4982c with: file: target/wasm32-wasip1/release/rust_wasi_hello.wasm - oci-reference-without-tag: ghcr.io/${{ IMAGE_NAME }}/rust-wasi-hello + oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/rust-wasi-hello version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} - name: Sign the wasm component - run: cosign sign --yes ghcr.io/${{ IMAGE_NAME }}/rust-wasi-hello@${{ steps.publish.outputs.digest }} + run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/rust-wasi-hello@${{ steps.publish.outputs.digest }} From 3bd0ee958a6de86c4405e797a169bfb2477223ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 11:12:59 +0000 Subject: [PATCH 19/75] Bump wit-bindgen-rt from 0.36.0 to 0.37.0 Bumps [wit-bindgen-rt](https://github.com/bytecodealliance/wasi-rs) from 0.36.0 to 0.37.0. - [Commits](https://github.com/bytecodealliance/wasi-rs/commits) --- updated-dependencies: - dependency-name: wit-bindgen-rt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7108708..ed013da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,7 +13,7 @@ name = "rust-wasi-hello" version = "0.0.0" dependencies = [ "wasi", - "wit-bindgen-rt 0.36.0", + "wit-bindgen-rt 0.37.0", ] [[package]] @@ -36,9 +36,9 @@ dependencies = [ [[package]] name = "wit-bindgen-rt" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7947d0131c7c9da3f01dfde0ab8bd4c4cf3c5bd49b6dba0ae640f1fa752572ea" +checksum = "fc801b991c56492f87ab3086e786468f75c285a4d73017ab0ebc2fa1aed5d82c" dependencies = [ "bitflags", ] diff --git a/Cargo.toml b/Cargo.toml index 9cdda95..4038078 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,4 +15,4 @@ proxy = true [dependencies] wasi = "0.13.3" -wit-bindgen-rt = { version = "0.36.0", features = ["bitflags"] } +wit-bindgen-rt = { version = "0.37.0", features = ["bitflags"] } From b489afb1f84934bd67ef893ad35fc302e3af4877 Mon Sep 17 00:00:00 2001 From: Joshua Duffney Date: Mon, 13 Jan 2025 09:13:12 -0600 Subject: [PATCH 20/75] fix: id missing from publish step --- .github/workflows/publish.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 6e84c2c..dca4d0b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -64,6 +64,7 @@ jobs: # using my version until the PR is merged upstream # https://github.com/bytecodealliance/wkg-github-action/pull/7 - name: Publish to GitHub Container Registry + id: publish uses: duffney/wkg-github-action@9680cbd1dd38119bbc519c6c3e0b7fffe0b4982c with: file: target/wasm32-wasip1/release/rust_wasi_hello.wasm From 7a94f9b66b594fb3d876648eeb72d753cb74e769 Mon Sep 17 00:00:00 2001 From: Joshua Duffney Date: Mon, 13 Jan 2025 10:25:47 -0600 Subject: [PATCH 21/75] mod: switch to bytecodealliance action --- .github/workflows/publish.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index dca4d0b..61e86b2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -65,7 +65,9 @@ jobs: # https://github.com/bytecodealliance/wkg-github-action/pull/7 - name: Publish to GitHub Container Registry id: publish - uses: duffney/wkg-github-action@9680cbd1dd38119bbc519c6c3e0b7fffe0b4982c + # uses: duffney/wkg-github-action@9680cbd1dd38119bbc519c6c3e0b7fffe0b4982c + #TODO: update to version after next release + uses: bytecodealliance/wkg-github-action@10b3b04b9059ba46208cd7daf7d352af14bded0f with: file: target/wasm32-wasip1/release/rust_wasi_hello.wasm oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/rust-wasi-hello From 7352d62635b2462c8111cb6779ca3d7e55ddebd8 Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Tue, 21 Jan 2025 10:16:14 -0600 Subject: [PATCH 22/75] mod: add COMPONENT_NAME env var --- .github/workflows/publish.yml | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 61e86b2..e4e06bc 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,6 +8,7 @@ on: env: IMAGE_NAME: ${{ github.repository }} + COMPONENT_NAME: rust-wasi-hello jobs: publish: @@ -24,7 +25,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ghcr.io/${{ github.actor }}/rust-wasi-hello + images: ghcr.io/${{ github.actor }}/{{ env.COMPONENT_NAME }} tags: | type=semver,pattern={{version}} - name: Login to GitHub Container Registry @@ -58,20 +59,13 @@ jobs: - name: Run build script run: bash scripts/build.sh - # - name: Run publish script - # run: bash scripts/publish.sh ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} - - # using my version until the PR is merged upstream - # https://github.com/bytecodealliance/wkg-github-action/pull/7 - name: Publish to GitHub Container Registry id: publish - # uses: duffney/wkg-github-action@9680cbd1dd38119bbc519c6c3e0b7fffe0b4982c - #TODO: update to version after next release - uses: bytecodealliance/wkg-github-action@10b3b04b9059ba46208cd7daf7d352af14bded0f + uses: bytecodealliance/wkg-github-action@v5 with: - file: target/wasm32-wasip1/release/rust_wasi_hello.wasm - oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/rust-wasi-hello + file: target/wasm32-wasip1/release/${{ env.COMPONENT_NAME }}.wasm + oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }} version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} - name: Sign the wasm component - run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/rust-wasi-hello@${{ steps.publish.outputs.digest }} + run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME}}@${{ steps.publish.outputs.digest }} From 4634766073c03ae35c38aedfe8945afbee6a9ff6 Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Tue, 21 Jan 2025 10:44:33 -0600 Subject: [PATCH 23/75] mod: hardcode wasm file path --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e4e06bc..cf9406d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -63,9 +63,9 @@ jobs: id: publish uses: bytecodealliance/wkg-github-action@v5 with: - file: target/wasm32-wasip1/release/${{ env.COMPONENT_NAME }}.wasm + file: target/wasm32-wasip1/release/rust_wasi_hello.wasm oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }} version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} - name: Sign the wasm component - run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME}}@${{ steps.publish.outputs.digest }} + run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/@${{ steps.publish.outputs.digest }} From d753c2d51892eec83d399b24fbd489c2ca0f7373 Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Tue, 21 Jan 2025 11:00:55 -0600 Subject: [PATCH 24/75] mod: include componenet name env in signing path --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cf9406d..a545aab 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -68,4 +68,4 @@ jobs: version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} - name: Sign the wasm component - run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/@${{ steps.publish.outputs.digest }} + run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish.outputs.digest }} From c52fb43b49e37ee4b3fde80443eb9a500b0b379b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 14:54:58 +0000 Subject: [PATCH 25/75] Bump wasi from 0.13.3+wasi-0.2.2 to 0.14.0+wasi-0.2.3 Bumps [wasi](https://github.com/bytecodealliance/wasi-rs) from 0.13.3+wasi-0.2.2 to 0.14.0+wasi-0.2.3. - [Commits](https://github.com/bytecodealliance/wasi-rs/compare/0.13.3...0.14.0) --- updated-dependencies: - dependency-name: wasi dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 17 ++++------------- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ed013da..0270b5e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,25 +13,16 @@ name = "rust-wasi-hello" version = "0.0.0" dependencies = [ "wasi", - "wit-bindgen-rt 0.37.0", + "wit-bindgen-rt", ] [[package]] name = "wasi" -version = "0.13.3+wasi-0.2.2" +version = "0.14.0+wasi-0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "b3d67b0bdfec72b9fbaba698033291c327ef19ce3b34efbdcd7dc402a53850d9" dependencies = [ - "wit-bindgen-rt 0.33.0", -] - -[[package]] -name = "wit-bindgen-rt" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" -dependencies = [ - "bitflags", + "wit-bindgen-rt", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 4038078..7056441 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,5 @@ package = "component:rust-wasi-hello" proxy = true [dependencies] -wasi = "0.13.3" +wasi = "0.14.0" wit-bindgen-rt = { version = "0.37.0", features = ["bitflags"] } From 0b22eb59871cbec59aad2e3b18377c730eb0570b Mon Sep 17 00:00:00 2001 From: Yosh Date: Thu, 23 Jan 2025 18:24:19 +0100 Subject: [PATCH 26/75] update publish action --- .github/workflows/publish.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a545aab..3dfb6a0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,4 +1,4 @@ -name: Publish a Wasm Component to GitHub Artifacts +name: Build and publish a Wasm Component to GitHub Artifacts on: push: @@ -9,6 +9,7 @@ on: env: IMAGE_NAME: ${{ github.repository }} COMPONENT_NAME: rust-wasi-hello + CARGO_COMPONENT_VERSION: "0.16.0" jobs: publish: @@ -21,6 +22,7 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v2 + - name: Docker meta id: meta uses: docker/metadata-action@v5 @@ -28,6 +30,7 @@ jobs: images: ghcr.io/${{ github.actor }}/{{ env.COMPONENT_NAME }} tags: | type=semver,pattern={{version}} + - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: @@ -52,12 +55,14 @@ jobs: ${{ runner.os }}- - if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} - name: Run install script + name: Install build dependencies continue-on-error: false - run: bash scripts/install.sh + run: | + cargo install cargo-component --force --version {{ env.CARGO_COMPONENT_VERSION }} + cargo install wkg --force - - name: Run build script - run: bash scripts/build.sh + - name: Build the component + run: cargo component build --release - name: Publish to GitHub Container Registry id: publish From 1d0ced6188bc7caaa976fb50ac86dc199603117f Mon Sep 17 00:00:00 2001 From: Yosh Date: Thu, 23 Jan 2025 18:25:22 +0100 Subject: [PATCH 27/75] remove scripts dir --- scripts/build.sh | 4 ---- scripts/install.sh | 7 ------- scripts/publish.sh | 16 ---------------- 3 files changed, 27 deletions(-) delete mode 100755 scripts/build.sh delete mode 100755 scripts/install.sh delete mode 100644 scripts/publish.sh diff --git a/scripts/build.sh b/scripts/build.sh deleted file mode 100755 index 66beb42..0000000 --- a/scripts/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -# build our project -cargo component build --release diff --git a/scripts/install.sh b/scripts/install.sh deleted file mode 100755 index ab858e9..0000000 --- a/scripts/install.sh +++ /dev/null @@ -1,7 +0,0 @@ -curl https://wasmtime.dev/install.sh -sSf | bash - -# install cargo-component -cargo install cargo-component --force --version 0.16.0 - -# install wkg -cargo install wkg --force diff --git a/scripts/publish.sh b/scripts/publish.sh deleted file mode 100644 index 338f6de..0000000 --- a/scripts/publish.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -tags="$1" -# not running in github actions? use gh cli to login, etc, locally -if [ "$GITHUB_ACTIONS" != "true" ]; then - # login to the registry - # if running locally, we may need to: - # gh auth refresh -h github.com -s write:packages,read:packages - gh auth token | docker login ghcr.io --username YOURUSERNAME --password-stdin - GH_USER=$(gh api user --jq '.login') - IMAGE_NAME="${GH_USER}/rust-wasi-hello" -fi - -PROJECT_NAME="rust_wasi_hello" -REGISTRY_REFERENCE="ghcr.io/${IMAGE_NAME}:${tags}" - -wkg oci push $REGISTRY_REFERENCE target/wasm32-wasip1/release/$PROJECT_NAME.wasm From ee5fa58e99708c9fe7dbc3631c1ff28cf93264af Mon Sep 17 00:00:00 2001 From: Yosh Date: Thu, 23 Jan 2025 18:38:14 +0100 Subject: [PATCH 28/75] Update README.md --- README.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/README.md b/README.md index 39e01d9..718a669 100644 --- a/README.md +++ b/README.md @@ -44,20 +44,6 @@ integrations which provide their own OCI integrations. Deployment will vary depending on you providers, though at their core they will tend to be variations on the pull + serve pattern we've shown here. -## Roadmap - -- [x] Get a base version compiling -- [x] Create a GitHub Actions Workflow -- [x] Add routes to the HTTP handler -- [ ] Create a wasm OCI publish action -- [ ] Setup a GitHub Codespace with all tools pre-installed -- [ ] Demo unit tests in CI -- [ ] Automatically publish a package on GitHub Release -- [ ] Add a load-testing example -- [ ] Upstream and integrate `scripts/` into their respective packages -- [ ] Add deploy remote artifact -- [ ] Show wkg pull and run locally - ## See Also **Hosts** From 017564bb2b468a72e38f8452244a6b4b9f8a567f Mon Sep 17 00:00:00 2001 From: Yosh Date: Thu, 23 Jan 2025 19:41:44 +0100 Subject: [PATCH 29/75] Changes the Rust implementation to use `wstd` --- Cargo.lock | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 2 +- README.md | 12 ++++++ src/lib.rs | 104 ++++++++++++++++++++++++++-------------------- 4 files changed, 189 insertions(+), 49 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0270b5e..56c1848 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,12 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "bitflags" @@ -8,14 +14,99 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +[[package]] +name = "bytes" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "proc-macro2" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + [[package]] name = "rust-wasi-hello" version = "0.0.0" dependencies = [ - "wasi", "wit-bindgen-rt", + "wstd", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "syn" +version = "2.0.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", ] +[[package]] +name = "unicode-ident" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243" + [[package]] name = "wasi" version = "0.14.0+wasi-0.2.3" @@ -33,3 +124,28 @@ checksum = "fc801b991c56492f87ab3086e786468f75c285a4d73017ab0ebc2fa1aed5d82c" dependencies = [ "bitflags", ] + +[[package]] +name = "wstd" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca59b974fe7537ab5b7d7be480d3031130fd63b50559efe2a02574ce541cffd" +dependencies = [ + "futures-core", + "http", + "itoa", + "pin-project-lite", + "slab", + "wasi", + "wstd-macro", +] + +[[package]] +name = "wstd-macro" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b9b6728c1e3a0063f57ffe91d337e336cb0808790edc7ac51153771c8ba8b3" +dependencies = [ + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index 7056441..21fed63 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,5 @@ package = "component:rust-wasi-hello" proxy = true [dependencies] -wasi = "0.14.0" wit-bindgen-rt = { version = "0.37.0", features = ["bitflags"] } +wstd = "0.5.0" diff --git a/README.md b/README.md index 718a669..8043f47 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,18 @@ An example project showing how to build an HTTP server for WASI 0.2 built in Rust. +## Routes + +The following HTTP routes are available from the component: + +```text +/ # Hello world +/wait # Sleep for one second +/echo # Echo the HTTP body +/echo-headers # Echo the HTTP headers +/echo-trailers # Echo the HTTP trailers +``` + ## Installation The easiest way to try this project is by opening it in a GitHub Codespace. This diff --git a/src/lib.rs b/src/lib.rs index 77441a2..d7f0b43 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,60 +1,72 @@ -pub use wasi::http::types::{ - Fields, IncomingRequest, OutgoingBody, OutgoingResponse, ResponseOutparam, -}; - -struct Component; -wasi::http::proxy::export!(Component); - -impl wasi::exports::http::incoming_handler::Guest for Component { - fn handle(req: IncomingRequest, outparam: ResponseOutparam) { - match req.path_with_query().unwrap().as_str() { - "/wait" => http_wait(req, outparam), - // "/echo" => {} // TODO - // "/host" => {} // TODO - "/" | _ => http_home(req, outparam), - } +use wstd::http::body::{BodyForthcoming, IncomingBody}; +use wstd::http::server::{Finished, Responder}; +use wstd::http::{IntoBody, Request, Response, StatusCode}; +use wstd::io::{copy, empty, AsyncWrite}; +use wstd::time::{Duration, Instant}; + +#[wstd::http_server] +async fn main(req: Request, res: Responder) -> Finished { + match req.uri().path_and_query().unwrap().as_str() { + "/wait" => wait(req, res).await, + "/echo" => echo(req, res).await, + "/echo-headers" => echo_headers(req, res).await, + "/echo-trailers" => echo_trailers(req, res).await, + "/" => home(req, res).await, + _ => not_found(req, res).await, } } -fn http_home(_req: IncomingRequest, outparam: ResponseOutparam) { - let headers = Fields::new(); - let res = OutgoingResponse::new(headers); - let body = res.body().expect("outgoing response"); - - ResponseOutparam::set(outparam, Ok(res)); - - let out = body.write().expect("outgoing stream"); - out.blocking_write_and_flush(b"Hello, wasi:http/proxy world!\n") - .expect("writing response"); - - drop(out); - OutgoingBody::finish(body, None).unwrap(); +async fn home(_req: Request, res: Responder) -> Finished { + // To send a single string as the response body, use `res::respond`. + res.respond(Response::new("Hello, wasi:http/proxy world!\n".into_body())) + .await } -fn http_wait(_req: IncomingRequest, outparam: ResponseOutparam) { +async fn wait(_req: Request, res: Responder) -> Finished { // Get the time now - let now = wasi::clocks::monotonic_clock::now(); + let now = Instant::now(); - // Sleep for 1 second - let nanos = 1_000_000_000; - let pollable = wasi::clocks::monotonic_clock::subscribe_duration(nanos); - pollable.block(); + // Sleep for one second. + wstd::task::sleep(Duration::from_secs(1)).await; // Compute how long we slept for. - let elapsed = wasi::clocks::monotonic_clock::now() - now; - let elapsed = elapsed / 1_000_000; // change to millis + let elapsed = Instant::now().duration_since(now).as_millis(); - let headers = Fields::new(); - let res = OutgoingResponse::new(headers); - let body = res.body().expect("outgoing response"); + // To stream data to the response body, use `res::start_response`. + let mut body = res.start_response(Response::new(BodyForthcoming)); + let result = body + .write_all(format!("slept for {elapsed} millis\n").as_bytes()) + .await; + Finished::finish(body, result, None) +} - ResponseOutparam::set(outparam, Ok(res)); +async fn echo(mut req: Request, res: Responder) -> Finished { + // Stream data from the req body to the response body. + let mut body = res.start_response(Response::new(BodyForthcoming)); + let result = copy(req.body_mut(), &mut body).await; + Finished::finish(body, result, None) +} + +async fn echo_headers(req: Request, responder: Responder) -> Finished { + let mut res = Response::builder(); + *res.headers_mut().unwrap() = req.into_parts().0.headers; + let res = res.body(empty()).unwrap(); + responder.respond(res).await +} - let out = body.write().expect("outgoing stream"); - let msg = format!("slept for {elapsed} millis\n"); - out.blocking_write_and_flush(msg.as_bytes()) - .expect("writing response"); +async fn echo_trailers(req: Request, res: Responder) -> Finished { + let body = res.start_response(Response::new(BodyForthcoming)); + let (trailers, result) = match req.into_body().finish().await { + Ok(trailers) => (trailers, Ok(())), + Err(err) => (Default::default(), Err(std::io::Error::other(err))), + }; + Finished::finish(body, result, trailers) +} - drop(out); - OutgoingBody::finish(body, None).unwrap(); +async fn not_found(_req: Request, responder: Responder) -> Finished { + let res = Response::builder() + .status(StatusCode::NOT_FOUND) + .body(empty()) + .unwrap(); + responder.respond(res).await } From 93772f0762eea3be061af475426f1ee7fdf15562 Mon Sep 17 00:00:00 2001 From: Yosh Date: Thu, 23 Jan 2025 21:00:39 +0100 Subject: [PATCH 30/75] Update publish.yml --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3dfb6a0..72f2b41 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -58,7 +58,7 @@ jobs: name: Install build dependencies continue-on-error: false run: | - cargo install cargo-component --force --version {{ env.CARGO_COMPONENT_VERSION }} + cargo install cargo-component --force --version ${{ env.CARGO_COMPONENT_VERSION }} cargo install wkg --force - name: Build the component From 3d59da88374777624d469545ae53da4152221963 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 10:36:23 +0000 Subject: [PATCH 31/75] Bump wstd from 0.5.0 to 0.5.1 Bumps [wstd](https://github.com/yoshuawuyts/wstd) from 0.5.0 to 0.5.1. - [Commits](https://github.com/yoshuawuyts/wstd/commits) --- updated-dependencies: - dependency-name: wstd dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 56c1848..3c30f5f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -127,9 +127,9 @@ dependencies = [ [[package]] name = "wstd" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca59b974fe7537ab5b7d7be480d3031130fd63b50559efe2a02574ce541cffd" +checksum = "26293c0587d2203a141282311221f9ba0048425a04b21d9fcff8fc62fc8ecd75" dependencies = [ "futures-core", "http", @@ -142,9 +142,9 @@ dependencies = [ [[package]] name = "wstd-macro" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b9b6728c1e3a0063f57ffe91d337e336cb0808790edc7ac51153771c8ba8b3" +checksum = "75a8316f91fc3e508b03fdc979dec4ceeddb29744fc1c2c2ed825e00159f96f9" dependencies = [ "quote", "syn", diff --git a/Cargo.toml b/Cargo.toml index 21fed63..5841ce6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,4 +15,4 @@ proxy = true [dependencies] wit-bindgen-rt = { version = "0.37.0", features = ["bitflags"] } -wstd = "0.5.0" +wstd = "0.5.1" From a72285b8dc6af2cbc478ad1083d562e235d69f14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 21:52:17 +0000 Subject: [PATCH 32/75] Bump wit-bindgen-rt from 0.37.0 to 0.38.0 Bumps [wit-bindgen-rt](https://github.com/bytecodealliance/wasi-rs) from 0.37.0 to 0.38.0. - [Commits](https://github.com/bytecodealliance/wasi-rs/commits) --- updated-dependencies: - dependency-name: wit-bindgen-rt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 13 +++++++++++-- Cargo.toml | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3c30f5f..b0686af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,7 +77,7 @@ dependencies = [ name = "rust-wasi-hello" version = "0.0.0" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen-rt 0.38.0", "wstd", ] @@ -113,7 +113,7 @@ version = "0.14.0+wasi-0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d67b0bdfec72b9fbaba698033291c327ef19ce3b34efbdcd7dc402a53850d9" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen-rt 0.37.0", ] [[package]] @@ -125,6 +125,15 @@ dependencies = [ "bitflags", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed6f8d372a2d4a1227f2556e051cc24b2a5f15768d53451c84ff91e2527139e3" +dependencies = [ + "bitflags", +] + [[package]] name = "wstd" version = "0.5.1" diff --git a/Cargo.toml b/Cargo.toml index 5841ce6..45c50d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,5 @@ package = "component:rust-wasi-hello" proxy = true [dependencies] -wit-bindgen-rt = { version = "0.37.0", features = ["bitflags"] } +wit-bindgen-rt = { version = "0.38.0", features = ["bitflags"] } wstd = "0.5.1" From 181365c0a15c5b6f02aaead8cbf43d5ed0c9a43f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:30:37 +0000 Subject: [PATCH 33/75] Bump wit-bindgen-rt from 0.38.0 to 0.39.0 Bumps [wit-bindgen-rt](https://github.com/bytecodealliance/wit-bindgen) from 0.38.0 to 0.39.0. - [Release notes](https://github.com/bytecodealliance/wit-bindgen/releases) - [Commits](https://github.com/bytecodealliance/wit-bindgen/compare/v0.38.0...v0.39.0) --- updated-dependencies: - dependency-name: wit-bindgen-rt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0686af..a7750dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,7 +77,7 @@ dependencies = [ name = "rust-wasi-hello" version = "0.0.0" dependencies = [ - "wit-bindgen-rt 0.38.0", + "wit-bindgen-rt 0.39.0", "wstd", ] @@ -127,9 +127,9 @@ dependencies = [ [[package]] name = "wit-bindgen-rt" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6f8d372a2d4a1227f2556e051cc24b2a5f15768d53451c84ff91e2527139e3" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ "bitflags", ] diff --git a/Cargo.toml b/Cargo.toml index 45c50d3..5bc61b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,5 @@ package = "component:rust-wasi-hello" proxy = true [dependencies] -wit-bindgen-rt = { version = "0.38.0", features = ["bitflags"] } +wit-bindgen-rt = { version = "0.39.0", features = ["bitflags"] } wstd = "0.5.1" From 41d68998912ef432cd1ccabaa579d4159f029f26 Mon Sep 17 00:00:00 2001 From: Yosh Date: Fri, 21 Feb 2025 01:05:03 +0100 Subject: [PATCH 34/75] Create test.yml --- .github/workflows/test.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..956c8cf --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,36 @@ +name: CI +on: + pull_request: +env: + RUSTFLAGS: -Dwarnings + +jobs: + check_and_test: + name: It builds and tests pass + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install cargo-binstall + uses: cargo-bins/cargo-binstall@v1.10.15 + - name: Install wkg + shell: bash + run: cargo binstall cargo-component + - name: Install Wasmtime + shell: bash + run: curl https://wasmtime.dev/install.sh -sSf | bash + - name: check + shell: bash + run: cargo component check + - name: test + shell: bash + run: cargo component test + + check_style: + name: It follows all style conventions + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: clippy + run: cargo clippy -- -Dwarnings + - name: fmt + run: cargo fmt --all -- --check From 35009a52c53ab623af5c6c905e762216918a4936 Mon Sep 17 00:00:00 2001 From: Yosh Date: Fri, 21 Feb 2025 01:12:04 +0100 Subject: [PATCH 35/75] Update test.yml --- .github/workflows/test.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 956c8cf..2a502b7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,9 +10,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - name: rustup + run: rustup target add wasm32-wasip2 - name: Install cargo-binstall uses: cargo-bins/cargo-binstall@v1.10.15 - - name: Install wkg + - name: Install cargo-component shell: bash run: cargo binstall cargo-component - name: Install Wasmtime @@ -30,6 +32,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - name: rustup + run: rustup target add wasm32-wasip2 - name: clippy run: cargo clippy -- -Dwarnings - name: fmt From d98de12a3f04deea68e747ff8a938d315b28aa91 Mon Sep 17 00:00:00 2001 From: Yosh Date: Fri, 21 Feb 2025 01:19:09 +0100 Subject: [PATCH 36/75] source wasmtime --- .github/workflows/test.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2a502b7..da4c574 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,9 @@ jobs: run: cargo binstall cargo-component - name: Install Wasmtime shell: bash - run: curl https://wasmtime.dev/install.sh -sSf | bash + run: | + curl https://wasmtime.dev/install.sh -sSf | bash + source ~/.bashrc - name: check shell: bash run: cargo component check From 53f7cc431535c43f7466f832d35c653464cec8d5 Mon Sep 17 00:00:00 2001 From: Yosh Date: Fri, 21 Feb 2025 01:25:36 +0100 Subject: [PATCH 37/75] Update test.yml --- .github/workflows/test.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index da4c574..a24373e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: rustup + - name: Add wasm32-wasip2 target run: rustup target add wasm32-wasip2 - name: Install cargo-binstall uses: cargo-bins/cargo-binstall@v1.10.15 @@ -21,11 +21,11 @@ jobs: shell: bash run: | curl https://wasmtime.dev/install.sh -sSf | bash - source ~/.bashrc - - name: check + export PATH="$HOME/.wasmtime/bin:$PATH" + - name: Run cargo check shell: bash run: cargo component check - - name: test + - name: Run cargo test shell: bash run: cargo component test @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: rustup + - name: Install wasm32-wasip2 target run: rustup target add wasm32-wasip2 - - name: clippy + - name: Run cargo clippy run: cargo clippy -- -Dwarnings - - name: fmt + - name: Run cargo fmt run: cargo fmt --all -- --check From 58b610c1b71880722eec105fcf05ba64698aee3c Mon Sep 17 00:00:00 2001 From: Yosh Date: Fri, 21 Feb 2025 01:26:49 +0100 Subject: [PATCH 38/75] Update test.yml --- .github/workflows/test.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a24373e..3459efc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,17 +17,9 @@ jobs: - name: Install cargo-component shell: bash run: cargo binstall cargo-component - - name: Install Wasmtime - shell: bash - run: | - curl https://wasmtime.dev/install.sh -sSf | bash - export PATH="$HOME/.wasmtime/bin:$PATH" - name: Run cargo check shell: bash run: cargo component check - - name: Run cargo test - shell: bash - run: cargo component test check_style: name: It follows all style conventions From 08650ec2d30461535a64266ed55566f1df9ae2d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 11:14:50 +0000 Subject: [PATCH 39/75] Bump wit-bindgen-rt from 0.39.0 to 0.40.0 Bumps [wit-bindgen-rt](https://github.com/bytecodealliance/wit-bindgen) from 0.39.0 to 0.40.0. - [Release notes](https://github.com/bytecodealliance/wit-bindgen/releases) - [Commits](https://github.com/bytecodealliance/wit-bindgen/compare/v0.39.0...v0.40.0) --- updated-dependencies: - dependency-name: wit-bindgen-rt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a7750dc..c6137b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,7 +77,7 @@ dependencies = [ name = "rust-wasi-hello" version = "0.0.0" dependencies = [ - "wit-bindgen-rt 0.39.0", + "wit-bindgen-rt 0.40.0", "wstd", ] @@ -127,9 +127,9 @@ dependencies = [ [[package]] name = "wit-bindgen-rt" -version = "0.39.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +checksum = "68faed92ae696b93ea9a7b67ba6c37bf09d72c6d9a70fa824a743c3020212f11" dependencies = [ "bitflags", ] diff --git a/Cargo.toml b/Cargo.toml index 5bc61b6..e01eccc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,5 @@ package = "component:rust-wasi-hello" proxy = true [dependencies] -wit-bindgen-rt = { version = "0.39.0", features = ["bitflags"] } +wit-bindgen-rt = { version = "0.40.0", features = ["bitflags"] } wstd = "0.5.1" From 6d76317b366d220e5c109ca80e852682654e7460 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 13:56:25 +0000 Subject: [PATCH 40/75] Bump wstd from 0.5.1 to 0.5.3 Bumps [wstd](https://github.com/yoshuawuyts/wstd) from 0.5.1 to 0.5.3. - [Commits](https://github.com/yoshuawuyts/wstd/commits) --- updated-dependencies: - dependency-name: wstd dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Cargo.lock | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- Cargo.toml | 2 +- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c6137b7..7fdfa45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,6 +49,12 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -81,6 +87,44 @@ dependencies = [ "wstd", ] +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + [[package]] name = "slab" version = "0.4.9" @@ -136,14 +180,16 @@ dependencies = [ [[package]] name = "wstd" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26293c0587d2203a141282311221f9ba0048425a04b21d9fcff8fc62fc8ecd75" +checksum = "6515b13373b9dfbbe62e4426972253a15b74d93b1e2e95f92bbb2801c239a1d3" dependencies = [ "futures-core", "http", "itoa", "pin-project-lite", + "serde", + "serde_json", "slab", "wasi", "wstd-macro", @@ -151,9 +197,9 @@ dependencies = [ [[package]] name = "wstd-macro" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a8316f91fc3e508b03fdc979dec4ceeddb29744fc1c2c2ed825e00159f96f9" +checksum = "23d1758ed5cdf081802c60bc000a9cb90db8bcdf140fa8a7251a22b32af37d7b" dependencies = [ "quote", "syn", diff --git a/Cargo.toml b/Cargo.toml index e01eccc..1d95294 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,4 +15,4 @@ proxy = true [dependencies] wit-bindgen-rt = { version = "0.40.0", features = ["bitflags"] } -wstd = "0.5.1" +wstd = "0.5.3" From 214d164bc77e26e19d2a76bfbe2e79402ceffc62 Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Mon, 10 Mar 2025 15:19:06 -0500 Subject: [PATCH 41/75] feat: skip publish when workflow is manually triggered --- .github/workflows/publish.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 72f2b41..c6a5c07 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -39,6 +39,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Install cosign + if: github.event_name != 'worflow_dispatch' uses: sigstore/cosign-installer@v3.7.0 - name: Cache cargo bin @@ -65,6 +66,7 @@ jobs: run: cargo component build --release - name: Publish to GitHub Container Registry + if: github.event_name != 'worflow_dispatch' id: publish uses: bytecodealliance/wkg-github-action@v5 with: @@ -73,4 +75,5 @@ jobs: version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} - name: Sign the wasm component + if: github.event_name != 'worflow_dispatch' run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish.outputs.digest }} From 463e0a55c8b33c394a0b902362e9ae6e780659c3 Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Mon, 10 Mar 2025 15:26:52 -0500 Subject: [PATCH 42/75] mod: fix work misspelling --- .github/workflows/publish.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c6a5c07..1fab15c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -39,7 +39,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Install cosign - if: github.event_name != 'worflow_dispatch' + if: github.event_name != 'workflow_dispatch' uses: sigstore/cosign-installer@v3.7.0 - name: Cache cargo bin @@ -66,7 +66,7 @@ jobs: run: cargo component build --release - name: Publish to GitHub Container Registry - if: github.event_name != 'worflow_dispatch' + if: github.event_name != 'workflow_dispatch' id: publish uses: bytecodealliance/wkg-github-action@v5 with: @@ -75,5 +75,5 @@ jobs: version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} - name: Sign the wasm component - if: github.event_name != 'worflow_dispatch' + if: github.event_name != 'workflow_dispatch' run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish.outputs.digest }} From c855d0141e07d86e9c0122c647dbfde6bb46c380 Mon Sep 17 00:00:00 2001 From: Yosh Date: Tue, 11 Mar 2025 16:30:04 +0100 Subject: [PATCH 43/75] use cargo `binstall` --- .github/workflows/publish.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1fab15c..b743d72 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,6 +23,9 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 + - name: Install cargo-binstall + uses: cargo-bins/cargo-binstall@v1.10.15 + - name: Docker meta id: meta uses: docker/metadata-action@v5 @@ -59,8 +62,8 @@ jobs: name: Install build dependencies continue-on-error: false run: | - cargo install cargo-component --force --version ${{ env.CARGO_COMPONENT_VERSION }} - cargo install wkg --force + cargo binstall cargo-component --force --version ${{ env.CARGO_COMPONENT_VERSION }} + cargo binstall wkg --force - name: Build the component run: cargo component build --release From 4f8dc35d91d0a3f44d9fd60b64306078bd73a8b1 Mon Sep 17 00:00:00 2001 From: Yosh Date: Tue, 11 Mar 2025 16:39:29 +0100 Subject: [PATCH 44/75] update the sample name --- .github/workflows/publish.yml | 2 +- Cargo.lock | 14 +++++++------- Cargo.toml | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b743d72..32a8734 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,7 +8,7 @@ on: env: IMAGE_NAME: ${{ github.repository }} - COMPONENT_NAME: rust-wasi-hello + COMPONENT_NAME: sample-wasi-http-rust CARGO_COMPONENT_VERSION: "0.16.0" jobs: diff --git a/Cargo.lock b/Cargo.lock index 7fdfa45..4118374 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -80,19 +80,19 @@ dependencies = [ ] [[package]] -name = "rust-wasi-hello" +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "sample-wasi-http-rust" version = "0.0.0" dependencies = [ "wit-bindgen-rt 0.40.0", "wstd", ] -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - [[package]] name = "serde" version = "1.0.219" diff --git a/Cargo.toml b/Cargo.toml index 1d95294..85e17d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "rust-wasi-hello" +name = "sample-wasi-http-rust" version = "0.0.0" edition = "2021" publish = false @@ -8,7 +8,7 @@ publish = false crate-type = ["cdylib"] [package.metadata.component] -package = "component:rust-wasi-hello" +package = "component:sample-wasi-http-rust" # This tells cargo-component to use a special adapter, which doesn't depend on # `get-environment` or other things not present in the proxy world. proxy = true From 0fd47e3d7c73a7cdb76200abe26decfafc351b8e Mon Sep 17 00:00:00 2001 From: Yosh Date: Tue, 11 Mar 2025 17:01:23 +0100 Subject: [PATCH 45/75] encode wasm metadata on CI --- .github/workflows/publish.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 32a8734..d53c780 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,8 +8,13 @@ on: env: IMAGE_NAME: ${{ github.repository }} - COMPONENT_NAME: sample-wasi-http-rust CARGO_COMPONENT_VERSION: "0.16.0" + # TODO: These can be removed once https://github.com/bytecodealliance/cargo-component/pull/372 is merged + COMPONENT_NAME: sample-wasi-http-rust + COMPONENT_DESCRIPTION: "A sample WASI HTTP component written in Rust" + COMPONENT_SOURCE: "https://github.com/bytecodealliance/sample-wasi-http-rust" + COMPONENT_HOMEPAGE: "https://github.com/bytecodealliance/sample-wasi-http-rust" + COMPONENT_LICENSES: "Apache-2.0 WITH LLVM-exception" jobs: publish: @@ -76,6 +81,10 @@ jobs: file: target/wasm32-wasip1/release/rust_wasi_hello.wasm oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }} version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} + description: ${{ env.COMPONENT_DESCRIPTION }} + source: ${{ env.COMPONENT_SOURCE }} + homepage: ${{ env.COMPONENT_HOMEPAGE }} + licenses: ${{ env.COMPONENT_LICENSES }} - name: Sign the wasm component if: github.event_name != 'workflow_dispatch' From f55058cf216f53f0e0b242ea52f1809be6f9498c Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Tue, 11 Mar 2025 11:03:47 -0500 Subject: [PATCH 46/75] adds deps to wasm bin with auditable --- .github/workflows/publish.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 32a8734..45b637e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -64,6 +64,8 @@ jobs: run: | cargo binstall cargo-component --force --version ${{ env.CARGO_COMPONENT_VERSION }} cargo binstall wkg --force + cargo install cargo-auditable cargo-audit + alias cargo="cargo auditable" - name: Build the component run: cargo component build --release From c67bf31803ce2182bdd880a210f2fb00d79c565b Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Tue, 11 Mar 2025 11:06:28 -0500 Subject: [PATCH 47/75] use binstall --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 45b637e..a3a121f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -64,7 +64,7 @@ jobs: run: | cargo binstall cargo-component --force --version ${{ env.CARGO_COMPONENT_VERSION }} cargo binstall wkg --force - cargo install cargo-auditable cargo-audit + cargo binstall cargo-auditable cargo-audit alias cargo="cargo auditable" - name: Build the component From 32c482e889e5bcb066deea2ab2484e0f6ca6781e Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Tue, 11 Mar 2025 11:11:54 -0500 Subject: [PATCH 48/75] fix file name wkg publish --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e29b9f3..22a66a3 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -80,7 +80,7 @@ jobs: id: publish uses: bytecodealliance/wkg-github-action@v5 with: - file: target/wasm32-wasip1/release/rust_wasi_hello.wasm + file: target/wasm32-wasip1/release/${{ env.COMPONENT_NAME }} oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }} version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} description: ${{ env.COMPONENT_DESCRIPTION }} From 751ba12684117a9a05fb29ffb87585d4871059b9 Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Tue, 11 Mar 2025 11:23:58 -0500 Subject: [PATCH 49/75] normalize component name for publishing --- .github/workflows/publish.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 22a66a3..a178585 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -75,12 +75,15 @@ jobs: - name: Build the component run: cargo component build --release + - name: Normalize COMPONENT_NAME and Append .wasm + run: echo "COMPONENT_NAME_UNDERSCORED=${COMPONENT_NAME//-/_}.wasm" >> $GITHUB_ENV + - name: Publish to GitHub Container Registry if: github.event_name != 'workflow_dispatch' id: publish uses: bytecodealliance/wkg-github-action@v5 with: - file: target/wasm32-wasip1/release/${{ env.COMPONENT_NAME }} + file: target/wasm32-wasip1/release/${{ env.COMPONENT_NAME_UNDERSCORED }} oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }} version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} description: ${{ env.COMPONENT_DESCRIPTION }} From 8f4d0c6e0b92c3ab469ea2277203867068de8726 Mon Sep 17 00:00:00 2001 From: Josh Duffney Date: Tue, 11 Mar 2025 11:39:56 -0500 Subject: [PATCH 50/75] move alias to build step --- .github/workflows/publish.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a178585..e6143bb 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -70,10 +70,11 @@ jobs: cargo binstall cargo-component --force --version ${{ env.CARGO_COMPONENT_VERSION }} cargo binstall wkg --force cargo binstall cargo-auditable cargo-audit - alias cargo="cargo auditable" - name: Build the component - run: cargo component build --release + run: | + alias cargo="cargo auditable" + cargo component build --release - name: Normalize COMPONENT_NAME and Append .wasm run: echo "COMPONENT_NAME_UNDERSCORED=${COMPONENT_NAME//-/_}.wasm" >> $GITHUB_ENV From 56e5d5f473e95b4bec86e9b58a327df6787ff183 Mon Sep 17 00:00:00 2001 From: Yosh Date: Tue, 11 Mar 2025 18:08:49 +0100 Subject: [PATCH 51/75] Update README.md --- README.md | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8043f47..c47d458 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,16 @@ -# WASI Rust Sample +# Sample: `wasi:http` in Rust [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/yoshuawuyts/rust-wasi-hello) -An example project showing how to build an HTTP server for WASI 0.2 built in -Rust. +An example project showing how to build a spec-compliant +[`wasi:http/proxy`][wasi-http] server for WASI 0.2 written in Rust. This sample +includes several [routes](#routes) that showcase different behavior. This sample +can be run by any spec-compliant `wasi:http/proxy` server. + +Each release of this sample is packaged up as a [Wasm OCI image][wasm-oci-image] +and published to the [GitHub Packages Registry][gh-pkg]. See the ["Deploying +published artifacts"][using-arifacts] section for more on how to fetch and run +the published artifacts. ## Routes @@ -38,7 +45,7 @@ The HTTP server uses the `wasi:http/proxy` world. You can run it locally in a $ cargo component serve ``` -## Working with deployment artifacts +## Deploying published artifacts This project automatically published compiled Wasm Components as OCI to GitHub Artifacts. You can pull the artifact with any OCI-compliant tooling and run it @@ -47,8 +54,8 @@ latest published version from GitHub releases and run it in a local `wasmtime` instance you can run the following command: ```bash -$ wkg pull ghcr.io/yoshuawuyts/rust-wasi-hello:latest -$ wasmtime serve rust-wasi-hello.wasm +$ wkg pull ghcr.io/bytecodealliance/sample-wasi-http-rust/sample-wasi-http-rust:latest +$ wasmtime serve sample-wasi-http-rust.wasm ``` For production workloads however, you may want to use other runtimes or @@ -66,3 +73,7 @@ on the pull + serve pattern we've shown here. Apache-2.0 with LLVM Exception [cargo-component]: https://github.com/bytecodealliance/cargo-component +[wasm-oci-image]: https://tag-runtime.cncf.io/wgs/wasm/deliverables/wasm-oci-artifact/ +[gh-pkg]: https://github.com/bytecodealliance/sample-wasi-http-rust/pkgs/container/sample-wasi-http-rust%2Fsample-wasi-http-rust +[using-arifacts]: #working-with-deployment-artifacts +[wasi-http]: https://github.com/WebAssembly/wasi-http From 582e40fb161f50e1f197351c4461b8cdcfc6eab5 Mon Sep 17 00:00:00 2001 From: Yosh Date: Wed, 12 Mar 2025 11:29:47 +0100 Subject: [PATCH 52/75] Update README.md --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c47d458..65e5d64 100644 --- a/README.md +++ b/README.md @@ -50,11 +50,11 @@ $ cargo component serve This project automatically published compiled Wasm Components as OCI to GitHub Artifacts. You can pull the artifact with any OCI-compliant tooling and run it in any Wasm runtime that supports the `wasi:http/proxy` world. To fetch the -latest published version from GitHub releases and run it in a local `wasmtime` -instance you can run the following command: +latest published version from GitHub releases using [wkg][wkg] and run it in a +local [`wasmtime` instance][wasmtime] you can run the following commands: ```bash -$ wkg pull ghcr.io/bytecodealliance/sample-wasi-http-rust/sample-wasi-http-rust:latest +$ wkg oci pull ghcr.io/bytecodealliance/sample-wasi-http-rust/sample-wasi-http-rust:latest $ wasmtime serve sample-wasi-http-rust.wasm ``` @@ -77,3 +77,5 @@ Apache-2.0 with LLVM Exception [gh-pkg]: https://github.com/bytecodealliance/sample-wasi-http-rust/pkgs/container/sample-wasi-http-rust%2Fsample-wasi-http-rust [using-arifacts]: #working-with-deployment-artifacts [wasi-http]: https://github.com/WebAssembly/wasi-http +[wkg]: https://github.com/bytecodealliance/wasm-pkg-tools/tree/main/crates/wkg +[wasmtime]: https://wasmtime.dev From fd61703ebd250ed1c1506927d379ac3c39dd382a Mon Sep 17 00:00:00 2001 From: Yosh Date: Wed, 12 Mar 2025 11:32:38 +0100 Subject: [PATCH 53/75] Publish a `:latest` tag --- .github/workflows/publish.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e6143bb..9c87a29 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -79,7 +79,7 @@ jobs: - name: Normalize COMPONENT_NAME and Append .wasm run: echo "COMPONENT_NAME_UNDERSCORED=${COMPONENT_NAME//-/_}.wasm" >> $GITHUB_ENV - - name: Publish to GitHub Container Registry + - name: Publish `:` to GitHub Container Registry if: github.event_name != 'workflow_dispatch' id: publish uses: bytecodealliance/wkg-github-action@v5 @@ -92,6 +92,19 @@ jobs: homepage: ${{ env.COMPONENT_HOMEPAGE }} licenses: ${{ env.COMPONENT_LICENSES }} + - name: Publish `:latest` release to GitHub Container Registry + if: github.event_name != 'workflow_dispatch' + id: publish + uses: bytecodealliance/wkg-github-action@v5 + with: + file: target/wasm32-wasip1/release/${{ env.COMPONENT_NAME_UNDERSCORED }} + oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }} + version: latest + description: ${{ env.COMPONENT_DESCRIPTION }} + source: ${{ env.COMPONENT_SOURCE }} + homepage: ${{ env.COMPONENT_HOMEPAGE }} + licenses: ${{ env.COMPONENT_LICENSES }} + - name: Sign the wasm component if: github.event_name != 'workflow_dispatch' run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish.outputs.digest }} From 564297693b643f2a877450033a777f37c7e83b1a Mon Sep 17 00:00:00 2001 From: Yosh Date: Wed, 12 Mar 2025 11:35:44 +0100 Subject: [PATCH 54/75] Fix component signing --- .github/workflows/publish.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9c87a29..f2a2c6d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -81,7 +81,7 @@ jobs: - name: Publish `:` to GitHub Container Registry if: github.event_name != 'workflow_dispatch' - id: publish + id: publish_versioned uses: bytecodealliance/wkg-github-action@v5 with: file: target/wasm32-wasip1/release/${{ env.COMPONENT_NAME_UNDERSCORED }} @@ -92,9 +92,13 @@ jobs: homepage: ${{ env.COMPONENT_HOMEPAGE }} licenses: ${{ env.COMPONENT_LICENSES }} + - name: Sign the versioned wasm component + if: github.event_name != 'workflow_dispatch' + run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish_versioned.outputs.digest }} + - name: Publish `:latest` release to GitHub Container Registry if: github.event_name != 'workflow_dispatch' - id: publish + id: publish_latest uses: bytecodealliance/wkg-github-action@v5 with: file: target/wasm32-wasip1/release/${{ env.COMPONENT_NAME_UNDERSCORED }} @@ -105,6 +109,7 @@ jobs: homepage: ${{ env.COMPONENT_HOMEPAGE }} licenses: ${{ env.COMPONENT_LICENSES }} - - name: Sign the wasm component + - name: Sign the latest wasm component if: github.event_name != 'workflow_dispatch' - run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish.outputs.digest }} + run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish_latest.outputs.digest }} + From 37411ea3e04e96ec50541b6834de913f1d9298ef Mon Sep 17 00:00:00 2001 From: Yosh Date: Wed, 12 Mar 2025 11:42:44 +0100 Subject: [PATCH 55/75] attempt to fix cargo component build --- .github/workflows/publish.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e6143bb..97eb83c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -72,9 +72,7 @@ jobs: cargo binstall cargo-auditable cargo-audit - name: Build the component - run: | - alias cargo="cargo auditable" - cargo component build --release + run: cargo auditable component build --release - name: Normalize COMPONENT_NAME and Append .wasm run: echo "COMPONENT_NAME_UNDERSCORED=${COMPONENT_NAME//-/_}.wasm" >> $GITHUB_ENV From 0c018d6919d415c737d0f2aced227347ef226d26 Mon Sep 17 00:00:00 2001 From: ralph squillace Date: Wed, 12 Mar 2025 19:34:55 +0100 Subject: [PATCH 56/75] adding basic debug lldb config for vscode codelldb extension --- .vscode/launch.json | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..e304382 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,23 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "LLDB Debug", + "program": "wasmtime", + "args": [ + "serve", + "-D", + "debug-info=y", + "--dir", + ".", + "${workspaceFolder}/target/wasm32-wasip1/debug/sample_wasi_http_rust.wasm", + ], + "cwd": "${workspaceFolder}" + } + ] +} From 04b099a2901666b4776933dbdc44e38eb1c31be2 Mon Sep 17 00:00:00 2001 From: ralph squillace Date: Thu, 13 Mar 2025 15:05:50 +0100 Subject: [PATCH 57/75] added GDB, build tasks before debug --- .vscode/launch.json | 25 ++++++++++++++++++++++++- .vscode/tasks.json | 15 +++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 .vscode/tasks.json diff --git a/.vscode/launch.json b/.vscode/launch.json index e304382..b38422f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,6 +8,7 @@ "type": "lldb", "request": "launch", "name": "LLDB Debug", + "preLaunchTask": "Build WebAssembly", "program": "wasmtime", "args": [ "serve", @@ -15,9 +16,31 @@ "debug-info=y", "--dir", ".", - "${workspaceFolder}/target/wasm32-wasip1/debug/sample_wasi_http_rust.wasm", + "${workspaceFolder}/target/wasm32-wasip1/debug/sample_wasi_http_rust.wasm" ], "cwd": "${workspaceFolder}" + }, + { + "name": "GDB debug", + "type":"cppdbg", + "request": "launch", + "preLaunchTask": "Build WebAssembly", + "program": "/home//.wasmtime/bin/wasmtime", + "args": [ + "serve", + "-D", + "debug-info=y", + "--dir", + ".", + "${workspaceFolder}/target/wasm32-wasip1/debug/sample_wasi_http_rust.wasm" + ], + "cwd": "${workspaceFolder}", + "MIMode": "gdb", + "setupCommands": [ + { + "text": "-enable-pretty-printing", + } + ] } ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..4b6bd4f --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,15 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Build WebAssembly", + "type": "shell", + "command": "cargo component build", + "group": "build", + "presentation": { + "reveal": "always", + "panel": "new" + } + } + ] +} \ No newline at end of file From 5e967548b5c1ce7a4c5f2144fa56ab0020b81916 Mon Sep 17 00:00:00 2001 From: Ralph Squillace Date: Mon, 17 Mar 2025 11:08:19 +0100 Subject: [PATCH 58/75] Update README.md to add debugging instructions --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 65e5d64..fdc738f 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,8 @@ The HTTP server uses the `wasi:http/proxy` world. You can run it locally in a ```rust $ cargo component serve ``` +### Note on Debugging +There are launch and task configuration files if you want to use VSCode for debugging in an IDE; however, if you prefer using GDB or LLDB directly the configuration files should be enough to get you up and running. Note that the [GDB configuration requires an absolute path](https://github.com/bytecodealliance/sample-wasi-http-rust/blob/fe47fc9f6c87d09575f6683a26f9a67e3e71aa26/.vscode/launch.json#L28), so that configuration in VSCode you will need to modify for your computer. ## Deploying published artifacts From 44708a07bc55201352767e7af272c123b3a606a2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 10:29:28 +0000 Subject: [PATCH 59/75] Bump wit-bindgen-rt from 0.40.0 to 0.41.0 Bumps [wit-bindgen-rt](https://github.com/bytecodealliance/wit-bindgen) from 0.40.0 to 0.41.0. - [Release notes](https://github.com/bytecodealliance/wit-bindgen/releases) - [Commits](https://github.com/bytecodealliance/wit-bindgen/compare/v0.40.0...v0.41.0) --- updated-dependencies: - dependency-name: wit-bindgen-rt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4118374..9288590 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -89,7 +89,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" name = "sample-wasi-http-rust" version = "0.0.0" dependencies = [ - "wit-bindgen-rt 0.40.0", + "wit-bindgen-rt 0.41.0", "wstd", ] @@ -171,9 +171,9 @@ dependencies = [ [[package]] name = "wit-bindgen-rt" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68faed92ae696b93ea9a7b67ba6c37bf09d72c6d9a70fa824a743c3020212f11" +checksum = "c4db52a11d4dfb0a59f194c064055794ee6564eb1ced88c25da2cf76e50c5621" dependencies = [ "bitflags", ] diff --git a/Cargo.toml b/Cargo.toml index 85e17d2..f5f8f64 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,5 @@ package = "component:sample-wasi-http-rust" proxy = true [dependencies] -wit-bindgen-rt = { version = "0.40.0", features = ["bitflags"] } +wit-bindgen-rt = { version = "0.41.0", features = ["bitflags"] } wstd = "0.5.3" From 1b46d39c62bd2d596501526b0545482887e7b19f Mon Sep 17 00:00:00 2001 From: Aaron Wislang Date: Fri, 28 Mar 2025 13:53:28 -0400 Subject: [PATCH 60/75] Update Codespaces button URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fdc738f..9aae99e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Sample: `wasi:http` in Rust -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/yoshuawuyts/rust-wasi-hello) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/bytecodealliance/sample-wasi-http-rust) An example project showing how to build a spec-compliant [`wasi:http/proxy`][wasi-http] server for WASI 0.2 written in Rust. This sample From ebb7186353de803d64162d6647687b57839b5218 Mon Sep 17 00:00:00 2001 From: Yosh Date: Tue, 29 Apr 2025 17:17:40 +0200 Subject: [PATCH 61/75] upload the component SBOMs --- .github/workflows/publish.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 67b4e2c..80c5dd6 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -70,6 +70,7 @@ jobs: cargo binstall cargo-component --force --version ${{ env.CARGO_COMPONENT_VERSION }} cargo binstall wkg --force cargo binstall cargo-auditable cargo-audit + cargo binstall auditable2cdx - name: Build the component run: cargo auditable component build --release @@ -77,6 +78,10 @@ jobs: - name: Normalize COMPONENT_NAME and Append .wasm run: echo "COMPONENT_NAME_UNDERSCORED=${COMPONENT_NAME//-/_}.wasm" >> $GITHUB_ENV + - name: Extract the SBOM from the component + if: github.event_name != 'workflow_dispatch' + run: auditable2cdx target/wasm32-wasip1/release/${{ env.COMPONENT_NAME_UNDERSCORED }} >> ${ env.COMPONENT_NAME }.spdx.json + - name: Publish `:` to GitHub Container Registry if: github.event_name != 'workflow_dispatch' id: publish_versioned @@ -94,6 +99,10 @@ jobs: if: github.event_name != 'workflow_dispatch' run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish_versioned.outputs.digest }} + - name: Sign the SBOM for the versioned Wasm component + if: github.event_name != 'workflow_dispatch' + run: cosign attest --type spdxjson --predicate ${ env.COMPONENT_NAME }.spdx.json ${{ steps.publish_versioned.outputs.digest }} + - name: Publish `:latest` release to GitHub Container Registry if: github.event_name != 'workflow_dispatch' id: publish_latest @@ -111,3 +120,6 @@ jobs: if: github.event_name != 'workflow_dispatch' run: cosign sign --yes ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish_latest.outputs.digest }} + - name: Sign the SBOM for the latest Wasm component + if: github.event_name != 'workflow_dispatch' + run: cosign attest --type spdxjson --predicate ${ env.COMPONENT_NAME }.spdx.json ${{ steps.publish_latest.outputs.digest }} From a23e1bb3e2943bc4ad16206cfab20fda41242fb1 Mon Sep 17 00:00:00 2001 From: Yosh Date: Tue, 29 Apr 2025 17:24:39 +0200 Subject: [PATCH 62/75] fix substitution --- .github/workflows/publish.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 80c5dd6..035572b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -80,7 +80,7 @@ jobs: - name: Extract the SBOM from the component if: github.event_name != 'workflow_dispatch' - run: auditable2cdx target/wasm32-wasip1/release/${{ env.COMPONENT_NAME_UNDERSCORED }} >> ${ env.COMPONENT_NAME }.spdx.json + run: auditable2cdx target/wasm32-wasip1/release/${{ env.COMPONENT_NAME_UNDERSCORED }} >> ${{ env.COMPONENT_NAME }}.spdx.json - name: Publish `:` to GitHub Container Registry if: github.event_name != 'workflow_dispatch' @@ -101,7 +101,7 @@ jobs: - name: Sign the SBOM for the versioned Wasm component if: github.event_name != 'workflow_dispatch' - run: cosign attest --type spdxjson --predicate ${ env.COMPONENT_NAME }.spdx.json ${{ steps.publish_versioned.outputs.digest }} + run: cosign attest --type spdxjson --predicate ${{ env.COMPONENT_NAME }}.spdx.json ${{ steps.publish_versioned.outputs.digest }} - name: Publish `:latest` release to GitHub Container Registry if: github.event_name != 'workflow_dispatch' @@ -122,4 +122,4 @@ jobs: - name: Sign the SBOM for the latest Wasm component if: github.event_name != 'workflow_dispatch' - run: cosign attest --type spdxjson --predicate ${ env.COMPONENT_NAME }.spdx.json ${{ steps.publish_latest.outputs.digest }} + run: cosign attest --type spdxjson --predicate ${{ env.COMPONENT_NAME }}.spdx.json ${{ steps.publish_latest.outputs.digest }} From 19f3bde8f1334c6d1c7824c297b1e73940466cd2 Mon Sep 17 00:00:00 2001 From: Yosh Date: Tue, 29 Apr 2025 17:30:40 +0200 Subject: [PATCH 63/75] Update publish.yml --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 035572b..4abec5e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -101,7 +101,7 @@ jobs: - name: Sign the SBOM for the versioned Wasm component if: github.event_name != 'workflow_dispatch' - run: cosign attest --type spdxjson --predicate ${{ env.COMPONENT_NAME }}.spdx.json ${{ steps.publish_versioned.outputs.digest }} + run: cosign attest --yes --type spdxjson --predicate ${{ env.COMPONENT_NAME }}.spdx.json ${{ steps.publish_versioned.outputs.digest }} - name: Publish `:latest` release to GitHub Container Registry if: github.event_name != 'workflow_dispatch' @@ -122,4 +122,4 @@ jobs: - name: Sign the SBOM for the latest Wasm component if: github.event_name != 'workflow_dispatch' - run: cosign attest --type spdxjson --predicate ${{ env.COMPONENT_NAME }}.spdx.json ${{ steps.publish_latest.outputs.digest }} + run: cosign attest --yes --type spdxjson --predicate ${{ env.COMPONENT_NAME }}.spdx.json ${{ steps.publish_latest.outputs.digest }} From 17ed82d673274cf99157cef6a509bfc0e04a30c3 Mon Sep 17 00:00:00 2001 From: Yosh Date: Tue, 29 Apr 2025 17:36:35 +0200 Subject: [PATCH 64/75] fix ghcr reference in actions --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4abec5e..ae071dc 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -101,7 +101,7 @@ jobs: - name: Sign the SBOM for the versioned Wasm component if: github.event_name != 'workflow_dispatch' - run: cosign attest --yes --type spdxjson --predicate ${{ env.COMPONENT_NAME }}.spdx.json ${{ steps.publish_versioned.outputs.digest }} + run: cosign attest --yes --type spdxjson --predicate ${{ env.COMPONENT_NAME }}.spdx.json ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish_versioned.outputs.digest }} - name: Publish `:latest` release to GitHub Container Registry if: github.event_name != 'workflow_dispatch' @@ -122,4 +122,4 @@ jobs: - name: Sign the SBOM for the latest Wasm component if: github.event_name != 'workflow_dispatch' - run: cosign attest --yes --type spdxjson --predicate ${{ env.COMPONENT_NAME }}.spdx.json ${{ steps.publish_latest.outputs.digest }} + run: cosign attest --yes --type spdxjson --predicate ${{ env.COMPONENT_NAME }}.spdx.json ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }}@${{ steps.publish_latest.outputs.digest }} From 14df938d163c0dc12efa2b12c9a151acae784475 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 15:49:03 +0000 Subject: [PATCH 65/75] build(deps): bump wstd from 0.5.3 to 0.5.4 Bumps [wstd](https://github.com/yoshuawuyts/wstd) from 0.5.3 to 0.5.4. - [Release notes](https://github.com/yoshuawuyts/wstd/releases) - [Commits](https://github.com/yoshuawuyts/wstd/commits/v0.5.4) --- updated-dependencies: - dependency-name: wstd dependency-version: 0.5.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9288590..1bed836 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -180,9 +180,9 @@ dependencies = [ [[package]] name = "wstd" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6515b13373b9dfbbe62e4426972253a15b74d93b1e2e95f92bbb2801c239a1d3" +checksum = "c5f51495e1ae93476d1629b5810bd6068fdf22545a8ada7ea5929e2faed7b793" dependencies = [ "futures-core", "http", @@ -197,9 +197,9 @@ dependencies = [ [[package]] name = "wstd-macro" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d1758ed5cdf081802c60bc000a9cb90db8bcdf140fa8a7251a22b32af37d7b" +checksum = "225ac858e4405bdf164d92d070422c0b3b9b81f9b0b68836841f4d1bafc446b3" dependencies = [ "quote", "syn", diff --git a/Cargo.toml b/Cargo.toml index f5f8f64..b7f1081 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,4 +15,4 @@ proxy = true [dependencies] wit-bindgen-rt = { version = "0.41.0", features = ["bitflags"] } -wstd = "0.5.3" +wstd = "0.5.4" From e2afd7f0f1fb948606a69c697748c510ba9539e1 Mon Sep 17 00:00:00 2001 From: Aaron Wislang Date: Mon, 19 Jan 2026 17:21:50 -0500 Subject: [PATCH 66/75] fix: inline install script in Dockerfile and update image reference Fixes #50 - Remove dependency on deleted scripts/ directory by inlining wasmtime, cargo-component, and wkg installation in Dockerfile - Update devcontainer.json to reference the correct published image (bytecodealliance/sample-wasi-http-rust-devcontainer) --- .devcontainer/devcontainer.json | 2 +- .devcontainer/docker/Dockerfile | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a899524..6b99a42 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "image": "ghcr.io/asw101/rust-wasi-hello-devcontainer:latest", + "image": "ghcr.io/bytecodealliance/sample-wasi-http-rust-devcontainer:latest", "features": { //"ghcr.io/devcontainers/features/rust:1": {}, "ghcr.io/devcontainers/features/azure-cli:1": {} diff --git a/.devcontainer/docker/Dockerfile b/.devcontainer/docker/Dockerfile index 20136f2..44e2f8a 100644 --- a/.devcontainer/docker/Dockerfile +++ b/.devcontainer/docker/Dockerfile @@ -3,5 +3,8 @@ FROM mcr.microsoft.com/devcontainers/rust:${TAG} USER vscode -COPY ./scripts /tmp/scripts/ -RUN bash /tmp/scripts/install.sh +# Install wasmtime +RUN curl https://wasmtime.dev/install.sh -sSf | bash + +# Install cargo-component and wkg +RUN cargo install cargo-component wkg From eca1f72e83e292d4ec88cc5039f45c9719e8ea4e Mon Sep 17 00:00:00 2001 From: Aaron Wislang Date: Mon, 19 Jan 2026 17:47:21 -0500 Subject: [PATCH 67/75] fix: use nested path pattern for devcontainer image Update IMAGE_NAME to use nested path (repo/devcontainer) consistent with the main wasm component publishing pattern. --- .devcontainer/devcontainer.json | 2 +- .github/workflows/publish-devcontainer.yml | 2 +- _/PR-50.md | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 _/PR-50.md diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 6b99a42..6449e80 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "image": "ghcr.io/bytecodealliance/sample-wasi-http-rust-devcontainer:latest", + "image": "ghcr.io/bytecodealliance/sample-wasi-http-rust/devcontainer:latest", "features": { //"ghcr.io/devcontainers/features/rust:1": {}, "ghcr.io/devcontainers/features/azure-cli:1": {} diff --git a/.github/workflows/publish-devcontainer.yml b/.github/workflows/publish-devcontainer.yml index bba388b..cae661b 100644 --- a/.github/workflows/publish-devcontainer.yml +++ b/.github/workflows/publish-devcontainer.yml @@ -10,7 +10,7 @@ on: # Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. env: REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }}-devcontainer + IMAGE_NAME: ${{ github.repository }}/devcontainer # There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. jobs: diff --git a/_/PR-50.md b/_/PR-50.md new file mode 100644 index 0000000..9edfd9e --- /dev/null +++ b/_/PR-50.md @@ -0,0 +1,21 @@ +# Fix the dev container publish step + +## Summary + +Fixes #50 + +The devcontainer publish workflow was failing because the Dockerfile referenced a `scripts/` directory that was removed in #26. + +## Changes + +- **Dockerfile**: Inlined the installation commands directly instead of copying the deleted `scripts/` directory: + - Install wasmtime via the official install script + - Install `cargo-component` and `wkg` via cargo + +- **devcontainer.json**: Updated the image reference from `ghcr.io/asw101/rust-wasi-hello-devcontainer:latest` to `ghcr.io/bytecodealliance/sample-wasi-http-rust-devcontainer:latest` to match the workflow's published image path. + +## Testing + +- [ ] Trigger the `publish-devcontainer.yml` workflow manually via `workflow_dispatch` +- [ ] Verify the image builds and pushes successfully to `ghcr.io/bytecodealliance/sample-wasi-http-rust-devcontainer` +- [ ] Open the repository in a GitHub Codespace to confirm the devcontainer works From 9f33550aadfc49f7d5097aefc1f3933a8051ccf0 Mon Sep 17 00:00:00 2001 From: Aaron Wislang Date: Mon, 19 Jan 2026 17:55:11 -0500 Subject: [PATCH 68/75] chore: remove PR notes directory --- _/PR-50.md | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 _/PR-50.md diff --git a/_/PR-50.md b/_/PR-50.md deleted file mode 100644 index 9edfd9e..0000000 --- a/_/PR-50.md +++ /dev/null @@ -1,21 +0,0 @@ -# Fix the dev container publish step - -## Summary - -Fixes #50 - -The devcontainer publish workflow was failing because the Dockerfile referenced a `scripts/` directory that was removed in #26. - -## Changes - -- **Dockerfile**: Inlined the installation commands directly instead of copying the deleted `scripts/` directory: - - Install wasmtime via the official install script - - Install `cargo-component` and `wkg` via cargo - -- **devcontainer.json**: Updated the image reference from `ghcr.io/asw101/rust-wasi-hello-devcontainer:latest` to `ghcr.io/bytecodealliance/sample-wasi-http-rust-devcontainer:latest` to match the workflow's published image path. - -## Testing - -- [ ] Trigger the `publish-devcontainer.yml` workflow manually via `workflow_dispatch` -- [ ] Verify the image builds and pushes successfully to `ghcr.io/bytecodealliance/sample-wasi-http-rust-devcontainer` -- [ ] Open the repository in a GitHub Codespace to confirm the devcontainer works From 5a2dc90b8bca2251daa2074f7d2c7a24213d917c Mon Sep 17 00:00:00 2001 From: Aaron Wislang Date: Mon, 19 Jan 2026 18:26:06 -0500 Subject: [PATCH 69/75] feat: tag devcontainer image with latest on default branch --- .github/workflows/publish-devcontainer.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish-devcontainer.yml b/.github/workflows/publish-devcontainer.yml index cae661b..580c814 100644 --- a/.github/workflows/publish-devcontainer.yml +++ b/.github/workflows/publish-devcontainer.yml @@ -39,6 +39,9 @@ jobs: uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=raw,value=latest,enable={{is_default_branch}} # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages. # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository. # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. From dda3f874f978f5532ef1350eee20c52401acdceb Mon Sep 17 00:00:00 2001 From: Aaron Wislang Date: Mon, 19 Jan 2026 18:34:09 -0500 Subject: [PATCH 70/75] chore: remove outdated devcontainer scripts directory --- .devcontainer/scripts/devcontainer.json | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 .devcontainer/scripts/devcontainer.json diff --git a/.devcontainer/scripts/devcontainer.json b/.devcontainer/scripts/devcontainer.json deleted file mode 100644 index 17c97f1..0000000 --- a/.devcontainer/scripts/devcontainer.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "image": "mcr.microsoft.com/devcontainers/universal:2", - "features": { - "ghcr.io/devcontainers/features/rust:1": {}, - "ghcr.io/devcontainers/features/azure-cli:1": {} - }, - "postCreateCommand": "bash scripts/install.sh", - "customizations": { - "vscode": { - "extensions": [ - "rust-lang.rust-analyzer" - ] - } - } -} \ No newline at end of file From 5c32dfa80e1b92608f0d9000c893cc6d1186c258 Mon Sep 17 00:00:00 2001 From: Aaron Wislang Date: Mon, 19 Jan 2026 18:46:05 -0500 Subject: [PATCH 71/75] disable features to reduce startup time --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 6449e80..726cd1a 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,7 +2,7 @@ "image": "ghcr.io/bytecodealliance/sample-wasi-http-rust/devcontainer:latest", "features": { //"ghcr.io/devcontainers/features/rust:1": {}, - "ghcr.io/devcontainers/features/azure-cli:1": {} + //"ghcr.io/devcontainers/features/azure-cli:1": {} }, "customizations": { "vscode": { From e42191dccea55db35ea4e4734f2b4404a683b3c4 Mon Sep 17 00:00:00 2001 From: Bailey Hayes Date: Fri, 23 Jan 2026 14:45:54 -0500 Subject: [PATCH 72/75] fix: use wkg and wasm32-wasip2 target directly Removes soon to be archived cargo-component --- .github/workflows/publish.yml | 16 ++++++++-------- .github/workflows/test.yml | 9 ++------- .gitignore | 3 ++- Cargo.toml | 6 ------ README.md | 30 ++++++++++++++++++------------ wit/world.wit | 5 +++++ wkg.lock | 12 ++++++++++++ 7 files changed, 47 insertions(+), 34 deletions(-) create mode 100644 wit/world.wit create mode 100644 wkg.lock diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ae071dc..04d518a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,8 +8,6 @@ on: env: IMAGE_NAME: ${{ github.repository }} - CARGO_COMPONENT_VERSION: "0.16.0" - # TODO: These can be removed once https://github.com/bytecodealliance/cargo-component/pull/372 is merged COMPONENT_NAME: sample-wasi-http-rust COMPONENT_DESCRIPTION: "A sample WASI HTTP component written in Rust" COMPONENT_SOURCE: "https://github.com/bytecodealliance/sample-wasi-http-rust" @@ -67,27 +65,29 @@ jobs: name: Install build dependencies continue-on-error: false run: | - cargo binstall cargo-component --force --version ${{ env.CARGO_COMPONENT_VERSION }} - cargo binstall wkg --force + cargo binstall wkg --force cargo binstall cargo-auditable cargo-audit cargo binstall auditable2cdx + - name: Add wasm32-wasip2 target + run: rustup target add wasm32-wasip2 + - name: Build the component - run: cargo auditable component build --release + run: cargo auditable build --release --target wasm32-wasip2 - name: Normalize COMPONENT_NAME and Append .wasm run: echo "COMPONENT_NAME_UNDERSCORED=${COMPONENT_NAME//-/_}.wasm" >> $GITHUB_ENV - name: Extract the SBOM from the component if: github.event_name != 'workflow_dispatch' - run: auditable2cdx target/wasm32-wasip1/release/${{ env.COMPONENT_NAME_UNDERSCORED }} >> ${{ env.COMPONENT_NAME }}.spdx.json + run: auditable2cdx target/wasm32-wasip2/release/${{ env.COMPONENT_NAME_UNDERSCORED }} >> ${{ env.COMPONENT_NAME }}.spdx.json - name: Publish `:` to GitHub Container Registry if: github.event_name != 'workflow_dispatch' id: publish_versioned uses: bytecodealliance/wkg-github-action@v5 with: - file: target/wasm32-wasip1/release/${{ env.COMPONENT_NAME_UNDERSCORED }} + file: target/wasm32-wasip2/release/${{ env.COMPONENT_NAME_UNDERSCORED }} oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }} version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} description: ${{ env.COMPONENT_DESCRIPTION }} @@ -108,7 +108,7 @@ jobs: id: publish_latest uses: bytecodealliance/wkg-github-action@v5 with: - file: target/wasm32-wasip1/release/${{ env.COMPONENT_NAME_UNDERSCORED }} + file: target/wasm32-wasip2/release/${{ env.COMPONENT_NAME_UNDERSCORED }} oci-reference-without-tag: ghcr.io/${{ env.IMAGE_NAME }}/${{ env.COMPONENT_NAME }} version: latest description: ${{ env.COMPONENT_DESCRIPTION }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3459efc..d3ccf5f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,14 +12,9 @@ jobs: - uses: actions/checkout@v4 - name: Add wasm32-wasip2 target run: rustup target add wasm32-wasip2 - - name: Install cargo-binstall - uses: cargo-bins/cargo-binstall@v1.10.15 - - name: Install cargo-component - shell: bash - run: cargo binstall cargo-component - name: Run cargo check shell: bash - run: cargo component check + run: cargo check --target wasm32-wasip2 check_style: name: It follows all style conventions @@ -29,6 +24,6 @@ jobs: - name: Install wasm32-wasip2 target run: rustup target add wasm32-wasip2 - name: Run cargo clippy - run: cargo clippy -- -Dwarnings + run: cargo clippy --target wasm32-wasip2 -- -Dwarnings - name: Run cargo fmt run: cargo fmt --all -- --check diff --git a/.gitignore b/.gitignore index c41cc9e..9211caa 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/target \ No newline at end of file +/target +/wit/deps \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index b7f1081..0a946ce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,12 +7,6 @@ publish = false [lib] crate-type = ["cdylib"] -[package.metadata.component] -package = "component:sample-wasi-http-rust" -# This tells cargo-component to use a special adapter, which doesn't depend on -# `get-environment` or other things not present in the proxy world. -proxy = true - [dependencies] wit-bindgen-rt = { version = "0.41.0", features = ["bitflags"] } wstd = "0.5.4" diff --git a/README.md b/README.md index 9aae99e..4ae418d 100644 --- a/README.md +++ b/README.md @@ -32,17 +32,29 @@ would prefer to run this locally, you can run the following commands: ```bash $ curl https://wasmtime.dev/install.sh -sSf | bash # install wasm runtime -$ cargo install cargo-component # install build tooling $ cargo install wkg # install wasm OCI tooling ``` +## Fetching WIT Dependencies + +This project uses [wkg][wkg] to manage WIT dependencies. To fetch the required +WIT packages, run: + +```bash +$ wkg wit fetch +``` + +This will download the WIT dependencies specified in the project and populate +the `wit/deps` directory. The `wkg.lock` file tracks the resolved versions. + ## Local Development -The HTTP server uses the `wasi:http/proxy` world. You can run it locally in a -`wasmtime` instance by using the following [cargo-component] command: +The HTTP server uses the `wasi:http/proxy` world. You can build and run it +locally using cargo and wasmtime: -```rust -$ cargo component serve +```bash +$ cargo build --release --target wasm32-wasip2 # build the component +$ wasmtime serve -Scli -Shttp target/wasm32-wasip2/release/sample_wasi_http_rust.wasm ``` ### Note on Debugging There are launch and task configuration files if you want to use VSCode for debugging in an IDE; however, if you prefer using GDB or LLDB directly the configuration files should be enough to get you up and running. Note that the [GDB configuration requires an absolute path](https://github.com/bytecodealliance/sample-wasi-http-rust/blob/fe47fc9f6c87d09575f6683a26f9a67e3e71aa26/.vscode/launch.json#L28), so that configuration in VSCode you will need to modify for your computer. @@ -57,7 +69,7 @@ local [`wasmtime` instance][wasmtime] you can run the following commands: ```bash $ wkg oci pull ghcr.io/bytecodealliance/sample-wasi-http-rust/sample-wasi-http-rust:latest -$ wasmtime serve sample-wasi-http-rust.wasm +$ wasmtime serve -Scli -Shttp sample-wasi-http-rust.wasm ``` For production workloads however, you may want to use other runtimes or @@ -65,16 +77,10 @@ integrations which provide their own OCI integrations. Deployment will vary depending on you providers, though at their core they will tend to be variations on the pull + serve pattern we've shown here. -## See Also - -**Hosts** -- [sample-wasi-http-aks-wasmcloud](https://github.com/yoshuawuyts/sample-wasi-http-aks-wasmcloud) - A `wasi:http` example host environment running on AKS using the WasmCloud runtime - ## License Apache-2.0 with LLVM Exception -[cargo-component]: https://github.com/bytecodealliance/cargo-component [wasm-oci-image]: https://tag-runtime.cncf.io/wgs/wasm/deliverables/wasm-oci-artifact/ [gh-pkg]: https://github.com/bytecodealliance/sample-wasi-http-rust/pkgs/container/sample-wasi-http-rust%2Fsample-wasi-http-rust [using-arifacts]: #working-with-deployment-artifacts diff --git a/wit/world.wit b/wit/world.wit new file mode 100644 index 0000000..2bd7d01 --- /dev/null +++ b/wit/world.wit @@ -0,0 +1,5 @@ +package component:sample-wasi-http-rust; + +world sample-wasi-http-rust { + include wasi:http/proxy@0.2.2; +} diff --git a/wkg.lock b/wkg.lock new file mode 100644 index 0000000..3210499 --- /dev/null +++ b/wkg.lock @@ -0,0 +1,12 @@ +# This file is automatically generated. +# It is not intended for manual editing. +version = 1 + +[[packages]] +name = "wasi:http" +registry = "wasi.dev" + +[[packages.versions]] +requirement = "=0.2.2" +version = "0.2.2" +digest = "sha256:a1f129cdf1fde55ec2d4ae8d998c39a7e5cf7544a8bd84a831054ac0d2ac64dd" From 122cc47a81379a95ed71dec48813417453177280 Mon Sep 17 00:00:00 2001 From: Bailey Hayes Date: Tue, 27 Jan 2026 15:34:20 -0500 Subject: [PATCH 73/75] fix: update Dockerfile to install only wkg Removed installation of cargo-component from Dockerfile. I missed this in #81 --- .devcontainer/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/docker/Dockerfile b/.devcontainer/docker/Dockerfile index 44e2f8a..38326bc 100644 --- a/.devcontainer/docker/Dockerfile +++ b/.devcontainer/docker/Dockerfile @@ -7,4 +7,4 @@ USER vscode RUN curl https://wasmtime.dev/install.sh -sSf | bash # Install cargo-component and wkg -RUN cargo install cargo-component wkg +RUN cargo install wkg From 3fafb7ef9d0e9a2218d016216ebd91156e828e03 Mon Sep 17 00:00:00 2001 From: Pat Hickey Date: Mon, 16 Mar 2026 12:31:08 -0700 Subject: [PATCH 74/75] update to use wstd 0.6 --- Cargo.lock | 130 ++++++++++++++++++++++++++++++++++++++++++++--------- Cargo.toml | 7 +-- src/lib.rs | 78 ++++++++++++++++---------------- 3 files changed, 149 insertions(+), 66 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1bed836..aa6b1da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,18 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + [[package]] name = "autocfg" version = "1.4.0" @@ -16,9 +28,24 @@ checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "fastrand" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] [[package]] name = "fnv" @@ -32,6 +59,27 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + [[package]] name = "http" version = "1.2.0" @@ -43,6 +91,38 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + [[package]] name = "itoa" version = "1.0.14" @@ -55,6 +135,12 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -89,7 +175,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" name = "sample-wasi-http-rust" version = "0.0.0" dependencies = [ - "wit-bindgen-rt 0.41.0", + "http-body-util", "wstd", ] @@ -152,54 +238,56 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243" [[package]] -name = "wasi" -version = "0.14.0+wasi-0.2.3" +name = "waker-fn" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d67b0bdfec72b9fbaba698033291c327ef19ce3b34efbdcd7dc402a53850d9" -dependencies = [ - "wit-bindgen-rt 0.37.0", -] +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] -name = "wit-bindgen-rt" -version = "0.37.0" +name = "wasip2" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc801b991c56492f87ab3086e786468f75c285a4d73017ab0ebc2fa1aed5d82c" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ - "bitflags", + "wit-bindgen", ] [[package]] -name = "wit-bindgen-rt" -version = "0.41.0" +name = "wit-bindgen" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db52a11d4dfb0a59f194c064055794ee6564eb1ced88c25da2cf76e50c5621" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" dependencies = [ "bitflags", ] [[package]] name = "wstd" -version = "0.5.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f51495e1ae93476d1629b5810bd6068fdf22545a8ada7ea5929e2faed7b793" +checksum = "0903606f1acdecad11576768ecc61ce215d6848652ac16c0e4592bb265e4200e" dependencies = [ - "futures-core", + "anyhow", + "async-task", + "bytes", + "futures-lite", "http", + "http-body", + "http-body-util", "itoa", "pin-project-lite", "serde", "serde_json", "slab", - "wasi", + "wasip2", "wstd-macro", ] [[package]] name = "wstd-macro" -version = "0.5.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225ac858e4405bdf164d92d070422c0b3b9b81f9b0b68836841f4d1bafc446b3" +checksum = "d6a9df01a7fb39fbe7e9b5ef76f586f06425dd6f2be350de4781936f72f9899d" dependencies = [ "quote", "syn", diff --git a/Cargo.toml b/Cargo.toml index 0a946ce..d5a68f7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,9 +4,6 @@ version = "0.0.0" edition = "2021" publish = false -[lib] -crate-type = ["cdylib"] - [dependencies] -wit-bindgen-rt = { version = "0.41.0", features = ["bitflags"] } -wstd = "0.5.4" +http-body-util = "0.1.3" +wstd = "0.6" diff --git a/src/lib.rs b/src/lib.rs index d7f0b43..1474e36 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,28 +1,24 @@ -use wstd::http::body::{BodyForthcoming, IncomingBody}; -use wstd::http::server::{Finished, Responder}; -use wstd::http::{IntoBody, Request, Response, StatusCode}; -use wstd::io::{copy, empty, AsyncWrite}; +use wstd::http::{body::Bytes, Body, Request, Response, Result, StatusCode}; use wstd::time::{Duration, Instant}; #[wstd::http_server] -async fn main(req: Request, res: Responder) -> Finished { +async fn main(req: Request) -> Result> { match req.uri().path_and_query().unwrap().as_str() { - "/wait" => wait(req, res).await, - "/echo" => echo(req, res).await, - "/echo-headers" => echo_headers(req, res).await, - "/echo-trailers" => echo_trailers(req, res).await, - "/" => home(req, res).await, - _ => not_found(req, res).await, + "/wait" => wait(req).await, + "/echo" => echo(req).await, + "/echo-headers" => echo_headers(req).await, + "/echo-trailers" => echo_trailers(req).await, + "/" => home(req).await, + _ => not_found(req).await, } } -async fn home(_req: Request, res: Responder) -> Finished { - // To send a single string as the response body, use `res::respond`. - res.respond(Response::new("Hello, wasi:http/proxy world!\n".into_body())) - .await +async fn home(_req: Request) -> Result> { + // To send a single string as the response body: + Ok(Response::new("Hello, wasi:http/proxy world!\n".into())) } -async fn wait(_req: Request, res: Responder) -> Finished { +async fn wait(_req: Request) -> Result> { // Get the time now let now = Instant::now(); @@ -32,41 +28,43 @@ async fn wait(_req: Request, res: Responder) -> Finished { // Compute how long we slept for. let elapsed = Instant::now().duration_since(now).as_millis(); - // To stream data to the response body, use `res::start_response`. - let mut body = res.start_response(Response::new(BodyForthcoming)); - let result = body - .write_all(format!("slept for {elapsed} millis\n").as_bytes()) - .await; - Finished::finish(body, result, None) + Ok(Response::new( + format!("slept for {elapsed} millis\n").into(), + )) } -async fn echo(mut req: Request, res: Responder) -> Finished { +async fn echo(req: Request) -> Result> { // Stream data from the req body to the response body. - let mut body = res.start_response(Response::new(BodyForthcoming)); - let result = copy(req.body_mut(), &mut body).await; - Finished::finish(body, result, None) + let req_body = req.into_body(); + Ok(Response::new(req_body)) } -async fn echo_headers(req: Request, responder: Responder) -> Finished { +async fn echo_headers(req: Request) -> Result> { let mut res = Response::builder(); *res.headers_mut().unwrap() = req.into_parts().0.headers; - let res = res.body(empty()).unwrap(); - responder.respond(res).await + Ok(res.body(().into()).expect("builder success")) } -async fn echo_trailers(req: Request, res: Responder) -> Finished { - let body = res.start_response(Response::new(BodyForthcoming)); - let (trailers, result) = match req.into_body().finish().await { - Ok(trailers) => (trailers, Ok(())), - Err(err) => (Default::default(), Err(std::io::Error::other(err))), +async fn echo_trailers(req: Request) -> Result> { + use http_body_util::{BodyExt, Full}; + let collected = req.into_body().into_boxed_body().collect().await?; + let (trailers, report) = if let Some(trailers) = collected.trailers() { + ( + Some(Ok(trailers.clone())), + format!("recieved trailers: {trailers:?}"), + ) + } else { + (None, "request had no trailers".to_owned()) }; - Finished::finish(body, result, trailers) + + Ok(Response::new(Body::from_http_body( + Full::new(Bytes::from(report)).with_trailers(async { trailers }), + ))) } -async fn not_found(_req: Request, responder: Responder) -> Finished { - let res = Response::builder() +async fn not_found(_req: Request) -> Result> { + Ok(Response::builder() .status(StatusCode::NOT_FOUND) - .body(empty()) - .unwrap(); - responder.respond(res).await + .body(().into()) + .expect("builder succeeds")) } From ad349ca916b1a372fb9a7301e1ce2ca35e5209ec Mon Sep 17 00:00:00 2001 From: Yosh Date: Thu, 26 Mar 2026 15:08:12 +0100 Subject: [PATCH 75/75] fix lib type --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index d5a68f7..aa33dfd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,9 @@ version = "0.0.0" edition = "2021" publish = false +[lib] +crate-type = ["cdylib"] + [dependencies] http-body-util = "0.1.3" wstd = "0.6"