Skip to content

Commit

Permalink
Merge pull request datrs#15 from datrs/v10
Browse files Browse the repository at this point in the history
Support Hypercore LTS Version 10

This PR adds support for the current v10 version of hypercore's wire protocol.

With the v9 => v10 upgrade, the Javascript hypercore changed dramatically. This caused this PR to balloon quite massively, but alas, there was no other way to do the needed changes than with one big swoop.

In addition to v9 to v10 port, this PR adds:

* WASM support
* Support for both tokio and async-std as runtimes
* Interoperability tests between Node and Rust
  • Loading branch information
ttiurani committed Oct 12, 2023
2 parents fd288c1 + 221aee8 commit eb994ce
Show file tree
Hide file tree
Showing 58 changed files with 4,608 additions and 3,180 deletions.
75 changes: 75 additions & 0 deletions .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of
experience,
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

- The use of sexualized language or imagery and unwelcome sexual attention or
advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic
address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting


## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at yoshuawuyts@gmail.com, or through
IRC. All complaints will be reviewed and investigated and will result in a
response that is deemed necessary and appropriate to the circumstances. The
project team is obligated to maintain confidentiality with regard to the
reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the Contributor Covenant, version 1.4,
available at
https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
63 changes: 63 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# 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)
- [Developer Certificate of Origin](#developer-certificate-of-origin)

## 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.

## Developer Certificate of Origin
All contributors must read and agree to the [Developer Certificate of
Origin (DCO)](../CERTIFICATE).

The DCO allows us to accept contributions from people to the project, similarly
to how a license allows us to distribute our code.
9 changes: 9 additions & 0 deletions .github/ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## Summary
Explain what is going on.

## Your Environment
| Software | Version(s) |
| ------------------ | ---------- |
| hypercore-protocol |
| Rustc |
| Operating System |
23 changes: 23 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
name: Bug Report
about: Did something not work as expected?
---

# Bug Report
## Your Environment
| Software | Version(s) |
| ------------------ | ---------- |
| hypercore-protocol |
| Rustc |
| Operating System |

## Expected Behavior
Tell us what should have happened.

## Current Behavior
Tell us what happens instead of the expected behavior. If you are seeing an
error, please include the full error message and stack trace.

## Code Sample
Please provide a code repository, gist, code snippet or sample files to
reproduce the issue.
43 changes: 43 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
name: Feature Request
about: Want us to add something to hypercore-protocol?
---

# Feature Request
## Summary
One paragraph explanation of the feature.

## Motivation
Why are we doing this? What use cases does it support? What is the expected
outcome?

## Guide-level explanation
Explain the proposal as if it was already included in the project and you
were teaching it to another programmer. That generally means:

- Introducing new named concepts.
- Explaining the feature largely in terms of examples.
- If applicable, provide sample error messages, deprecation warnings, or
migration guidance.

## Reference-level explanation
This is the technical portion of the feature request. Explain the design in
sufficient detail that:

- Its interaction with other features is clear.
- It is reasonably clear how the feature would be implemented.
- Corner cases are dissected by example.

## Drawbacks
Why should we _not_ do this?

## Rationale and alternatives
- Why is this design the best in the space of possible designs?
- What other designs have been considered and what is the rationale for not
choosing them?
- What is the impact of not doing this?

## Unresolved Questions
What related issues do you consider out of scope for this feature that could be
addressed in the future independently of the solution that comes out of this
feature?
18 changes: 18 additions & 0 deletions .github/ISSUE_TEMPLATE/question.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
name: Question
about: Have any questions regarding how hypercore-protocol works?
---

# Question
## Your Environment
| Software | Version(s) |
| ------------------ | ---------- |
| hypercore-protocol |
| Rustc |
| Operating System |

## Question
Provide your question here.

## Context
How has this issue affected you? What are you trying to accomplish?
21 changes: 21 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!--
Thanks for creating a Pull Request 😄 ! Before you submit, please read the following:
- Read our CONTRIBUTING.md file before submitting a patch.
- By making a contribution, you agree to our Developer Certificate of Origin.
-->

**Choose one:** is this a 🐛 bug fix, a 🙋 feature, or a 🔦 documentation change?

<!-- Provide a general summary of the changes in the title above -->

## Checklist
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->
- [ ] tests pass
- [ ] tests and/or benchmarks are included
- [ ] documentation is changed or added

## Context
<!-- Is this related to any GitHub issue(s)? -->

## Semver Changes
<!-- Which semantic version change would you recommend? -->
17 changes: 17 additions & 0 deletions .github/stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Configuration for probot-stale - https://github.com/probot/stale

daysUntilStale: 90
daysUntilClose: 7
exemptLabels:
- pinned
- security
exemptProjects: false
exemptMilestones: false
staleLabel: wontfix
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
unmarkComment: false
closeComment: false
limitPerRun: 30
72 changes: 72 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: 'CI'
on:
pull_request:
push:
branches:
- master

env:
RUST_BACKTRACE: 1
CARGO_TERM_COLOR: always

jobs:
ci-pass:
name: CI is green
runs-on: ubuntu-latest
needs:
- test
- build-extra
- lint
steps:
- run: exit 0

test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Run tests
run: |
cargo check --no-default-features --features tokio
cargo check --no-default-features --features async-std
cargo test --no-default-features --features js_interop_tests,tokio
cargo test --no-default-features --features js_interop_tests,async-std
cargo test --benches
build-extra:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Build WASM
run: |
cargo build --target=wasm32-unknown-unknown --no-default-features --features wasm-bindgen,tokio
cargo build --target=wasm32-unknown-unknown --no-default-features --features wasm-bindgen,async-std
- name: Build release
run: |
cargo build --release --no-default-features --features tokio
cargo build --release --no-default-features --features async-std
- name: Build examples
run: |
cargo build --example replication
lint:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: actions-rs/clippy-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Format check
run: |
cargo fmt -- --check
24 changes: 0 additions & 24 deletions .github/workflows/rust.yml

This file was deleted.

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,6 @@
Cargo.lock
SANDBOX
flamegraph.svg
tests/js/work
package-lock.json
node_modules
Loading

0 comments on commit eb994ce

Please sign in to comment.