Skip to content

Commit

Permalink
Add friend UI different (#43)
Browse files Browse the repository at this point in the history
* πŸ”„ "add story to public id response
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@6dbadec

* Public identifier (#38)

* implement base58

* implement identifier

* πŸ”„ "implement identifier
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@15117f2

* πŸ”„ "Public identifier (#18)

* add identifier.proto

* implement base58

* implement identifier"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@f8a52a0

* Let the ID of the selectable list be a number or string

* start

* start

* πŸ”„ "Merge branch 'main' into friends
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@b4b457d

* Implement friend acking (#41)

* update message.proto with control message

* πŸ”„ "update message.proto with control message
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@e92e27b

* handle control message properly

* πŸ”„ "handle control message properly
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@420185b

* check for ack of control message

* πŸ”„ "check for ack of control message
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@fd692ae

* normal message shall not be control message

* make compile (almost)

* πŸ”„ " Implement friend acking (#21)

* update message.proto with control message

* handle control message properly

* check for ack of control message"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@5cdc265

* Async friending schema (#36)

* rename kx_key

* rewrite crypto in the new protocol

* πŸ”„ "rewrite crypto in the new protocol
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@49b488b

* DB change complete

* πŸ”„ "redesign daemon schema
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@96073e4

* πŸ”„ "fix typo
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@1b0185f

* πŸ”„ "add story to sync friend request
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@0485f68

* configure server for async requests

* πŸ”„ "configure server for async requests
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@a0458e2

* add public_id to database

* check point. Most of the code compiles

* checkpoint. All programs build

* checkpoint: rewriting test files

* πŸ”„ "checkpoint: rewriting test files
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@b60891f

* πŸ”„ "Merge remote-tracking branch 'origin/friends' into async_friending_schema
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@b56fda2

* checkpoint in merging friend

* weird bug. debugging

* mystery bug resolve. Do not call set_allocated()

* checkpoint: another bug

* update workspace

* add linkstatic

* finally builds correctly

* checkpoint: use standard logging

* add friend workinggit ca add

* πŸ”„ "add friend workinggit ca add
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@c64027e

* πŸ”„ "Merge remote-tracking branch 'origin/friends' into async_friending_schema
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@45a1a19

* add outgoing_friend_request

* remove comment from crypto'

* fix bug in crypto

* fix bug

* fix daemonrpc bug

* add identifier

* correct mistake in key exchange

Co-authored-by: Shengtong Zhang <[email protected]>

* πŸ”„ "Async friending schema (#22)

* configure server for async requests

* checkpoint: rewriting test files

* add friend workinggit ca add

Co-authored-by: Shengtong Zhang <[email protected]>"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@a0a42dc

* remove rust warning

* modal now supports large

* fix scrolling

* fix tests

* start exposing functions for add-friend:

* change api

* πŸ”„ "change api
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@7f257f9

* update protos

* updated protos

* add sync test

* πŸ”„ "add sync test
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@6f74e52

* πŸ”„ "push without compile
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@e0bbbc1

* update protos for addSyncFriend

* make compile

* some things only if registered

* update protos again

* use enums instead of integer constants

* πŸ”„ "use enums instead of integer constants
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@b54435f

* it builds!

* daemon.protoo changes

* πŸ”„ "daemon.protoo changes
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@785fc95

* update daemon-js protos

* fix preload

* daemon.proto has been fully sualeh-ified

* fix the proto disaster

* checkpoint: deprecate APIs

* async partitions and a basic test passes

* πŸ”„ "async partitions and a basic test passes
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@e32c1b6

* πŸ”„ "update proto. time for disaster to happen. Gooddddd luck
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@778e942

* update protos. We are good.

* πŸ”„ "update protos. We are good.
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@e0d9a9d

* πŸ”„ "update protos for Invitation Progres
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@32a45d0

* fix tests

* πŸ”„ "replace friend_request -> invitation on server
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@7cf56b7

* added test for people being in different blocks

* update protos for the ts

* all relevant APIs for contextBridge are implemented.

* Friends implementation (#42)

* merge friends

* πŸ”„ "change to system message
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@4415feb

* make transmitter use the new db types

* finish transmitter changes

* it builds

* πŸ”„ "it builds
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@209b037

* it builds!

* it builds!

* outgoing async and sync now done

* it builds!

* it builds!

* it builds!

* it builds!

* it builds!

* it builds!

* it builds!

* fix warnings

* add check_rep

* some changes with errors

* make build

* initial tests passing!!!

* πŸ”„ "initial tests passing!!!
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@cd37145

* πŸ”„ "Friends implementation (#23)

* change to system message

* it builds

* initial tests passing!!!"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@f5f22e7

* fix bug!

* add more check_rep consistency constraints

* more checkrep!

* revamp crypto

* πŸ”„ "revamp crypto
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@a156ca9

* add even more check_rep

* more checkrep!!! i love checkrep

* replace all remaining friend_request with invitation, and rewrite some logic in daemon

* typescript now has no type errors

* many more check rep

* add check_rep comment

* update comment

* even more checkreppp

* starting merge with friends

* update a TON of dependencies to latest commits.

* πŸ”„ "update a TON of dependencies to latest commits.
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@7fee8bf

* update daemon_pb.js

* πŸ”„ "update daemon_pb.js
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@0b02484

* πŸ”„ "rules_proto_grpc doesnt build off master??
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@e8a3578

* story Component

* story component update to use numberOfLines

* update readme

* add story command

* update with a real story

* different ui

* fix all old UI

* reformat

* each other

* add rng

* add eslint

* add eslint-react

* copy daemon

* copy schema

* πŸ”„ "Merge branch 'main' into add-friend-ui-different"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@7017ebe

* fix things

* πŸ”„ "fix things
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@6323fdd

* update daemon proto

* add framer motion

* add preliminary animation

* no blur

* big circles

* small css changes

* make eslint less annoying

* fix duration bugs

* fully implement addsyncfriend

* initial async page

* able to send to outgoing friend in the UI

* remove autofocus

* add add gui cmd

* fix db problems

* fix streaming problems and add a regression test

* fix type problems

* remove todo

* fix the UI

* run trunk fmt

* clean up preload

* fix the type of the daemon api in preload.ts

* use registerUser not register

* fix access key form box

* fix missing return type

* fix more eslint errors

* add update-rust-project script

* busy timeout!

* πŸ”„ "fix trunk fmt
"
Update anysphere/asphr commit SHA
πŸ”— anysphere/asphr@6ccc8a4

* getcolor string

* remove trunk linters

* explain animations

* add comment:

* add seed log

* sort the array

* fix spaces between sentences

* remove stupid at most 1 friend debugging thing

* refactor the story list component

* add unimplemented method

* remove legacy friend

Co-authored-by: Sualeh Asif <[email protected]>
Co-authored-by: Shengtong Zhang <[email protected]>
Co-authored-by: Sualeh Asif <[email protected]>
  • Loading branch information
4 people authored Jul 12, 2022
1 parent b014cf1 commit 83d0caa
Show file tree
Hide file tree
Showing 51 changed files with 6,082 additions and 1,424 deletions.
10 changes: 5 additions & 5 deletions .trunk/trunk.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ repo:
name: client
trunk_branch: origin/main
lint:
ignore:
- linters: [ALL]
paths:
- gui/src/daemon/schema/** # generated
enabled:
- [email protected]
- [email protected]
Expand All @@ -18,8 +22,4 @@ lint:
- [email protected]
- [email protected]
- [email protected]
ignore:
- linters: [ALL]
paths:
# proto files
- gui/src/daemon/schema/**
- [email protected]
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,9 @@ To connect to daemon 2, run:
```bash
./wrap2.sh ./bazel-bin/cli/asphr [command]
```

For the gui, run:

```bash
./wrap2.sh ./gui/start.sh
```
2 changes: 1 addition & 1 deletion WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(
name = "asphr",
commit = "27c4710f38add042030e01867c3e0a6f8a8199a3", # autoupdate anysphere/asphr
commit = "6ccc8a4cf8502de4a6d78beaf34f833d4bec598e", # autoupdate anysphere/asphr
init_submodules = True,
remote = "https://github.com/anysphere/asphr.git",
)
Expand Down
14 changes: 14 additions & 0 deletions cli/as_cli.cc
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,20 @@ int main(int argc, char** argv) {
cout << "Successfully changed latency to " << latency << " seconds!"
<< endl;

} else if (command == "story") {
grpc::ClientContext context;
asphrdaemon::GetMyPublicIDRequest request;
asphrdaemon::GetMyPublicIDResponse response;

grpc::Status status = stub->GetMyPublicID(&context, request, &response);

if (!status.ok()) {
cout << "failed to get my public ID: " << status.error_message() << endl;
return 0;
}

cout << "Story: " << response.story() << endl;

} else {
cout << "Unknown command: " << command << endl;
cout << help << endl;
Expand Down
4 changes: 3 additions & 1 deletion daemon/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
Set up VSCode rust-analyzer (very recommended!):

```
bazelisk run @rules_rust//tools/rust_analyzer:gen_rust_project
./update-rust-project.sh
```

Then restart the rust-analyzer server in VSCode with F1 and then searching for "Rust analyzer: restart server".

## Database changes

We want to create a migration!
Expand Down
89 changes: 46 additions & 43 deletions daemon/db/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -719,7 +719,13 @@ unsafe fn errmsg_to_string(errmsg: *const std::os::raw::c_char) -> String {
impl DB {
pub fn connect(&self) -> Result<SqliteConnection, DbError> {
match SqliteConnection::establish(&self.address) {
Ok(c) => Ok(c),
Ok(mut c) => {
use diesel::connection::SimpleConnection;
// we sleep for up to 1000 ms while the database is locked
// we also enforce foreign key constraints
c.batch_execute("PRAGMA foreign_keys = ON; PRAGMA busy_timeout = 1000;")?;
Ok(c)
},
Err(e) => return Err(DbError::Unknown(format!("failed to connect to database, {}", e,))),
}
}
Expand All @@ -733,7 +739,7 @@ impl DB {
// a complete check_rep that is called every single time is a HUGE bug-safety advantage.
use crate::schema::*;
// we unwrap everything here because we're in check_rep! so we want to fail fast.
conn
let res = conn
.transaction::<(), DbError, _>(|conn_b| {
// invitation_progress should correspond to the correct table existing
let friends = friend::table
Expand All @@ -745,25 +751,21 @@ impl DB {
friend::invitation_progress,
friend::deleted,
))
.load::<ffi::Friend>(conn_b)
.unwrap();
.load::<ffi::Friend>(conn_b)?;

for friend in friends {
let complete_count = complete_friend::table
.filter(complete_friend::friend_uid.eq(friend.uid))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
let sync_count = outgoing_sync_invitation::table
.filter(outgoing_sync_invitation::friend_uid.eq(friend.uid))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
let async_count = outgoing_async_invitation::table
.filter(outgoing_async_invitation::friend_uid.eq(friend.uid))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
match friend.invitation_progress {
ffi::InvitationProgress::Complete => {
assert!(
Expand Down Expand Up @@ -803,8 +805,7 @@ impl DB {
.filter(outgoing_chunk::message_uid.eq::<Option<i32>>(None))
.filter(outgoing_chunk::system.eq(false))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
assert!(
null_uid_and_not_system == 0,
"null_uid_and_not_system = {}",
Expand All @@ -817,8 +818,7 @@ impl DB {
.filter(outgoing_chunk::message_uid.is_not_null())
.filter(outgoing_chunk::system.eq(true))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
assert!(
non_null_uid_and_system == 0,
"non_null_uid_and_system = {}",
Expand All @@ -830,8 +830,7 @@ impl DB {
.filter(sent::delivered_at.is_not_null())
.filter(sent::delivered.eq(false))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
assert!(
delivered_at_not_null_and_delivered_false_count == 0,
"delivered_at_not_null_and_delivered_false_count = {}",
Expand All @@ -844,8 +843,7 @@ impl DB {
.filter(sent::delivered_at.is_null())
.filter(sent::delivered.eq(true))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
assert!(
delivered_at_null_and_delivered_true_count == 0,
"delivered_at_null_and_delivered_true_count = {}",
Expand All @@ -857,8 +855,7 @@ impl DB {
.filter(received::delivered_at.is_not_null())
.filter(received::delivered.eq(false))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
assert!(
delivered_at_not_null_and_delivered_false_count == 0,
"delivered_at_not_null_and_delivered_false_count = {}",
Expand All @@ -871,8 +868,7 @@ impl DB {
.filter(received::delivered_at.is_null())
.filter(received::delivered.eq(true))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
assert!(
delivered_at_null_and_delivered_true_count == 0,
"delivered_at_null_and_delivered_true_count = {}",
Expand All @@ -883,8 +879,7 @@ impl DB {
let draft_and_sent_count = draft::table
.inner_join(sent::table.on(draft::uid.eq(sent::uid)))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
assert!(
draft_and_sent_count == 0,
"draft_and_sent_count = {}",
Expand All @@ -894,8 +889,7 @@ impl DB {
let draft_and_received_count = draft::table
.inner_join(received::table.on(draft::uid.eq(received::uid)))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
assert!(
draft_and_received_count == 0,
"draft_and_received_count = {}",
Expand All @@ -905,31 +899,30 @@ impl DB {
let sent_and_received_count = sent::table
.inner_join(received::table.on(sent::uid.eq(received::uid)))
.count()
.get_result::<i64>(conn_b)
.unwrap();
.get_result::<i64>(conn_b)?;
assert!(
sent_and_received_count == 0,
"sent_and_received_count = {}",
sent_and_received_count
);

// exactly 1 config always
let config_count = config::table.count().get_result::<i64>(conn_b).unwrap();
let config_count = config::table.count().get_result::<i64>(conn_b)?;
assert!(config_count == 1, "config_count = {}", config_count);

// if has_registered is true, then should have exactly 1 registration
let has_registered = config::table.select(config::has_registered).first::<bool>(conn_b).unwrap();
let registration_count = registration::table.count().get_result::<i64>(conn_b).unwrap();
let has_registered = config::table.select(config::has_registered).first::<bool>(conn_b)?;
let registration_count = registration::table.count().get_result::<i64>(conn_b)?;
if has_registered {
assert!(registration_count == 1, "registration_count = {}, has_registered = {}", registration_count, has_registered);
} else {
assert!(registration_count == 0, "registration_count = {}, has_registered = {}", registration_count, has_registered);
}

// transmission table iff !deleted
let transmission_non_deleted_count = friend::table.filter(friend::deleted.eq(false)).inner_join(transmission::table).count().get_result::<i64>(conn_b).unwrap();
let non_deleted_count = friend::table.filter(friend::deleted.eq(false)).count().get_result::<i64>(conn_b).unwrap();
let transmission_count = transmission::table.count().get_result::<i64>(conn_b).unwrap();
let transmission_non_deleted_count = friend::table.filter(friend::deleted.eq(false)).inner_join(transmission::table).count().get_result::<i64>(conn_b)?;
let non_deleted_count = friend::table.filter(friend::deleted.eq(false)).count().get_result::<i64>(conn_b)?;
let transmission_count = transmission::table.count().get_result::<i64>(conn_b)?;
assert!(
transmission_non_deleted_count == non_deleted_count,
"transmission_non_deleted_count = {}, non_deleted_count = {}",
Expand All @@ -949,7 +942,7 @@ impl DB {
outgoing_chunk::to_friend,
outgoing_chunk::chunks_start_sequence_number,
outgoing_chunk::message_uid,
)).get_results::<ChunkInterestingNumbers>(conn_b).unwrap();
)).get_results::<ChunkInterestingNumbers>(conn_b)?;
let mut to_friend_seqnum_map_to_message_uid = HashMap::new();
for chunk in &chunks {
let to_friend = chunk.to_friend;
Expand All @@ -960,7 +953,7 @@ impl DB {
e.insert(message_uid);
} else {
assert!(
to_friend_seqnum_map_to_message_uid.get(&(to_friend, seqnum)).unwrap() == &message_uid,
to_friend_seqnum_map_to_message_uid.get(&(to_friend, seqnum)) == Some(&message_uid),
"chunk = {:?}",
chunk
);
Expand All @@ -981,7 +974,7 @@ impl DB {
e.insert(seqnum);
} else {
assert!(
to_friend_message_uid_map_to_seqnum.get(&(to_friend, message_uid)).unwrap() == &seqnum,
to_friend_message_uid_map_to_seqnum.get(&(to_friend, message_uid)) == Some(&seqnum),
"chunk = {:?}",
chunk
);
Expand All @@ -993,7 +986,7 @@ impl DB {
incoming_chunk::from_friend,
incoming_chunk::chunks_start_sequence_number,
incoming_chunk::message_uid,
)).get_results::<IncomingChunkInterestingNumbers>(conn_b).unwrap();
)).get_results::<IncomingChunkInterestingNumbers>(conn_b)?;
let mut from_friend_seqnum_map_to_message_uid = HashMap::new();
for chunk in &chunks {
let from_friend = chunk.from_friend;
Expand All @@ -1003,7 +996,7 @@ impl DB {
e.insert(message_uid);
} else {
assert!(
from_friend_seqnum_map_to_message_uid.get(&(from_friend, seqnum)).unwrap() == &message_uid,
from_friend_seqnum_map_to_message_uid.get(&(from_friend, seqnum)) == Some(&message_uid),
"chunk = {:?}",
chunk
);
Expand All @@ -1020,21 +1013,31 @@ impl DB {
e.insert(seqnum);
} else {
assert!(
from_friend_message_uid_map_to_seqnum.get(&(from_friend, message_uid)).unwrap() == &seqnum,
from_friend_message_uid_map_to_seqnum.get(&(from_friend, message_uid)) == Some(&seqnum),
"chunk = {:?}",
chunk
);
}
}

// ack_index must always be >= 0
let ack_index_count = transmission::table.filter(transmission::ack_index.lt(0)).count().get_result::<i64>(conn_b).unwrap();
let ack_index_count = transmission::table.filter(transmission::ack_index.lt(0)).count().get_result::<i64>(conn_b)?;
assert!(ack_index_count == 0, "ack_index_count = {}", ack_index_count);


Ok(())
})
.unwrap();
});

match res {
Ok(()) => (),
Err(e) => {
// if e contains "database is locked", then we just return ()
if e.to_string().contains("database is locked") {
return;
}
panic!("{}", e);
}
}
}

#[cfg(not(debug_assertions))]
Expand Down
26 changes: 24 additions & 2 deletions daemon/db/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@ use diesel::prelude::*;

use crate::db::*;
use rand::Rng;
use std::sync::Arc;

/**
* Test the database.
*
*
* Partition tested:
* - 2 friends
* - async addition of friends
*
*
* - test_recieive_msg(): basic functionality of the following APIs:
* - add_outgoing_async_invitation
* - add_incoming_async_invitation
Expand Down Expand Up @@ -79,6 +80,27 @@ fn test_connection() {
assert!(connection.is_ok());
}

#[test]
fn test_checkrep_in_parallel() {
let db_file = gen_temp_file();
println!("db_file: {}", db_file);
let db = init(db_file.as_str()).unwrap();
let db: Arc<DB> = Arc::new(*db);

// start 100 threads, each calling db.check_rep
let mut threads = vec![];
for _ in 0..100 {
let db2 = db.clone();
threads.push(std::thread::spawn(move || {
let mut conn = db2.connect().unwrap();
db2.check_rep(&mut conn);
}));
}
for t in threads {
t.join().unwrap();
}
}

#[test]
fn test_register() {
let config_data = get_registration_fragment();
Expand Down
4 changes: 3 additions & 1 deletion daemon/rpc/daemon_rpc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -642,7 +642,9 @@ Status DaemonRpc::GetMessagesStreamed(

// guarantee: the caller will get each message in the order of the
// delivered_at timestamp. each message will be delivered exactly once.
absl::Time last_delivered_at = absl::InfinitePast();
// we do 0 here because the db.get_most_recent_delivered_at returns 0 if no
// message found
absl::Time last_delivered_at = absl::FromUnixMicros(0);

try {
auto messages = G.db->get_received_messages(db::MessageQuery{
Expand Down
10 changes: 10 additions & 0 deletions daemon/update-rust-project.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/usr/bin/env bash

if [[ $(sd --version || true) != *"sd"* ]]; then
echo "Installing sd..."
cargo install sd
fi

sd rust_static_library rust_library "${ANYSPHEREROOT}"/client/daemon/BUILD
bazelisk run @rules_rust//tools/rust_analyzer:gen_rust_project
sd rust_library rust_static_library "${ANYSPHEREROOT}"/client/daemon/BUILD
2 changes: 2 additions & 0 deletions gui/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
release
Loading

0 comments on commit 83d0caa

Please sign in to comment.