Recover from EINVAL even if the error is untyped

Recover from EINVAL even if the error is untyped.
Swift version:
Apple Swift version 5.2.4 (swiftlang-1<IP_ADDRESS> clang-1<IP_ADDRESS>)
Target: x86_64-apple-darwin19.6.0

NIO version: 2.19.0
Motivation:
I'm facing an issue an EINVAL error is raised and the whole pipeline is shutdown silently. The EINVAL error is related to fnctl call as well.
The circumstances in which this appears are still unclear, and I'm not familiar enough with the codebase to make a call.
Modifications:
This just ignore EINVAL error code as an error.
Result:
This prevent the pipeline from shutting down silently under condition where it clearly has no reasons too.

Hmm, I'm reluctant to merge this without more information.
Per the manual pages from both macOS and Linux, EINVAL on accept implies one of the following conditions:

Socket cannot accept connections
addrlen is invalid
accept4 has been passed invalid flags.

None of these cases are recoverable: we'd expect to see them all continue to trigger. In those cases, this change would turn this into a 100% CPU spin loop, which is not good.
I think we need to know what's going on in your system to understand what the actual problem is.

@Lukasa Agreed.
But, so far haven't been able to point my finger on why EINVAL is returned or come up with a small scale reproduction case. Essentially, the same Encoder is either returning a response that triggers the error or not, which is very confusing.

On what platforms do you see the EINVAL return value?

@Lukasa macOS (latest stable release).

Do you see reproduction with any consistency?

@Lukasa I can reproduce easily, but I have been able to pinpoint what is triggering the behaviour.

Ok, do you want to add a breakpoint on read that will fire conditionally if errno is EINVAL? It'd be useful to see the state of the system when that fires.

Can do, will report later!

I've added a breakpoint shouldCloseOnReadError, here is the backtrace when encountering the error:
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
  * frame #0: 0x000000010018f0a9 agent`ServerSocketChannel.shouldCloseOnReadError(err=NIO.IOError @ 0x000060000260c1c8, self=0x0000000100d04400) at SocketChannel.swift:259:20
    frame #1: 0x0000000100041bcd agent`BaseSocketChannel.readable0(self=0x0000000100d04400) at BaseSocketChannel.swift:1092:21
    frame #2: 0x0000000100042c82 agent`BaseSocketChannel.readable(self=0x0000000100d04400) at BaseSocketChannel.swift:1044:14
    frame #3: 0x0000000100044109 agent`protocol witness for SelectableChannel.readable() in conformance BaseSocketChannel<A> at <compiler-generated>:0
    frame #4: 0x0000000100159e2a agent`SelectableEventLoop.handleEvent<C>(ev=(rawValue = 4), channel=0x0000000100d04400, self=0x0000600003b0c000) at SelectableEventLoop.swift:323:25
    frame #5: 0x000000010015b934 agent`closure #1 in closure #2 in SelectableEventLoop.run(ev=NIO.SelectorEvent<NIO.NIORegistration> @ 0x00007ffeefbfc9c8, self=0x0000600003b0c000) at SelectableEventLoop.swift:398:30
    frame #6: 0x000000010015bd39 agent`thunk for @callee_guaranteed (@guaranteed SelectorEvent<NIORegistration>) -> (@error @owned Error) at <compiler-generated>:0
    frame #7: 0x0000000100160374 agent`partial apply for thunk for @callee_guaranteed (@guaranteed SelectorEvent<NIORegistration>) -> (@error @owned Error) at <compiler-generated>:0
    frame #8: 0x0000000100170974 agent`Selector.whenReady(strategy=block, body=0x0000000100160360 agent`partial apply forwarder for reabstraction thunk helper from @callee_guaranteed (@guaranteed NIO.SelectorEvent<NIO.NIORegistration>) -> (@error @owned Swift.Error) to @escaping @callee_guaranteed (@in_guaranteed NIO.SelectorEvent<NIO.NIORegistration>) -> (@error @owned Swift.Error) at <compiler-generated>, self=0x0000600002108140) at Selector.swift:561:17
    frame #9: 0x000000010015b6c9 agent`closure #2 in SelectableEventLoop.run(self=0x0000600003b0c000, nextReadyTask=nil) at SelectableEventLoop.swift:395:36
    frame #10: 0x000000010015f2c4 agent`partial apply for closure #2 in SelectableEventLoop.run() at <compiler-generated>:0
    frame #11: 0x000000010003101f agent`thunk for @callee_guaranteed () -> (@error @owned Error) at <compiler-generated>:0
    frame #12: 0x000000010015f2e4 agent`thunk for @callee_guaranteed () -> (@error @owned Error)partial apply at <compiler-generated>:0
    frame #13: 0x00000001001560c2 agent`closure #1 in withAutoReleasePool<T>(execute=0x000000010015f2d0 agent`reabstraction thunk helper from @callee_guaranteed () -> (@error @owned Swift.Error) to @escaping @callee_guaranteed () -> (@out (), @error @owned Swift.Error)partial apply forwarder with unmangled suffix ".8" at <compiler-generated>) at SelectableEventLoop.swift:23:13
    frame #14: 0x000000010015611f agent`partial apply for closure #1 in withAutoReleasePool<A>(_:) at <compiler-generated>:0
    frame #15: 0x00007fff73219d8e libswiftObjectiveC.dylib`ObjectiveC.autoreleasepool<A>(invoking: () throws -> A) throws -> A + 46
    frame #16: 0x0000000100156069 agent`withAutoReleasePool<T>(execute=0x000000010015f2d0 agent`reabstraction thunk helper from @callee_guaranteed () -> (@error @owned Swift.Error) to @escaping @callee_guaranteed () -> (@out (), @error @owned Swift.Error)partial apply forwarder with unmangled suffix ".8" at <compiler-generated>) at SelectableEventLoop.swift:22:16
    frame #17: 0x000000010015a380 agent`SelectableEventLoop.run(self=0x0000600003b0c000) at SelectableEventLoop.swift:394:17
    frame #18: 0x00000001000d9d73 agent`static MultiThreadedEventLoopGroup.runTheLoop(thread=0x0000600000c080c0, canEventLoopBeShutdownIndividually=true, selectorFactory=0x00000001000e1670 agent`partial apply forwarder for NIO.Selector.__allocating_init() throws -> NIO.Selector<A> at <compiler-generated>, initializer=0x00000001000ddc50 agent`closure #1 (NIO.NIOThread) -> () in static NIO.MultiThreadedEventLoopGroup.withCurrentThreadAsEventLoop((NIO.EventLoop) -> ()) -> () at EventLoop.swift:1027, callback=0x00000001000df5d0 agent`partial apply forwarder for closure #2 (NIO.SelectableEventLoop) -> () in static NIO.MultiThreadedEventLoopGroup.withCurrentThreadAsEventLoop((NIO.EventLoop) -> ()) -> () at <compiler-generated>, self=NIO.MultiThreadedEventLoopGroup) at EventLoop.swift:824:22
    frame #19: 0x00000001000ddc20 agent`static MultiThreadedEventLoopGroup.withCurrentThreadAsEventLoop(callback=0x000000010001c1a0 agent`partial apply forwarder for closure #1 (NIO.EventLoop) -> () in static Agent.Daemon.start(address: Swift.String) throws -> () at <compiler-generated>, self=NIO.MultiThreadedEventLoopGroup) at EventLoop.swift:1024:37

And variables:
(NIO.IOError) err = {
  failureDescription = "fcntl(descriptor:command:value:)"
  error = errno (errno = 22)
}
(NIO.ServerSocketChannel) self = 0x0000000100d04400 {
  NIO.BaseSocketChannel = {
    parent = nil
    socket = 0x00006000002088c0 {
      NIO.BaseSocket = {
        descriptor = 4
      }
    }
    closePromise = {
      futureResult = 0x00006000021082d0 {
        _value = nil
        eventLoop = 0x0000600003b0c000 {
          _selector = 0x0000600002108140 {
            lifecycleState = open
            eventsCapacity = 64
            events = 0x0000000102810200
            registrations = 1 key/value pair {
              [0] = {
                key = 4
                value = serverSocketChannel {
                  serverSocketChannel = {
                    0 = 0x0000000100d04400 {...}
                    1 = (rawValue = 7)
                  }
                }
              }
            }
            deregistrationsHappened = false
            externalSelectorFDLock = 0x0000600000208280 (mutex = 0x0000000100d04080)
            selectorFD = 3
            myThread = 0x0000600000c08150 {
              desiredName = nil
              handle = 0x00000001008dbdc0
            }
          }
          thread = 0x0000600000c080c0 {
            desiredName = nil
            handle = 0x00000001008dbdc0
          }
          _scheduledTasks = {
            _heap = {
              type = minHeap
              storage = {
                _buffer = {
                  _storage = 0 values {}
                }
              }
              comparator = 0x000000010010b790 agent`partial apply forwarder for dispatch thunk of static Swift.Comparable.< infix(A, A) -> Swift.Bool at <compiler-generated>
            }
          }
          tasksCopy = {
            _buffer = {
              _storage = 0 values {}
            }
          }
          canBeShutdownIndividually = true
          _tasksLock = 0x00006000002082e0 (mutex = 0x0000000100d040c0)
          _externalStateLock = 0x0000600000208300 (mutex = 0x0000000100d04100)
          internalState = runningAndAcceptingNewRegistrations
          externalState = open
          _iovecs = 0x0000000102810a00
          _storageRefs = 0x0000000102814a00
          iovecs = (_position = 0x0000000102810a00, count = 1024)
          storageRefs = (_position = 0x0000000102814a00, count = 1024)
          _msgs = 0x0000000100aae000
          _addresses = 0x0000000100abd000
          msgs = (_position = 0x0000000100aae000, count = 1024)
          addresses = (_position = 0x0000000100abd000, count = 1024)
          promiseCreationStoreLock = 0x0000600000208320 (mutex = 0x0000000100d04140)
          _promiseCreationStore = 1 key/value pair {
            [0] = {
              key =<PHONE_NUMBER>06573
              value = (file = "~/Library/Developer/Xcode/DerivedData/agent-bzyktklnmtouupfkehbiuetsgxph/SourcePackages/checkouts/swift-nio/Sources/NIO/BaseSocketChannel.swift", line = 445)
            }
          }
        }
        _callbacks = {
          firstCallback = nil
          furtherCallbacks = nil
        }
      }
    }
    selectableEventLoop = 0x0000600003b0c000 {...}
    _offEventLoopLock = 0x0000600000208920 (mutex = 0x0000000100d04180)
    isActiveAtomic = 0x0000600000208980 {}
    socketDescription = "BaseSocket { fd=4 }"
    readPending = true
    pendingConnect = nil
    recvAllocator = {
      minIndex = 3
      maxIndex = 38
      minimum = 64
      maximum = 65536
      initial = 1024
      index = 32
      nextReceiveBufferSize = 1024
      decreaseNow = false
    }
    maxMessagesPerRead = 4
    inFlushNow = false
    autoRead = true
    _pipeline = 0x0000600002108320 {
      head = 0x0000600002608300 {
        next = 0x00006000026000c0 {
          next = 0x0000600002608360 {
            next = nil
            prev = 0x00006000026000c0 {...}
            pipeline = 0x0000600002108320 {...}
            name = "tail"
            inboundHandler = 0x000060000000c010
            outboundHandler = nil
            removeHandlerInvoked = false
            userTriggeredRemovalStarted = false
          }
          prev = 0x0000600002608300 {...}
          pipeline = 0x0000600002108320 {...}
          name = "AcceptHandler"
          inboundHandler = 0x0000600000c00390 {
            childChannelInit = 0x000000010001be30 agent`closure #1 (NIO.Channel) -> NIO.EventLoopFuture<()> in static Agent.Daemon.(daemonBootstrap in _5158C76E4BA214CC96ED6AC320AE28CC)(group: NIO.EventLoopGroup) -> NIO.ServerBootstrap at Server.swift:285
            childChannelOptions = {
              _storage = 0 values {}
            }
          }
          outboundHandler = nil
          removeHandlerInvoked = false
          userTriggeredRemovalStarted = false
        }
        prev = nil
        pipeline = 0x0000600002108320 {...}
        name = "head"
        inboundHandler = nil
        outboundHandler = 0x000060000000c000
        removeHandlerInvoked = false
        userTriggeredRemovalStarted = false
      }
      tail = 0x0000600002608360 {...}
      idx = 0
      destroyed = false
      eventLoop = 0x0000600003b0c000 {...}
      _channel = 0x0000000100d04400 {...}
    }
    _addressCache = {
      local = unixDomainSocket {
        unixDomainSocket = {
          _storage = 0x8000600002c00000 {
            value = {
              sun_len = 106
              sun_family = 1
              sun_path = {
                0 = 47
                1 = 118
                2 = 97
                3 = 114
                4 = 47
                5 = 102
                6 = 111
                7 = 108
                8 = 100
                9 = 101
                10 = 114
                11 = 115
                12 = 47
                13 = 104
                14 = 99
                15 = 47
                16 = 113
                17 = 54
                18 = 54
                19 = 118
                20 = 116
                21 = 95
                22 = 56
                23 = 53
                24 = 55
                25 = 95
                26 = 108
                27 = 50
                28 = 49
                29 = 113
                30 = 113
                31 = 107
                32 = 48
                33 = 108
                34 = 121
                35 = 49
                36 = 55
                37 = 120
                38 = 102
                39 = 56
                40 = 48
                41 = 48
                42 = 48
                43 = 48
                44 = 103
                45 = 110
                46 = 47
                47 = 84
                48 = 47
                49 = 97
                50 = 103
                51 = 101
                52 = 110
                53 = 116
                54 = 46
                55 = 49
                56 = 56
                57 = 50
                58 = 48
                59 = 51
                60 = 0
                61 = 0
                62 = 0
                63 = 0
                64 = 0
                65 = 0
                66 = 0
                67 = 0
                68 = 0
                69 = 0
                70 = 0
                71 = 0
                72 = 0
                73 = 0
                74 = 0
                75 = 0
                76 = 0
                77 = 0
                78 = 0
                79 = 0
                80 = 0
                81 = 0
                82 = 0
                83 = 0
                84 = 0
                85 = 0
                86 = 0
                87 = 0
                88 = 0
                89 = 0
                90 = 0
                91 = 0
                92 = 0
                93 = 0
                94 = 0
                95 = 0
                96 = 0
                97 = 0
                98 = 0
                99 = 0
                100 = 0
                101 = 0
                102 = 0
                103 = 0
              }
            }
          }
        }
      }
      remote = nil
    }
    _bufferAllocatorCache = (malloc = 0x0000000100067fc0 agent`@objc closure #1 (Swift.Int) -> Swift.Optional<Swift.UnsafeMutableRawPointer> in NIO.ByteBufferAllocator.init() -> NIO.ByteBufferAllocator at <compiler-generated>, realloc = 0x0000000100068010 agent`@objc closure #2 (Swift.Optional<Swift.UnsafeMutableRawPointer>, Swift.Int) -> Swift.Optional<Swift.UnsafeMutableRawPointer> in NIO.ByteBufferAllocator.init() -> NIO.ByteBufferAllocator at <compiler-generated>, free = 0x0000000100068050 agent`@objc closure #3 (Swift.Optional<Swift.UnsafeMutableRawPointer>) -> () in NIO.ByteBufferAllocator.init() -> NIO.ByteBufferAllocator at <compiler-generated>, memcpy = 0x00000001000680b0 agent`@objc closure #4 (Swift.UnsafeMutableRawPointer, Swift.UnsafeRawPointer, Swift.Int) -> () in NIO.ByteBufferAllocator.init() -> NIO.ByteBufferAllocator at <compiler-generated>)
    interestedEvent = (rawValue = 7)
    lifecycleManager = {
      eventLoop = 0x0000600003b0c000 {...}
      isActiveAtomic = 0x0000600000208980 {...}
      hasSeenEOFNotification = false
      currentState = activated
    }
    bufferAllocator = (malloc = 0x0000000100067fc0 agent`@objc closure #1 (Swift.Int) -> Swift.Optional<Swift.UnsafeMutableRawPointer> in NIO.ByteBufferAllocator.init() -> NIO.ByteBufferAllocator at <compiler-generated>, realloc = 0x0000000100068010 agent`@objc closure #2 (Swift.Optional<Swift.UnsafeMutableRawPointer>, Swift.Int) -> Swift.Optional<Swift.UnsafeMutableRawPointer> in NIO.ByteBufferAllocator.init() -> NIO.ByteBufferAllocator at <compiler-generated>, free = 0x0000000100068050 agent`@objc closure #3 (Swift.Optional<Swift.UnsafeMutableRawPointer>) -> () in NIO.ByteBufferAllocator.init() -> NIO.ByteBufferAllocator at <compiler-generated>, memcpy = 0x00000001000680b0 agent`@objc closure #4 (Swift.UnsafeMutableRawPointer, Swift.UnsafeRawPointer, Swift.Int) -> () in NIO.ByteBufferAllocator.init() -> NIO.ByteBufferAllocator at <compiler-generated>)
  }
  backlog = 128
  group = 0x0000600003b0c000 {...}
}
(NIO.IOError) err = {
  failureDescription = "fcntl(descriptor:command:value:)"
  error = errno (errno = 22)
}

Interesting. The error is an IOError from fcntl. We defend against this today when we set the socket non-blocking: https://github.com/apple/swift-nio/blob/08706eb13e063a82542fb047633140f99a2e7208/Sources/NIO/System.swift#L585-L597
However, there's another fcntl in the accept path, very low down the stack: https://github.com/apple/swift-nio/blob/08706eb13e063a82542fb047633140f99a2e7208/Sources/NIO/System.swift#L298-L323
I don't see any reason to think that this fcntl is any different than the other one: in principle we can hit EINVAL here just as much as we can when we try to set the socket non-blocking.
This call to fcntl should be redundant anyway: ServerSocket.accept will call Socket.init(socket:) which will call BaseSocket.init(socket:) which will call self.ignoreSIGPIPE. So we seem to be calling this fcntl twice per accepted socket. The output of dtruss agrees with this assessment:
accept(0x16, 0x0, 0x0)		 = 23 0
fcntl(0x17, 0x49, 0x1)		 = 0 0
fcntl(0x17, 0x49, 0x1)		 = 0 0
fcntl(0x17, 0x3, 0x0)		 = 6 0
fcntl(0x17, 0x4, 0x6)		 = 0 0

On FD 23 we are calling fcntl with 0x49 (F_SETNOSIGPIPE) twice in a row, both times setting to 1. The other two calls are associated with getting and then setting the flags for O_NONBLOCK (which ironically didn't need to be set in this case anyway).
So, if either of those calls to F_SETNOSIGPIPE throws they will throw an error that ends up terminating the channel.
I think the fix is in two parts:

Remove the call to F_SETNOSIGPIPE in Posix.accept. It's redundant with the Socket initializer anyway.
Update BaseSocketProtocol.ignoreSIGPIPE(descriptor:) to have similar logic to Posix.setNonBlocking: check the return code and throw a custom error that we can ignore in shouldCloseOnReadError.

@cyberdelia Do you feel equipped to try to fix this?

Note that we'll need a test. @weissi wrote one for the similar issue in bc81605.

@lukasa Seems doable 🤔

@Lukasa Gave it a shot, but looks like there is other behaviour expecting to receive an proper EINVAL: https://github.com/apple/swift-nio/blob/master/Tests/NIOTests/SocketChannelTest.swift#L596-L599

That test is overly specific, so we can change it. What matters is that we must detect that the client sent a RST packet and tell the user by closing the accepted channel.

Adapted the failing test, I'm not completely sold on the name NIOFailedToSetSocketCommand either.

@swift-nio-bot test this please

@swift-nio-bot test this please

@swift-nio-bot test this please


[8.x] support for closure count in Eloquent factory

I have the following scenario where I wish to seed (using factories) several posts each with a varying comment count (via a comment relationship).
Post::factory()->count(5)->has(Comment::factory()->count(3))->create();

The above would create 5 posts, each with 3 comments.
This pull requests means that for each of the 5 posts, a closure is used to determine the count for that particular iteration:
Post::factory()->count(5)->has(Comment::factory()->count(fn() => rand(1, 9)))->create();

This may be something for 9.x?
Thanks

Can you send this to 9.x branch?

@timrspratt Hey! Is there any reason why you didn't send these changes to 9.x? Maybe they would have been merged.

Hey, no reason other than being super busy and I think a test should accompany this


BibKnowledge: less disruptive LHS rule check for uniqueness

Originally on 2012-05-08
Currently when one wants to add a new mapping "foo->bar" in a knowledge base X, and that key "foo" already exists in another knowledge base Y, the user is presented a warning that the rule already exists, asking to confirm the insertion.
The warning is really disrupting the task of adding multiple entries to a KB. It is very likely that the LHS already exists in another KB, and very unlikely that the KBs are related in a way that the LHS should be unique. It is proposed that this behavior is flipped, so that the rule is added anyway (and user returns to the standard BibKnowledge form, ready to insert next mapping) , and that a panel is displayed in case the user would like to cancel the insertion (in a non-modal way). See attached mockup.
One could also want to flip between these two behaviours on a CFG_ variable basis, or as a per-user setting, or per knowledge base (new knowledge base attribute)
See also #652
(One could further streamline the task of inserting entries by sending asynchronous insertion requests in order to avoid full reload of the page, but that would be the aim of another ticket)

Invenio-Knowledge model for values requires unique keys per knowledge base.


Authenticate code does not work

Hi,
I had hassio-onedrive-backup installed and it created the 10 backups as set in the config. At some stage the creation of backups stopped and I got the message:

When following the instructions I got message:

I'm able to access my OneDrive manually and see the earlier created hassio backups. I have reinstalled hassio-onedrive-backup but the same issue is there still.
Any advise is welcome
Regards
Charles

I have the same issue, the code does not work.

I encountered the same, but the fix was easy: restart the add-on. That will generate a new code. I suppose that the code displayed has already expired by the time you see it.

Yes that is correct. If the code expired a restart will give you a new one.
I am curious to understand though what happened for @charlesvandortmond as the authentication should not "expire" at some point. Did you uninstall the addon at some stage here or restore from backup ?

@lavinir I have gone through the process again. This time I got all the correct screens from Microsoft, but in the end I was notified by Microsoft that the code had expired.... so I did the whole thing again, but now faster and then it worked....

Yes that is correct. If the code expired a restart will give you a new one.
I am curious to understand though what happened for @charlesvandortmond as the authentication should not "expire" at some point. Did you uninstall the addon at some stage here or restore from backup ?

For me it was after an OS update and reboot. I noticed after a few days that my dashboard metrics didn't show the state of the backups and space available on One Drive.
Going to the add-on, it showed the link and code, but Microsoft did not accept the code.
This is when I restarted the add-on, the newly generated code worked fine.
Perhaps you can add a refresh button next to the code, for cases like this.

Yes I will add it to the backlog


Fix remaining errors caught by staticcheck

I'll probably make staticcheck part of CI and/or hooks (although it might be too slow to be a hook).


Updated sqlalchemy-basic-sample.py to fix code smell and a few other syntax issues

updated _includes/v20.1/app/sqlalchemy-basic-sample.py and _includes/v20.2/app/sqlalchemy-basic-sample.py
updates include:

Include code smell fix that was fixed in Commit 17fc080
Added docstrings
updated variable names and other syntax as suggested by pylon

This change is

Online preview: http://cockroach-docs-review.s3-website-us-east-1.amazonaws.com/f85ada2f1ebb6f7e7827d3b34f7d0aa83d00c712/

@jseldess Mentioning you here because the contribution doc specified that all pull requests be assigned to you.

Thanks, @zuliatowoade. I've assigned @ericharmeling as the reviewer.

Propagated these changes to https://github.com/cockroachlabs/hello-world-python-sqlalchemy in https://github.com/cockroachlabs/hello-world-python-sqlalchemy/commit/d89b8dc7bf63ada29371c8707453f9c8c0208133.


Update ClientPlayNetworkHandlerMixin.java

puts you in a ghost world in the end if you try and leave

have you tried to exit the end yet?

I haven't, but that bypass it required for the LO server


Rewrite [codeclimate] coverage

Attacking this in two pieces for ease of review. The legacy implementation for coverage is still there, though I disabled it via the route. That whole file will be removed in the next PR.
Ref #2863

Messages

:book:
:sparkles: Thanks for your contribution to Shields, @paulmelnikow!

  Generated by :no_entry_sign: dangerJS against d2760045103759a4a691480fc2bf344a16b94425

Nice! Especially on pulling it out into parts like this. I was worried that all of the Codeclimate content would have to be refactored together, but this definitely makes it easier to review 👍

Thanks for reviewing!


dataexplorer: init at 3.6.2

Description of changes
New package. The DataExplorer gathers data from connected devices and displays this data for further analysis. It provides device plugins for communicating with various battery chargers, GPS trackers, variometers etc.
Things done

Built on platform(s)

[X] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[X] Tested basic functionality of all binary files (usually in ./result/bin/)
22.11 Release Notes (or backporting 22.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[X] Fits CONTRIBUTING.md.

Meanwhile there was a new patch release.

Moved dataexplorer from section "APPLICATIONS " to "SCIENCE / ELECTRONICS", to better match its file path in the repo.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/3032/1155


Request for feature

Hi
I would like to post a suggestion to implement a new feature in codeGpt
It will be great if you add the possibility to use local hosted model like Gpt4All instead of the openai chatGpt.
Thank you for your efforts.
Regards

Hi
This is already available by using the custom service option in the settings.

To run custom LLMs locally, use LocalAI.

Hi
Thanks for your reply
Yes i did try this but didn't work.
It seems that it continues to bind to openai chat
I will try again following your instructions.
Regards
Reda Medani
Le lun. 3 juil. 2023, 14:28, Carl-Robert @.***> a
écrit :

Hi
This is already available by using the custom service option in the
settings.
[image: Screen Shot 2023-07-03 at 14 26 35]
https://user-images.githubusercontent.com/15891408/250569717-948e40db-6d16-4cb5-9f96-a4fe6dea7778.png
To run custom LLMs locally, use LocalAI
https://github.com/go-skynet/LocalAI.
—
Reply to this email directly, view it on GitHub
https://github.com/carlrobertoh/CodeGPT/issues/153#issuecomment-1618262771,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AIXZLVQZYTJIYJVWRBAA5ITXOLCIPANCNFSM6AAAAAAZ3VGAXI
.
You are receiving this because you authored the thread.Message ID:
@.***>

Hi,
I wasn't able to reproduce the issue in the latest version. For me, it binds perfectly to the custom service.

Hi
This is already available by using the custom service option in the settings.
To run custom LLMs locally, use LocalAI.

Is this functionality still present in the plugin? I wish to use a local LLM.

Closing this issue: The plugin supports LLaMA C/C++ Port integration, allowing you to run models locally.


How would you sign out or revoke access?

I created a "Log out" link that links to a script that has the following code:
unset( $_SESSION[ 'token' ] );
unset( $_SESSION[ 'oauth2state' ] );

// Re-direct back to the home page
header( 'Location: /' );

But when I go to the home page, I'm still logged in.
What am I doing wrong?

Seems okay to me. Really not enough information to debug the problem.

I figured it out. I had forgotten to add this line:
session_start();

Thanks!

Happens to the best of us!


php: Removed opts checks in BaseStub when the elements aren't not used.

Re-organized the $opts checks in BaseStub constructor, to make channel re-use easier and cleaner.  Channel-specific tests aren't useful when the channel is provided via parameter.

Thank you for your pull request. Before we can look at your contribution, we need to ensure all contributors are covered by a Contributor License Agreement.
After the following items are addressed, please respond with a new comment here, and the automated system will re-verify.

User @Kunde21 isn't covered by a CLA. They will need to complete the form at https://identity.linuxfoundation.org/projects/cncf

Regards,
The Linux Foundation CLA GitHub bot

Looks good. $opt doesn't need to have 'credential' field now when assigning the channel to the stub.
Thanks!

Bump.  Is there anything else needed on this PR?


[PORT] vbump SQL Bindings for June Release (#19639)

PR in main: https://github.com/microsoft/azuredatastudio/pull/19639

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
1 unchanged line in 1 file lost coverage.
Overall coverage decreased (-0.001%) to 41.941%

Files with Coverage Reduction
New Missed Lines
%

src/sql/workbench/services/connection/browser/connectionDialogWidget.ts
1
71.43%

Totals

Change from base Build<PHONE_NUMBER>:
-0.001%

Covered Lines:
27921

Relevant Lines:
62108

💛  - Coveralls

Merging this as it's not at all risky and necessary for the release. @kenvanhyning FYI.


[BUG] Creating a Connect worker fails with java.lang.NoClassDefFoundError: org/apache/parquet/hadoop/metadata/CompressionCodecName error.

Describe the bug
Creating a Connect worker fails with java.lang.NoClassDefFoundError: org/apache/parquet/hadoop/metadata/CompressionCodecName error.
To Reproduce
Steps to reproduce the behavior:

Build the jar with mvn clean verify using Maven 3.9.0
Copy the target/kafka-connect-azure-blob-storage-1.0.1.jar file to my Connect's plugin path
Create a worker with the following config

{
	"connector.class": "io.coffeebeans.connect.azure.blob.sink.AzureBlobSinkConnector",
	"azblob.connection.string": "DefaultEndpointsProtocol=https;AccountName=redacted;AccountKey=redacted;EndpointSuffix=core.windows.net",
	"azblob.container.name": "redacted",
	"flush.size": "1",
	"topics": "customers",
	"name": "beans_az_test",
	"format": "AVRO"
}

I then see the following error in the  Connect logs
[2023-02-16 16:57:49,027] WARN unhandled due to prior sendError (org.eclipse.jetty.server.HttpChannelState)
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: org/apache/parquet/hadoop/metadata/CompressionCodecName

Expected behavior
To have the connector creation work.
Additional context
I don't work with Java often, so  it's possible that I'm misunderstanding something with the build process.

Was able to resolve this one by building with mvn clean install -Pstandalone


Installation fails on BSD

The installation fails on OpenBSD. Maybe there's an assumption that sed is GNU sed?
$ curl -L http://install.ohmyz.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   115  100   115    0     0    628      0 --:--:-- --:--:-- --:--:--   858
100  1906  100  1906    0     0   5015      0 --:--:-- --:--:-- --:--:-- 12878
Cloning Oh My Zsh...
Cloning into '/home/hugo/.oh-my-zsh'...
remote: Counting objects: 11280, done.
remote: Total 11280 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (11280/11280), 2.05 MiB | 950.00 KiB/s, done.
Resolving deltas: 100% (6173/6173), done.
Checking connectivity... done.
Looking for an existing zsh config...
Using the Oh My Zsh template file and adding it to ~/.zshrc
sed: unknown option -- i
usage: sed [-aEnru] command [file ...]
       sed [-aEnru] [-e command] [-f command_file] [file ...]

$ uname -a
OpenBSD elysion.barrera.io 5.6 GENERIC.MP#632 amd64
$ zsh  --version
zsh 5.0.5 (x86_64-unknown-openbsd5.6)

Not necessarily GNU sed; some BSD seds, including (at least recent) FreeBSD and Mac OS X. But yeah, -i is a nonstandard extension, and the installer is assuming it's supported. Should probably be removed for portability.

I've made a patch that removes the sed -i from the installer for portability. It's on my branch at https://github.com/apjanke/oh-my-zsh/tree/remove-sed-i.
It works for me on a fresh OpenBSD 5.6 installation. Do you want to test it out? To test it, remove your old oh-my-zsh installation (rm -rf ~/.oh-my-zsh) and do this.
curl https://raw.githubusercontent.com/apjanke/oh-my-zsh/remove-sed-i/tools/install.sh | sh

LGTM

Looks like there's already a pending PR #2589 that will take care of this.

LGTM.
The other choice was to require gsed to be installed, but this seems way cleaner and more easily portable.

FWIW I installed that on Project Trident and the original installation script still didn't work.

I've made a patch that removes the sed -i from the installer for portability. It's on my branch at https://github.com/apjanke/oh-my-zsh/tree/remove-sed-i.
It works for me on a fresh OpenBSD 5.6 installation. Do you want to test it out? To test it, remove your old oh-my-zsh installation (rm -rf ~/.oh-my-zsh) and do this.
curl https://raw.githubusercontent.com/apjanke/oh-my-zsh/remove-sed-i/tools/install.sh | sh

TrueOS/Project Trident still don't support -i, causing the original installation to fail. Could update your branch with the latest OMZsh code? That way I can install the latest version. Or does your branch point to OMZsh automatically for updates?

How are you running the install script? We changed it recently, and this issue is really old.

@mcornella Literally just running the scripts from the project front page.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
does nothing and
sh -c "$(wget -O- https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
gives authentication errors, even after wget has been installed.
The only thing that's worked for me has been @apjanke's script. Is there something I'm missing?

What's the output?

If none, run the script with sh -x install.sh.

Here's what I get when I do that:

+ set -e
+ ZSH=/usr/home/judah/.oh-my-zsh
+ REPO=robbyrussell/oh-my-zsh
+ REMOTE=https://github.com/robbyrussell/oh-my-zsh.git
+ BRANCH=master
+ CHSH=yes
+ RUNZSH=yes
+ main
+ [ ! -t 0 ]
+ [ 0 -gt 0 ]
+ setup_color
+ tput colors
+ ncolors=80
+ [ -t 1 ]
+ [ 80 -ge 8 ]
+ tput setaf 1
+ RED=$'\033[27m'

If you run sh, does tput setaf 1 || echo fail show any error? Also, what's the value of $TERM?

If you run sh, does tput setaf 1 || echo fail show any error?

Returns fail.

Also, what's the value of $TERM?

Returns zsh: command not found: xterm-256color.

Try downloading the script from https://raw.githubusercontent.com/mcornella/oh-my-zsh/installer-no-tput/tools/install.sh. Tell me if you can still see the coloring as well as if the installer continues without error.

Try downloading the script from https://raw.githubusercontent.com/mcornella/oh-my-zsh/installer-no-tput/tools/install.sh. Tell me if you can still see the coloring as well as if the installer continues without error.

Here's what I get from sudo sh install.sh:

Cloning Oh My Zsh...
Cloning into '/root/.oh-my-zsh'...
remote: Enumerating objects: 1042, done.
remote: Counting objects: 100% (1042/1042), done.
remote: Compressing objects: 100% (959/959), done.
remote: Total 1042 (delta 23), reused 853 (delta 20), pack-reused 0
Receiving objects: 100% (1042/1042), 692.27 KiB | 8.24 MiB/s, done.
Resolving deltas: 100% (23/23), done.

Looking for an existing zsh config...
Using the Oh My Zsh template file and adding it to ~/.zshrc.

Time to change your default shell to zsh:
Do you want to change your default shell to zsh? [Y/n] Y
Changing the shell...
chsh: user information updated
Shell successfully changed to '/usr/local/bin/zsh'.

         __                                     __
  ____  / /_     ____ ___  __  __   ____  _____/ /_
 / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \
/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / /
\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/
                        /____/                       ....is now installed!

Please look over the ~/.zshrc file to select plugins, themes, and options.

p.s. Follow us on https://twitter.com/ohmyzsh

p.p.s. Get stickers, shirts, and coffee mugs at https://shop.planetargon.com/collections/oh-my-zsh

I meant if the messages posted by the installer were colored, I presume yes.

Yes, they were.
On Sun, Jun 9, 2019, 06:05 Marc Cornellà<EMAIL_ADDRESS>wrote:

I meant if the messages posted by the installer were colored, I presume
yes.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/robbyrussell/oh-my-zsh/issues/3367?email_source=notifications&email_token=AAIB753YP76XZUOGQD65BSTPZTPWDA5CNFSM4AYMXXK2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODXIIACQ#issuecomment-500203530,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAIB7522ZR53Y2N6I434763PZTPWDANCNFSM4AYMXXKQ
.

Ok, it's been fixed in 702a594df3b49f40496e4840cae2d93c83d5bc4d. Thanks for the bug report!

Yw! Do I need to rerun the updated original script, or am I currently up to
par with it using the most recent one you linked me to?
On Sun, Jun 9, 2019, 09:35 Marc Cornellà<EMAIL_ADDRESS>wrote:

Ok, it's been fixed in 702a594
https://github.com/robbyrussell/oh-my-zsh/commit/702a594df3b49f40496e4840cae2d93c83d5bc4d.
Thanks for the bug report!
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/robbyrussell/oh-my-zsh/issues/3367?email_source=notifications&email_token=AAIB75ZR5SUOXROQOJNBF7DPZUILNA5CNFSM4AYMXXK2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODXILGEI#issuecomment-500216593,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAIB757FNP24ZION35TFFETPZUILNANCNFSM4AYMXXKQ
.

It is the same one so yeah, you're good.

Good to know. Thanks so much!
On Sun, Jun 9, 2019, 14:15 Marc Cornellà<EMAIL_ADDRESS>wrote:

It is the same one so yeah, you're good.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/robbyrussell/oh-my-zsh/issues/3367?email_source=notifications&email_token=AAIB754CMZB6BFCYU3TXRX3PZVJF5A5CNFSM4AYMXXK2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODXIQJ7I#issuecomment-500237565,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAIB7525YJ5NMCWCY7DVQB3PZVJF5ANCNFSM4AYMXXKQ
.


Feature Request: Mount Secrets as Volume

Is your feature request related to a problem? Please describe.
I would like to mount secrets in ACA as a file.  Essentially, I would like to enable this feature in K8S:
https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod
Describe the solution you'd like.
I'm not picky about the implementation, but an example solution would be:
properties:
    configuration:
        secrets:
        - name: myymountedsecret
          value: <BASE64 encoded value of file>
...
    template:
        containers:
        - name: foo
          volumeMounts:
          - volumeName: secrets
            secretRef: myymountedsecret
            mountPath: /mnt/secrets/

Describe alternatives you've considered.
Currently, to mount a secret, I can either:

Bake the secret into the image.  BAD!
Use an SMB Storage Mount.  Works, but not as secure.

Additional context.
Given this is working functionality in K8S, it would be nice to be able to use it here too.

Thanks @lastcoolnameleft . We are looking into it.

I would benefit from this as well. My use-case is to be provide React and Angular clients with configuration from file, based on secrets rather than creating the file at build time. This enables

Single build for all environments
Configuration changes without rebuild

Basically, the same flexibility that we get from having configurable environment variables for the backend.


Since using prisma in my Nest.js application, ctrl+c does not stop the process anymore

Bug description
Since using prisma in my Nest.js application, ctrl+c does not stop the process anymore.
How to reproduce
Having a nest.js application and using prisma as ORM. When I execute a controller endpoint that uses prismaservice, and it performs a long computation (e.g. a long loop), and I want to cancel it ctrl+c does not stop the execution.
Expected behavior
No response
Prisma information
NA
Environment & setup
NA
Prisma Version
4.10.1

Can you provide us with a minimal Nest.js app as reproduction of the problem you describe please? Thanks.

@leonvisscher did you solve this? I'm currently running into the same problem (but with NextJS) while trying to switch off using engineType = binary in my Prisma schema.


Relax overly restrictive observation scitype for finite multiclass measures

These measures are incorrectly tagged as Multiclass measures instead of Finite measures:
MulticlassFScore
MulticlassFalseDiscoveryRate
MulticlassFalseNegative
MulticlassFalseNegativeRate
MulticlassFalsePositive
MulticlassFalsePositiveRate
MulticlassNegativePredictiveValue
MulticlassPositivePredictiveValue
MulticlassTrueNegative
MulticlassTrueNegativeRate
MulticlassTruePositive
MulticlassTruePositiveRate

This PR fixes this.

Codecov Report

Merging #7 (1767dc0) into dev (1e1a371) will decrease coverage by 14.89%.
The diff coverage is n/a.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@             Coverage Diff             @@
##              dev       #7       +/-   ##
===========================================
- Coverage   91.94%   77.05%   -14.89%
===========================================
  Files          14       12        -2
  Lines         695      645       -50
===========================================
- Hits          639      497      -142
- Misses         56      148       +92

Files Changed
Coverage Δ

src/finite.jl
75.00% <ø> (-4.69%)
:arrow_down:

... and 9 files with indirect coverage changes


Adds docker python module as requirement

Adds the docker python module as requirement for molecule.
Can't find the issue or PR at the moment but if I remember correctly @ssbarnea mentioned that the user experience was somewhat lacking since out of the box Molecule doesn't work.
Since Docker is the default driver I don't see a problem with installing it as a dependency for Molecule.
The docker_container module requires >1.7.0 but the docker module only goes back to 2.0.0 on PyPi (then the renaming happened from docker-py > docker). So everything above 2.0.0 should be alright.
The only point for discussion is Python 2.6 which requires the older docker-py module.
But since Ansible dropped some of the 2.6 support in v2.7 I do not see an issue in this.
Should I add the requirement for Python 2.7 somewhere in the docs?
PR Type

Feature Pull Request

If there are any concerns regarding not wanting to add uneccesary optional requirementes to molecule, we should at least have an extras options for docker which with do the trick and to mention it on default install documentatiom, like pip install molecule[docker].
My personal preference is to have docker as default, but extras would also be considered acceptable.
I already seen azure driver listed as extras so you already know how how extras do work.

@webknjaz ^^ this should be easy to review :D

like pip install molecule[docker]

There has been a discussion about this before it moved to Ansible #1479
I think it is sensible to have a working default with Docker and have a choice like molecule[lxd],  molecule[vagrant] and molecule[azure] which omits this Docker driver and installs the required modules. This also omits the azure driver from the default install.

I'd like to have it as extra. Having it required by default might cause side-effects (like deps collision): imagine user wants to avoid having docker-py in their virtualenv, but wants to have something conflicting. by requiring this dist by default you'll break such workflow.
I'm trying to bring extras within my current PRs as well:

https://github.com/ansible/molecule/pull/1540/files#diff-380c6a8ebbbce17d55d50ef17d3cf906R28
https://github.com/ansible/molecule/pull/1541/files#diff-380c6a8ebbbce17d55d50ef17d3cf906R35

I will not approve this until #1541 is merged (coming soon!) for stability reasons. I've spent way too much time making tests green.
Thanks for understanding :)

@wilmardo

[...] and have a choice like molecule[lxd],  molecule[vagrant] and molecule[azure] which omits this Docker [...]

Extras don't work like this. There's no way to set up metadata extra disabling other deps :)
That's Python packaging issue, we cannot work around it, sorry.

Extras don't work like this. There's no way to set up metadata extra disabling other deps :)

Oh sad I had no idea :neckbeard:
Then it might be a good idea to close this and let pip install molecule be a base without a driver (so only delegated is possible). Then document clearly that a user needs to choose for a driver with pip install [<drivername>] which installs some extra dependencies for it to work.
Would something like that work?

I think so. This will need additional approvals, not just mine, though.

Can we merge it in current form?

@ssbarnea definitely not. It must go to extras.

Ref #1561

@wilmardo hey I've absorbed your commits into #1561.

Closed by #1561


Include Linux in Travis CI build matrix and test swift build via swiftenv

https://github.com/travis-ci/travis-ci/issues/4053#issuecomment-165096516

Done in #44 and #50.


removed notebook

Summary by CodeRabbit

New Features

Introduced a new API for invoking machine learning models for Amazon product reviews and recommendations.
Added functionality for training and deploying a logistic regression model for categorizing reviews.
Implemented a recommender system for suggesting products based on user preferences.

Bug Fixes

Consolidated prediction functionality directly into the recommender class for improved performance.

Documentation

Added new scripts for model training and deployment, enhancing the overall documentation of the machine learning workflow.

can you review the whole code? we want to enhance best software engineering practices, migrate from setup.oy to pyproject.toml, add precommit hooks

@coderabbitai full review

@coderabbitai full review


Combine the mppt charger and smart shunt project?

It is possible to combine both projects? Could you point out the differences of the protocols?

Check email

Using the same UART is no option. But it's possible to configure multiple UARTs. So we can load the victron component multiple times (one per UART). And we should inform the users to add a level shifter (if required).

so yes then that's a possibility


The compiled version in Releases is CAC ONLY and many vanilla players are lost

That dependency needs to be removed as it is stumbling players that do not know how to compile their own versions. The NO_CAC version of PanicSystem does not exist pre-compiled, or I can't find it if it does.

All the releases i've made on the Rt discord have the NO_CAC version as well. Let me know where you'd like the release.

Added the NO_CAC build here. Please report any problems with it.
https://github.com/BattletechModders/PanicSystem/releases/tag/REL_4.2.0


Docs: Specify the jump order for InsertNodes

The doc was a bit misleading as it suggested that the jump nodes
are in decreasing order from n to 0 with 0 being the exit node.
This change explicitly specifies that the order is in fact increasing
from 1 to n with 0 being the exit node.
Also, add missing documentation that it is not possible to define
placeholder text for the 0-th InsertNode.

Nice, thank you!


[stitched uploads] Support stitch API in frontend

Add support to PostBlobHandler to support "POST /stitch" requests. This
API takes a JSON body containing a list of signed IDs that represent
data chunks, parses this list, and calls the Router.stitchBlob method to
generate a new composite blob.
The first commit provides a subset of the router changes in #1081 to make this PR easier to review before that one is merged.

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@bb942b9). Click here to learn what that means.
The diff coverage is 88.52%.

@@            Coverage Diff            @@
##             master    #1087   +/-   ##
=========================================
  Coverage          ?   68.63%
  Complexity        ?     4846
=========================================
  Files             ?      384
  Lines             ?    30626
  Branches          ?     3905
=========================================
  Hits              ?    21021
  Misses            ?     8544
  Partials          ?     1061

Impacted Files
Coverage Δ
Complexity Δ

...ain/java/com.github.ambry.frontend/Operations.java
0% <ø> (ø)
0 <0> (?)

...ambry.frontend/AmbryBlobStorageServiceFactory.java
92.3% <ø> (ø)
2 <0> (?)

.../src/main/java/com.github.ambry/router/Router.java
80% <0%> (ø)
4 <0> (?)

...a/com.github.ambry/tools/perf/rest/PerfRouter.java
0% <0%> (ø)
0 <0> (?)

...src/main/java/com.github.ambry/rest/RestUtils.java
93.64% <100%> (ø)
74 <1> (?)

...n/java/com.github.ambry/router/PutBlobOptions.java
64.7% <100%> (ø)
8 <1> (?)

...ava/com.github.ambry.frontend/FrontendMetrics.java
100% <100%> (ø)
1 <0> (?)

...m.github.ambry.frontend/AmbryIdSigningService.java
100% <100%> (ø)
7 <2> (?)

...github.ambry.frontend/AmbryBlobStorageService.java
94.48% <100%> (ø)
46 <0> (?)

...c/main/java/com.github.ambry/router/ChunkInfo.java
52.94% <52.94%> (ø)
5 <5> (?)

... and 3 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update bb942b9...a55fb10. Read the comment docs.


[WIP] Use PageFind for search page

This (draft) PR adapts https://github.com/kubernetes/website/pull/44530 so that we use it for the existing search function.

Relevant to issue https://github.com/kubernetes/website/issues/44475

/remove-lifecycle stale
This is still a relevant exploration.

Anything you want to collaborate on here @nate-double-u ? I can make some time to run through my thinking.

I would very much appreciate that @sftim, thanks!
I'll switch over to Kubernetes slack to set something up.

/close
No longer needed


Argus Sirenada Support

This commit adds required backend changes and a client for
submitting sirenada results. It also adds a (very) basic
test run card for viewing the results.
Task: scylladb/qa-tasks#826

Checks broken due to changing dependencies for the package, will disable those checks in this commit too.


Change combiner defaults, add configuration parameters

This PR introduces some additional parameters to the Combiner config (that were previously hard-coded in fedavg.py). Contains some minor UI styling changes. Resolves JIRA issues FEDN-9, FEDN-13.

Will change this a bit per our recent discussions.


If statement with syntax error

Hi i just realized in the SerializeParameterCollection method in if statement we have the following code:
if (parameter.Value != null && parameter.Value.GetType() == typeof(Entity))
When i assume you want to have:
if (parameter.Value != null && parameter.Value.GetType() == typeof(Entity))

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: a9cbad10-c0fc-74c8-8a13-77ff875c5c00
Version Independent ID: 8052da68-c49a-910e-1b38-c8f084f6a581
Content: Sample: One-way listener (Developer Guide for Dynamics 365 Customer Engagement)
Content Source: ce/developer/sample-one-way-listener.md
Service: crm-online
GitHub Login: @JimDaly
Microsoft Alias: jdaly

Thanks for reporting this. Found 85 other effected files with the same problem.

Thanks Jim!


Built in URL Shortener

As each message has a character limit, it would be nice to have real time url shortening with a custom domain. In theory, as I am typing a url, Apostello would be able to parse said url and replace the text with a shortened URL. Twilio does have some kind of url shortening service, but having it built in on the front end to see how it affects the cost of the message would be very handy.

As I see it, there are two ways to do this:

Use something like goo.gl to do the shortening
Do the shortening in apostello

Using an external service
Pros:

Fairly easy, just have to hook up api
???

Cons:

Will leak urls to a third party
May require an api key
???

Doing in apostello
Pros:

Does not leak urls
Should be easy to implement with an existing django app

Cons:

Requires apostello to be behind a reasonably short url or the generated "short url" won't save many characters.

@AustinBratcher - which did you have in mind?

Closing this through lack of interest.
Please feel free to bring it up again.


Saving state of some permission

This is probably not a lib issue, but the one of not understanding one and I'm sure some other devs have the same question.
I ask for permission with PermissionListener and override those three methods. What happens in permission denied is up to me. But when I (for example, want to fetch location of the user) and he/she didn't gave the app permission to access FINE_LOCATION, it's up to me to save that permission denied somewhere (SharedPreferences?) and then in that code for fetching, I have to check everytime the state of that permission that I previously saved in (SharedPreferences?)?
My question is then, has the library some in-built mechanism to save if the permission is denied and then with that I can check that some code shouldn't be executed? For the case when permission is given to the app, everything is working fine out of the box.
btw. great lib, helps a lot :) :+1:

Hi @TOMKHAN, thanks for your quiestion :) We are not saving the state of every permission in the app because the user can change the value of any permission even if the application is not running. You should always ask for the permission and use the listener mechanism to decide what to do depending on the permissions state.
If the user has denied the permission forever you'll always get a denied permission until the application be reinstalled or the permission be modified from the application settings.
Is this the answer to your question?

Hi @pedrovgs :)
Then with what method call can I check if the permission is already given? Because, if I understand correctly, onPermissionGranted() is called on user accepting the permission.
This bugs me because I have one static method getLocation() that is called 30+ times throughout the project from all types of views (Fragments/Activities) and that method is returning a GPS object, but the app will stop if I block the UI thread with the dialog showing the permission. So I was hoping for some method inside Dexter to return the state of that permission so I can just return null instead of GPS object and then warn the user that he/she hasn't accepted the permission or something like that.

onPerissionGranted() is invoked on user accepting the permission or if the user has already accepted the permission.
If the user has already accepted your permission the dialog wont be shown. A similar approach is used with the deny permission execution branch. This is how the new Android Permissions System has been designed. You'll have to move your gps usage to the listener configured to use Dexter or the Androd Permissions system, because until that listener is not invoked you don't know if the user has or not the permission.

It's not written in the docs, so it confused me. Thanks @pedrovgs, you've helped me enough :)
And once more, good job on the lib :+1:

We didn't add this documentation to the README.md because the library usage is similar to the official Android Permission System. But I guess this can be confusing. Thanks for your question and for your time!


Package.activateResources is deprecated.

The context menu CSON format has changed. Please see
https://atom.io/docs/api/latest/ContextMenuManager
Atom version 1.0

:wave: Same deal - this one was patched in #111 and released in 1.2.9, it looks like. :smile:


Use public URL path with cast and Sonos media_players instead of the media content id

System Health details
`## System Information

version
core-2024.7.1

installation_type
Home Assistant Core

dev
false

hassio
false

docker
false

user
homeassistant

virtualenv
true

python_version
3.12.2

os_name
Linux

os_version
6.1.0-10-amd64

arch
x86_64

timezone
Europe/Oslo

config_dir
/home/homeassistant/.homeassistant

Home Assistant Community Store

GitHub API
ok

GitHub Content
ok

GitHub Web
ok

GitHub API Calls Remaining
5000

Installed Version
1.34.0

Stage
running

Available Repositories
1476

Downloaded Repositories
76

HACS Data
ok

Home Assistant Cloud

logged_in
true

subscription_expiration
11. februar 2025 kl. 01:00

relayer_connected
true

relayer_region
eu-central-1

remote_enabled
true

remote_connected
true

alexa_enabled
false

google_enabled
true

remote_server
eu-central-1-8.ui.nabu.casa

certificate_status
ready

instance_id
07060d1f46034d3891b0a3025373b0fc

can_reach_cert_server
ok

can_reach_cloud_auth
ok

can_reach_cloud
ok

Dashboards

dashboards
17

resources
38

views
56

mode
storage

Recorder

oldest_recorder_run
7. mai 2024 kl. 16:52

current_recorder_run
8. juli 2024 kl. 09:19

estimated_db_size
17735.95 MiB

database_engine
mysql

database_version
10.11.6

Spotify

api_endpoint_reachable
ok

`
Checklist

[X] I have enabled debug logging for my installation.
[X] I have filled out the issue template to the best of my ability.
[X] This issue only contains 1 issue (if you have multiple issues, open one issue for each issue).
[X] This issue is not a duplicate issue of currently previous issues..

Describe the issue
ERROR (Thread-11) [homeassistant.components.cast.media_player] Failed to cast media http://10.0.0.XXX:8123/**media/media/**sounds/temp/chime_tts/7ougo45g.mp3?authSig=SIG_REMOVED from internal_url (http://10.0.0.XXX:8123). Please make sure the URL is: Reachable from the cast device and either a publicly resolvable hostname or an IP address
Seems like it's adding media to the adress twice, even the config path is pointing to the correct path.
Reproduction steps
service: chime_tts.say data:   chime_path: ba_dum_tss   message: testing   cache: false   announce: true target:   entity_id: media_player.googlehome6815
Configuration:
`Chime TTS Configuration
Configure the chime_tts.say and chime_tts.say_url services and add custom chime mp3 paths:
Service call timeout (in seconds)
60
Default TTS platform
openai_tts
Default offset value (in milliseconds) between chimes & TTS audio
450
Fade transition (in milliseconds) when fading currently playing audio for announce and fade_audio
500
Folder path for custom chime audio files
Media folder
media
Folder path for downloaded chime audio files
media/sounds/temp/chime_tts/chimes/
Folder path for temporary TTS audio mp3 files
media/sounds/temp/chime_tts/
Folder path for Chime TTS mp3s generated by chime_tts.say_url
www/chime_tts/
`
Debug logs
2024-07-08T09:46:10.893903+02:00 odin hass[3286511]: 2024-07-08 09:46:10.878 DEBUG (MainThread) [custom_components.chime_tts] ----- Chime TTS Say Called. Version v1.1.3 -----
2024-07-08T09:46:10.894116+02:00 odin hass[3286511]: 2024-07-08 09:46:10.878 DEBUG (MainThread) [custom_components.chime_tts.queue_manager] Adding service call to queue
2024-07-08T09:46:10.894396+02:00 odin hass[3286511]: 2024-07-08 09:46:10.879 DEBUG (MainThread) [custom_components.chime_tts] ----- Chime TTS Say Called. Version v1.1.3 -----
2024-07-08T09:46:10.894628+02:00 odin hass[3286511]: 2024-07-08 09:46:10.881 INFO (MainThread) [custom_components.chime_tts.helpers.media_player] Turning on "media_player.googlehome6815"...
2024-07-08T09:46:10.894840+02:00 odin hass[3286511]: 2024-07-08 09:46:10.882 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ----- General Parameters -----
2024-07-08T09:46:10.895082+02:00 odin hass[3286511]: 2024-07-08 09:46:10.883 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * entity_ids = ['media_player.googlehome6815']
2024-07-08T09:46:10.895277+02:00 odin hass[3286511]: 2024-07-08 09:46:10.884 INFO (SyncWorker_58) [pychromecast] Starting app CC1AD845
2024-07-08T09:46:10.895639+02:00 odin hass[3286511]: 2024-07-08 09:46:10.885 INFO (SyncWorker_58) [pychromecast.controllers] Receiver:Launching app CC1AD845
2024-07-08T09:46:10.895970+02:00 odin hass[3286511]: 2024-07-08 09:46:10.883 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * chime_path = ba_dum_tss
2024-07-08T09:46:10.896220+02:00 odin hass[3286511]: 2024-07-08 09:46:10.885 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * cache = False
2024-07-08T09:46:10.896486+02:00 odin hass[3286511]: 2024-07-08 09:46:10.886 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * offset = 450.0
2024-07-08T09:46:10.896731+02:00 odin hass[3286511]: 2024-07-08 09:46:10.886 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * final_delay = 0.0
2024-07-08T09:46:10.896929+02:00 odin hass[3286511]: 2024-07-08 09:46:10.886 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * message = testing
2024-07-08T09:46:10.897209+02:00 odin hass[3286511]: 2024-07-08 09:46:10.886 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * tts_speed = 100.0
2024-07-08T09:46:10.897690+02:00 odin hass[3286511]: 2024-07-08 09:46:10.886 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * tts_pitch = 0
2024-07-08T09:46:10.897978+02:00 odin hass[3286511]: 2024-07-08 09:46:10.887 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * announce = True
2024-07-08T09:46:10.898250+02:00 odin hass[3286511]: 2024-07-08 09:46:10.887 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * fade_audio = False
2024-07-08T09:46:10.898891+02:00 odin hass[3286511]: 2024-07-08 09:46:10.887 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * volume_level = -1
2024-07-08T09:46:10.899222+02:00 odin hass[3286511]: 2024-07-08 09:46:10.887 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * join_players = False
2024-07-08T09:46:10.899546+02:00 odin hass[3286511]: 2024-07-08 09:46:10.887 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * unjoin_players = False
2024-07-08T09:46:10.899787+02:00 odin hass[3286511]: 2024-07-08 09:46:10.887 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * media_players_array:
2024-07-08T09:46:10.900029+02:00 odin hass[3286511]: 2024-07-08 09:46:10.888 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]    - 0: entity_id: media_player.googlehome6815
2024-07-08T09:46:10.900268+02:00 odin hass[3286511]: 2024-07-08 09:46:10.888 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      platform: cast
2024-07-08T09:46:10.900507+02:00 odin hass[3286511]: 2024-07-08 09:46:10.888 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      initial volume: -1.0
2024-07-08T09:46:10.900820+02:00 odin hass[3286511]: 2024-07-08 09:46:10.888 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      target volume: -1.0
2024-07-08T09:46:10.901059+02:00 odin hass[3286511]: 2024-07-08 09:46:10.888 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      now playing: False
2024-07-08T09:46:10.901303+02:00 odin hass[3286511]: 2024-07-08 09:46:10.889 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      join supported: False
2024-07-08T09:46:10.901519+02:00 odin hass[3286511]: 2024-07-08 09:46:10.889 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      announce supported: False
2024-07-08T09:46:10.901746+02:00 odin hass[3286511]: 2024-07-08 09:46:10.889 DEBUG (MainThread) [custom_components.chime_tts.helpers.filesystem] Local path to chime: /home/homeassistant/.homeassistant/custom_components/chime_tts/mp3s/ba_dum_tss.mp3
2024-07-08T09:46:10.901913+02:00 odin hass[3286511]: 2024-07-08 09:46:10.889 DEBUG (MainThread) [custom_components.chime_tts]  - Retrieving audio from path: "/home/homeassistant/.homeassistant/custom_components/chime_tts/mp3s/ba_dum_tss.mp3"...
2024-07-08T09:46:11.350235+02:00 odin hass[3286511]: 2024-07-08 09:46:11.344 DEBUG (MainThread) [custom_components.chime_tts]    ...audio retrieved. Duration: 2.403s
2024-07-08T09:46:11.357721+02:00 odin hass[3286511]: 2024-07-08 09:46:11.355 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  - Using default TTS platform: 'openai_tts'
2024-07-08T09:46:11.357931+02:00 odin hass[3286511]: 2024-07-08 09:46:11.355 DEBUG (MainThread) [custom_components.chime_tts]  - Generating new TTS audio with parameters:
2024-07-08T09:46:11.358008+02:00 odin hass[3286511]: 2024-07-08 09:46:11.356 DEBUG (MainThread) [custom_components.chime_tts]     * tts_platform = 'openai_tts'
2024-07-08T09:46:11.358231+02:00 odin hass[3286511]: 2024-07-08 09:46:11.356 DEBUG (MainThread) [custom_components.chime_tts]     * message = 'testing'
2024-07-08T09:46:11.358479+02:00 odin hass[3286511]: 2024-07-08 09:46:11.356 DEBUG (MainThread) [custom_components.chime_tts]     * cache = False
2024-07-08T09:46:11.358556+02:00 odin hass[3286511]: 2024-07-08 09:46:11.356 DEBUG (MainThread) [custom_components.chime_tts]     * language = None
2024-07-08T09:46:11.358629+02:00 odin hass[3286511]: 2024-07-08 09:46:11.356 DEBUG (MainThread) [custom_components.chime_tts]     * options = {}
2024-07-08T09:46:11.785005+02:00 odin hass[3286511]: 2024-07-08 09:46:11.779 DEBUG (MainThread) [custom_components.chime_tts]    ...TTS audio generated in 430.0ms
2024-07-08T09:46:11.785764+02:00 odin hass[3286511]: 2024-07-08 09:46:11.784 DEBUG (MainThread) [custom_components.chime_tts]  - Saving mp3 file to folder: /home/homeassistant/.homeassistant/media/sounds/temp/chime_tts/...
2024-07-08T09:46:11.785896+02:00 odin hass[3286511]: 2024-07-08 09:46:11.784 DEBUG (MainThread) [custom_components.chime_tts.helpers.filesystem] Creating audio folder: /home/homeassistant/.homeassistant/media/sounds/temp/chime_tts/
2024-07-08T09:46:12.112731+02:00 odin hass[3286511]: 2024-07-08 09:46:12.111 DEBUG (MainThread) [custom_components.chime_tts.helpers.filesystem] File saved to path: /home/homeassistant/.homeassistant/media/sounds/temp/chime_tts/7ougo45g.mp3
2024-07-08T09:46:12.552030+02:00 odin hass[3286511]: 2024-07-08 09:46:12.547 DEBUG (MainThread) [custom_components.chime_tts]  - Chime TTS audio generated:
2024-07-08T09:46:12.553520+02:00 odin hass[3286511]: 2024-07-08 09:46:12.547 DEBUG (MainThread) [custom_components.chime_tts]    * audio_duration = 3.405
2024-07-08T09:46:12.553691+02:00 odin hass[3286511]: 2024-07-08 09:46:12.547 DEBUG (MainThread) [custom_components.chime_tts]    * local_path = "/home/homeassistant/.homeassistant/media/sounds/temp/chime_tts/7ougo45g.mp3"
2024-07-08T09:46:12.553769+02:00 odin hass[3286511]: 2024-07-08 09:46:12.547 DEBUG (MainThread) [custom_components.chime_tts]    * public_path = None
2024-07-08T09:46:12.553867+02:00 odin hass[3286511]: 2024-07-08 09:46:12.547 DEBUG (MainThread) [custom_components.chime_tts]    * media_content_id = "media-source://media_source/media/sounds/temp/chime_tts/7ougo45g.mp3"
2024-07-08T09:46:12.553955+02:00 odin hass[3286511]: 2024-07-08 09:46:12.547 DEBUG (MainThread) [custom_components.chime_tts] ****************************
2024-07-08T09:46:12.554329+02:00 odin hass[3286511]: 2024-07-08 09:46:12.547 DEBUG (MainThread) [custom_components.chime_tts] *** Pre-Playback Actions ***
2024-07-08T09:46:12.554440+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts] ****************************
2024-07-08T09:46:12.554525+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts] **************************
2024-07-08T09:46:12.554610+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts] *** Chime TTS playback ***
2024-07-08T09:46:12.554685+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts] **************************
2024-07-08T09:46:12.554758+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts]    1 Regular media player detected:
2024-07-08T09:46:12.554842+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts]      - media_player.googlehome6815
2024-07-08T09:46:12.554927+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts]    Calling media_player.play_media with data:
2024-07-08T09:46:12.555024+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts]      - entity_id: ['media_player.googlehome6815']
2024-07-08T09:46:12.555111+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts]      - announce: True
2024-07-08T09:46:12.555200+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts]      - media_content_type: music
2024-07-08T09:46:12.555342+02:00 odin hass[3286511]: 2024-07-08 09:46:12.548 DEBUG (MainThread) [custom_components.chime_tts]      - media_content_id: media-source://media_source/media/sounds/temp/chime_tts/7ougo45g.mp3
2024-07-08T09:46:12.555459+02:00 odin hass[3286511]: 2024-07-08 09:46:12.551 DEBUG (MainThread) [custom_components.chime_tts]  - Waiting 3.405s for audio playback to complete...
2024-07-08T09:46:13.052605+02:00 odin hass[3286511]: 2024-07-08 09:46:13.045 ERROR (Thread-11) [homeassistant.components.cast.media_player] Failed to cast media http://<IP_ADDRESS>:8123/media/media/sounds/temp/chime_tts/7ougo45g.mp3?authSig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI4NDk0OTZiNGM3ZDU0N2RlYTYyNWIzODkyYTMxODE2OCIsInBhdGgiOiIvbWVkaWEvbWVkaWEvc291bmRzL3RlbXAvY2hpbWVfdHRzLzdvdWdvNDVnLm1wMyIsInBhcmFtcyI6W10sImlhdCI6MTcyMDQyNDc3MiwiZXhwIjoxNzIwNTExMTcyfQ.BBsCYCAu4-XYZwhkaXx9h4r8ACrtPIwk1w0EMlnrnJE from internal_url (http://<IP_ADDRESS>:8123). Please make sure the URL is: Reachable from the cast device and either a publicly resolvable hostname or an IP address
2024-07-08T09:46:15.959535+02:00 odin hass[3286511]: 2024-07-08 09:46:15.957 DEBUG (MainThread) [custom_components.chime_tts.helpers.media_player_helper]  - Waiting until 1 media_player isn't playing...
2024-07-08T09:46:15.959852+02:00 odin hass[3286511]: 2024-07-08 09:46:15.957 DEBUG (MainThread) [custom_components.chime_tts.helpers.media_player_helper]    ✔ media_player.googlehome6815
2024-07-08T09:46:15.960039+02:00 odin hass[3286511]: 2024-07-08 09:46:15.958 DEBUG (MainThread) [custom_components.chime_tts] ----- Chime TTS Say Completed in 5.08 s -----

Diagnostics dump
No response

Hi @strutings. Sorry you've been having issues, and thank you for providing the debug log messages and your configuration.
From the debug logs it appear that your cast media_player requires publicly available MP3 addresses:
2024-07-08T09:46:13.052605+02:00 odin hass[3286511]: 2024-07-08 09:46:13.045 ERROR (Thread-11) [homeassistant.components.cast.media_player] Failed to cast media http://<IP_ADDRESS>:8123/media/media/sounds/temp/chime_tts/7ougo45g.mp3?authSig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI4NDk0OTZiNGM3ZDU0N2RlYTYyNWIzODkyYTMxODE2OCIsInBhdGgiOiIvbWVkaWEvbWVkaWEvc291bmRzL3RlbXAvY2hpbWVfdHRzLzdvdWdvNDVnLm1wMyIsInBhcmFtcyI6W10sImlhdCI6MTcyMDQyNDc3MiwiZXhwIjoxNzIwNTExMTcyfQ.BBsCYCAu4-XYZwhkaXx9h4r8ACrtPIwk1w0EMlnrnJE from internal_url (http://<IP_ADDRESS>:8123). Please make sure the URL is: Reachable from the cast device and either a publicly resolvable hostname or an IP address

Can you please try changing your temporary folder path to a public-facing folder (eg: /config/www/chime_tts/temp/) and report back whether this fixes the issue?
If so I will add a fix so that Chime TTS will ensure a public URL will be used with cast media_players.

Hi @strutings. Sorry you've been having issues, and thank you for providing the debug log messages and your configuration.
From the debug logs it appear that your cast media_player requires publicly available MP3 addresses:
2024-07-08T09:46:13.052605+02:00 odin hass[3286511]: 2024-07-08 09:46:13.045 ERROR (Thread-11) [homeassistant.components.cast.media_player] Failed to cast media http://<IP_ADDRESS>:8123/media/media/sounds/temp/chime_tts/7ougo45g.mp3?authSig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI4NDk0OTZiNGM3ZDU0N2RlYTYyNWIzODkyYTMxODE2OCIsInBhdGgiOiIvbWVkaWEvbWVkaWEvc291bmRzL3RlbXAvY2hpbWVfdHRzLzdvdWdvNDVnLm1wMyIsInBhcmFtcyI6W10sImlhdCI6MTcyMDQyNDc3MiwiZXhwIjoxNzIwNTExMTcyfQ.BBsCYCAu4-XYZwhkaXx9h4r8ACrtPIwk1w0EMlnrnJE from internal_url (http://<IP_ADDRESS>:8123). Please make sure the URL is: Reachable from the cast device and either a publicly resolvable hostname or an IP address

~Can you please try changing your temporary folder path to a public-facing folder (eg: /config/www/chime_tts/temp/) and report back whether this fixes the issue?~
EDIT: After reviewing the documentation for Google Cast, it appear that media_player.play_media requires the filepath (URL) and not the media content id.
Can you please verify that using the URL returned by chime_tts.say_url works with your cast media_player when calling media_player.play_meda?
If so I will add a fix so that Chime TTS will use the public URL path with cast media_players instead of the media content id.

Changed the public folder to www/sounds/temp/chime_tts/chimes/ and successfully played the media file, so it seems like you've right that it's the URL path required
service: media_player.play_media target:   entity_id: media_player.ikealampe data:   media_content_id: http://<IP_ADDRESS>:8123/local/sounds/temp/chime_tts/wdbleu4j.mp3   media_content_type: music   announce: true

Great! I will include a fix in the next beta release and let you know when it's available for testing 👍

Great! I will include a fix in the next beta release and let you know when it's available for testing 👍

I have implemented a permanent fix in a new beta release, v1.1.4-beta4.
To install the new beta version:

Open the Chime TTS repository in HACS
Click on the ⋮ button in the top right
Select the ↻ Redownload option
Enable the Show beta versions option (it may take a moment to update the list)
Select version v1.1.4-beta4 from the updated version drop-down list
Restart Home Assistant

2024-07-10T10:36:07.690447+02:00 odin hass[3349181]: 2024-07-10 10:36:07.681 INFO (MainThread) [homeassistant.helpers.script.websocket_api_script] websocket_api script: Executing step call service 2024-07-10T10:36:07.693789+02:00 odin hass[3349181]: 2024-07-10 10:36:07.682 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ╔════════════════════════════════════════════╗ 2024-07-10T10:36:07.694193+02:00 odin hass[3349181]: 2024-07-10 10:36:07.682 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ║ Chime TTS Say Called. Version v1.1.4-beta4 ║ 2024-07-10T10:36:07.694909+02:00 odin hass[3349181]: 2024-07-10 10:36:07.682 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ╚════════════════════════════════════════════╝ 2024-07-10T10:36:07.695556+02:00 odin hass[3349181]: 2024-07-10 10:36:07.682 DEBUG (MainThread) [custom_components.chime_tts.queue_manager] Adding service call to queue 2024-07-10T10:36:07.695752+02:00 odin hass[3349181]: 2024-07-10 10:36:07.686 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ╭────────────────────╮ 2024-07-10T10:36:07.696447+02:00 odin hass[3349181]: 2024-07-10 10:36:07.686 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] │ General Parameters │ 2024-07-10T10:36:07.697132+02:00 odin hass[3349181]: 2024-07-10 10:36:07.686 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ╰────────────────────╯ 2024-07-10T10:36:07.697662+02:00 odin hass[3349181]: 2024-07-10 10:36:07.687 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * entity_ids = ['media_player.ikealampe'] 2024-07-10T10:36:07.700412+02:00 odin hass[3349181]: 2024-07-10 10:36:07.687 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * chime_path = bells_2 2024-07-10T10:36:07.701411+02:00 odin hass[3349181]: 2024-07-10 10:36:07.687 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * cache = True 2024-07-10T10:36:07.701643+02:00 odin hass[3349181]: 2024-07-10 10:36:07.687 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * offset = 450.0 2024-07-10T10:36:07.701818+02:00 odin hass[3349181]: 2024-07-10 10:36:07.688 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * final_delay = 0.0 2024-07-10T10:36:07.702857+02:00 odin hass[3349181]: 2024-07-10 10:36:07.688 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * message = testing 2024-07-10T10:36:07.703293+02:00 odin hass[3349181]: 2024-07-10 10:36:07.688 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * tts_platform = cloud 2024-07-10T10:36:07.703791+02:00 odin hass[3349181]: 2024-07-10 10:36:07.688 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * tts_speed = 100.0 2024-07-10T10:36:07.703971+02:00 odin hass[3349181]: 2024-07-10 10:36:07.688 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * tts_pitch = 0 2024-07-10T10:36:07.704110+02:00 odin hass[3349181]: 2024-07-10 10:36:07.688 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * announce = True 2024-07-10T10:36:07.707560+02:00 odin hass[3349181]: 2024-07-10 10:36:07.689 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * fade_audio = False 2024-07-10T10:36:07.707734+02:00 odin hass[3349181]: 2024-07-10 10:36:07.689 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * volume_level = -1 2024-07-10T10:36:07.707834+02:00 odin hass[3349181]: 2024-07-10 10:36:07.689 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * join_players = False 2024-07-10T10:36:07.707910+02:00 odin hass[3349181]: 2024-07-10 10:36:07.689 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * unjoin_players = False 2024-07-10T10:36:07.707995+02:00 odin hass[3349181]: 2024-07-10 10:36:07.689 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]  * media_players_array: 2024-07-10T10:36:07.708097+02:00 odin hass[3349181]: 2024-07-10 10:36:07.690 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]    - 0: entity_id: media_player.ikealampe 2024-07-10T10:36:07.708188+02:00 odin hass[3349181]: 2024-07-10 10:36:07.690 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      platform: sonos 2024-07-10T10:36:07.708275+02:00 odin hass[3349181]: 2024-07-10 10:36:07.690 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      initial volume: 0.1 2024-07-10T10:36:07.708362+02:00 odin hass[3349181]: 2024-07-10 10:36:07.691 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      target volume: -1.0 2024-07-10T10:36:07.708721+02:00 odin hass[3349181]: 2024-07-10 10:36:07.691 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      now playing: True 2024-07-10T10:36:07.708799+02:00 odin hass[3349181]: 2024-07-10 10:36:07.691 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      join supported: True 2024-07-10T10:36:07.708863+02:00 odin hass[3349181]: 2024-07-10 10:36:07.691 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers]      announce supported: True 2024-07-10T10:36:07.708944+02:00 odin hass[3349181]: 2024-07-10 10:36:07.691 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ╭─────────────────╮ 2024-07-10T10:36:07.709031+02:00 odin hass[3349181]: 2024-07-10 10:36:07.692 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] │ Preparing Audio │ 2024-07-10T10:36:07.709100+02:00 odin hass[3349181]: 2024-07-10 10:36:07.692 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ╰─────────────────╯ 2024-07-10T10:36:07.709167+02:00 odin hass[3349181]: 2024-07-10 10:36:07.692 DEBUG (MainThread) [custom_components.chime_tts]  *** Checking Chime TTS audio cache *** 2024-07-10T10:36:07.709235+02:00 odin hass[3349181]: 2024-07-10 10:36:07.698 DEBUG (MainThread) [custom_components.chime_tts]    ...cached audio found 2024-07-10T10:36:07.709328+02:00 odin hass[3349181]: 2024-07-10 10:36:07.698 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ╭────────────────────╮ 2024-07-10T10:36:07.709401+02:00 odin hass[3349181]: 2024-07-10 10:36:07.698 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] │ Chime TTS playback │ 2024-07-10T10:36:07.709467+02:00 odin hass[3349181]: 2024-07-10 10:36:07.698 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ╰────────────────────╯ 2024-07-10T10:36:07.709550+02:00 odin hass[3349181]: 2024-07-10 10:36:07.699 WARNING (MainThread) [custom_components.chime_tts] Error calling media_player.play_mediaservice: No media content id found 2024-07-10T10:36:07.709618+02:00 odin hass[3349181]: 2024-07-10 10:36:07.699 DEBUG (MainThread) [custom_components.chime_tts]  - Waiting 3.385s for audio playback to complete... 2024-07-10T10:36:11.092648+02:00 odin hass[3349181]: 2024-07-10 10:36:11.089 DEBUG (MainThread) [custom_components.chime_tts.helpers.media_player_helper]  - Waiting until 0 media_players aren't playing... 2024-07-10T10:36:11.093552+02:00 odin hass[3349181]: 2024-07-10 10:36:11.089 DEBUG (MainThread) [custom_components.chime_tts]  - Timed out waiting for playback to complete 2024-07-10T10:36:11.093795+02:00 odin hass[3349181]: 2024-07-10 10:36:11.089 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ╭──────────────────────────────────────────╮ 2024-07-10T10:36:11.094270+02:00 odin hass[3349181]: 2024-07-10 10:36:11.089 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] │──── Chime TTS Say Completed in 3.4 s ────│ 2024-07-10T10:36:11.094490+02:00 odin hass[3349181]: 2024-07-10 10:36:11.089 DEBUG (MainThread) [custom_components.chime_tts.helpers.helpers] ╰──────────────────────────────────────────╯ 2024-07-10T10:36:11.094786+02:00 odin hass[3349181]: 2024-07-10 10:36:11.089 DEBUG (MainThread) [custom_components.chime_tts.queue_manager] Service call completed successfully 2024-07-10T10:36:11.094985+02:00 odin hass[3349181]: 2024-07-10 10:36:11.089 DEBUG (MainThread) [custom_components.chime_tts.queue_manager] Queue now empty
Seems like it's still the same. Using setup 'media' and paths www/sounds/temp/chime_tts/chimes/ and www/sounds/temp/chime_tts/

Any progress on this?

Still struggling with this. The public_url is wrong and probably this causing the same error for Sonos as well.
ERROR (Thread-16) [homeassistant.components.cast.media_player] Failed to cast media http://<IP_ADDRESS>:8123/home/homeassistant/.homeassistant/local/chime_tts/jedciv2h.mp3?authSig=kjhsfkjahdsgfsadgf from internal_url (http://<IP_ADDRESS>:8123). Please make sure the URL is: Reachable from the cast device and either a publicly resolvable hostname or an IP address
The correct url should be http://<IP_ADDRESS>:8123/local/chime_tts/jedciv2h.mp3
When I change local url in HA settings to nabu casa url, it throws Unable to find public url error..

Installed v. 1.1.3 and added correct path to both configuration.yaml and chime config. Now it's working again.


Pani can't installed

i use honor phone,when installing it's showing '解析错误'.To other phone,also has this issue.what i should do?thankyou

Will address the issue you opened in the Pani repo


Duplicate TESTIMONIALS in desktop version

What happened?

How can we reproduce this bug?
By eliminating the duplicate testimonials using javascript logic
Desktop Information (Optional)
No response
Urgency (Optional)
High priority

i don't see duplicate, please describe more ?

i don't see duplicate, please describe more ?

Duplicate of 2 testimonial
Ex: Praveen Kumar

Okay, add yours

@agamjotsingh18 I want to change the testimonials design

As text come outside of the card.
I want to resolve this.

@agamjotsingh18 I want to change the testimonials design
As text come outside of the card. I want to resolve this.

Looks fine to me

Okk then

Okk then

Raise new issue


Render Error: Undefined is not a function

Trying to get the example working but keep receiving Render Error: Undefined is not a function.
Expo 47.0.12
react-native 0.70.5
react-native-reanimated 2.12.0
react-native-gesture-handler 2.8.0
react-native-haptic-feedback 1.14.0

Is this project abandoned?
Why isn't an issue this serious being adressed?

Seems to be a compatibility issue with Expo. Anyone else experienced this on Expo 47 or Expo 48?

do you have an example code or something to look at?
i am not having issues with this framework. using expo sdk 48. its important to note that  react-native-wagmi-charts uses some package versions that are not yet compatible with expo. i believe you need to make adjustments to your package.json file so that it will use expo-compatible versions of some of the packages.
if this is the issue you are experiencing, make sure to add this to your package.json
 "react-native-gesture-handler": "~2.9.0",
 "react-native-reanimated": "~2.14.4",
 "react-native-svg": "13.4.0",
 "react-native-wagmi-charts": "^2.3.0"


Python Support Improvements

Redesigned the python support to move towards leveraging uv's new build system when lambda builds become a first-class citizen. These changes make the builds much more reliable, faster, and configurable. The caveat being the requirement of using uv workspaces. This change is breaking, but necessary to support the sorts of folder structures that have been commonly requested in several issues and in the discord. The migration is incredibly simple, should only take a few minutes and is also more in line with the direction python packaging is going.
Also this change moves to using the RPC based runtime builder so there is no more duplication of function building!
Additionally, this PR fixes the sdk which was broken with the move to using an encrypted links file, ensured support for non-lambda environments, and improved the type hints.
All the examples have been updated with more thorough  code and folder structures, up to date readmes, and a few dependency updates. The new default dockerfile is simpler, less error prone and some race condition bugs should be solved.

fixes: https://github.com/sst/sst/issues/5088
should fix: https://github.com/sst/sst/issues/5079
fixes: https://github.com/sst/sst/issues/4002
does not fix this but will in a follow up pr when a new uv feature gets released: https://github.com/sst/sst/issues/4003
fixes: https://github.com/sst/sst/issues/4062 adding first class support for local dependencies
fixes: https://github.com/sst/sst/issues/4114 same as above

Reading through the examples; this is a fantastic improvement to dev experience.

This would be a tremendous improvement to python support! waiting eagerly 😁

Would this PR allow for deploying python lambda functions with SST?

Can't wait to try this

Just read through the code on this, very excited for it! Thank you @walln

oooh, this looks like something I've been waiting for, thank you so much @walln 🙌

@walln if there is a way with uv to export a requirements file without path dependencies and copy paste those path dependencies in a specific directory: 1) we will not need to use uv workspace and 2) we will able to put the right path dependencies in the bundle ?

@walln if there is a way with uv to export a requirements file without path dependencies and copy paste those path dependencies in a specific directory: 1) we will not need to use uv workspace and 2) we will able to put the right path dependencies in the bundle ?

Yes it is possible to do that I believe. The problem is that if we use path dependencies and do not export them in the requirements file, then its up to us to build the graph resolver that can determine which path dependencies need to be included. This would be a lot simpler if uv could build all transitive dependencies for a single target package. Theres some open discussion for this but its not implemented yet. I am leaning towards being slightly opinionated that we require the use of uv workspaces in order to provide a really simple and powerful experience. I also want to keep the build system here simple so we can leverage improvements on the uv side.

@walln Thank you for adding in the custom dockerfile example and preserving that functionality. Being able to do so was key for me to be able to enable streaming lambda responses, which requires wrapping the lambda in the AWS's lambda-web-adapter and doing this a little differently. I do think the result is clean and general purpose though. (I have a working example here: https://github.com/cosmic-ascendant/sst/tree/lambda-web-adapter/examples/aws-python-lambda-web-adapter).
We may want to include a requirements.txt in the example for clarity.
+1 On using uv workspaces. I'm finding that for other projects, the more I migrate towards uv the more maintainable my code has been.
Do you know if live lambda dev works with a custom Dockerfile?

@walln Thank you for adding in the custom dockerfile example and preserving that functionality. Being able to do so was key for me to be able to enable streaming lambda responses, which requires wrapping the lambda in AWS's lambda-web-adapter and doing things a little differently. I do think the result is clean and general purpose though. (Working example here: https://github.com/cosmic-ascendant/sst/tree/lambda-web-adapter/examples/aws-python-lambda-web-adapter).
We may want to include a requirements.txt in the example for clarity.
+1 On using uv workspaces. I'm finding that for other projects, the more I migrate towards uv the more maintainable my code has been.
Do you know if live lambda dev works with a custom Dockerfile?

Yeah you could use a requirements file if you want for the docker build but I didn't want to make the example too complicated. Regarding live dev yes! You can use custom dockerfiles as the docker build only applies during deploys so everything works the same as a standard python live dev even with custom dockerfiles. I'm glad to see web adapter works I was thinking about seeing how to support streaming in a future PR so I'll keep web adapter in mind for that.

Container mode builds now cache layers in ECR the same as cluster. I removed the python specific code paths in the function component (rpc builds are awsome btw). Updated the docs for how to use python functions and added a note about uv not being installed by default anymore.

pretty excited for the sst python experience to get boosted. thanks for putting in the elbow work here x

Built and ran this PR and the flow is much much cleaner. Thanks @walln you're a legend.
While I'm not able to get live lambda working (even across sst:latest, could be issue on my side), I was able to easily get lambda streaming deployed. It required very minimal modification.
Any thoughts on being able to include a .dockerignore in the artifacts?
One aspect that I initially struggled on was installing a user package which is located in the same directory as the lambda itself. Something like this:
├── function_a
│   ├── Dockerfile
│   ├── pyproject.toml
│   ├── src
│   │   └── function_a
│   │       ├── __init__.py
│   │       ├── lambda.py
│   │       └── user_lib
│   │       │   ├── __init__.py
│   │       │   └── ...

The requirements.txt from uv export that's generated for a given function includes all external dependencies, but when bundled, the function's pyproject.toml is omitted so I wasn't able to modify the Dockerfile to include something like uv pip install .. There might be some other solutions in using relative imports or adding to systempath that would work, though I wasn't initially successful.
In the end, I decided to embrace the structure in the example where I keep my lambda handler lightweight and delegate all user packages as external dependencies, as is done with core in the example. I.e.,
├── function_a
│   ├── Dockerfile
│   ├── pyproject.toml
│   ├── src
│   │   └── function_a
│   │       ├── __init__.py
│   │       └── lambda.py
├── user_lib
│   ├── pyproject.toml
│   ├── src
│   │   └── user_lib
│   │       ├── __init__.py
│   │       ├── l...

This way it gets picked up in uv export's requirements.txt. I now see this as a better paradigm anyway -- separating the infra-level lambda handler from the app-level user_lib. The standalone user_lib also makes for better testing and could even reside in a different repo if need be, being installed as a git source. That said, I'll probably need to think more about a good method for dependency injection for things like sst linkables or resources that are referenced in user_lib.
Thanks again.

Built and ran this PR and the flow is much much cleaner. Thanks @walln you're a legend.
While I'm not able to get live lambda working (even across sst:latest, could be issue on my side), I was able to easily get lambda streaming deployed. It required very minimal modification.
Any thoughts on being able to include a .dockerignore in the artifacts?
One aspect that I initially struggled on was installing a user package which is located in the same directory as the lambda itself. Something like this:
├── function_a
│   ├── Dockerfile
│   ├── pyproject.toml
│   ├── src
│   │   └── function_a
│   │       ├── __init__.py
│   │       ├── lambda.py
│   │       └── user_lib
│   │       │   ├── __init__.py
│   │       │   └── ...

The requirements.txt from uv export that's generated for a given function includes all external dependencies, but when bundled, the function's pyproject.toml is omitted so I wasn't able to modify the Dockerfile to include something like uv pip install .. There might be some other solutions in using relative imports or adding to systempath that would work, though I wasn't initially successful.
In the end, I decided to embrace the structure in the example where I keep my lambda handler lightweight and delegate all user packages as external dependencies, as is done with core in the example. I.e.,
├── function_a
│   ├── Dockerfile
│   ├── pyproject.toml
│   ├── src
│   │   └── function_a
│   │       ├── __init__.py
│   │       └── lambda.py
├── user_lib
│   ├── pyproject.toml
│   ├── src
│   │   └── user_lib
│   │       ├── __init__.py
│   │       ├── l...

This way it gets picked up in uv export's requirements.txt. I now see this as a better paradigm anyway -- separating the infra-level lambda handler from the app-level user_lib. The standalone user_lib also makes for better testing and could even reside in a different repo if need be, being installed as a git source. That said, I'll probably need to think more about a good method for dependency injection for things like sst linkables or resources that are referenced in user_lib.
Thanks again.

Im glad that it works for you - I think the issue with live dev is unrelated and has to do with the appsync backend for live lambdas now. Regarding the local lib I do think using the separate package is the way to go - but you might be able to do some things with the custom dockerfile and copyFiles to make it work the initial way.

why is this conflict so massive lol

I have no idea lmao - it was like 3 lines of changes

ah, have you been merging instead of rebasing? that would add a lot of noise.

@walln Running this on my own app that deviates from your provided example, found that /platform/dist/python-runtime/index.py failed to import external dependency requests. Easy enough to add to my pyproject.toml but worth considering checking for this or adding in by default.
The above is for sst dev and the downstream lambdaric_python_bridge. That said, live lambdas are largely working now. For my lambda streaming python example, it gets a little weird as the handler is designed to start a uvicorn server, which doesn't play perfectly with live lambda, but this may be a topic for a different thread.

@walln Running this on my own app that deviates from your provided example, found that /platform/dist/python-runtime/index.py failed to import external dependency requests. Easy enough to add to my pyproject.toml but worth considering checking for this or adding in by default.
The above is for sst dev and the downstream lambdaric_python_bridge. That said, live lambdas are largely working now. For my lambda streaming python example, it gets a little weird as the handler is designed to start a uvicorn server, which doesn't play perfectly with live lambda, but this may be a topic for a different thread.

Great point yeah I forgot to add that check back to the new build system. I'll add it in.

ah, have you been merging instead of rebasing?

Yeah that's the issue - but still and insane diff lol

Everything should be synced with dev and working properly now - I didn't dig too deep into the upstream changes but I corrected the lambda runtime api (fix the change to the route url) same as the other runtimes and everything seems to work the same as before. I think this is ready to merge unless anyone finds an issue I missed.


Detect & limit JUnit4 usage with ArchUnit

Since we want to migrate to JUnit Jupiter, this change will allow us to detect & mark all existing usage of JUni4 as accepted violations, but not allow new JUnit4 tests to be added (without updating the freeze store).

Whenever tests are converted to JUnit Jupiter a local test run will automatically update the freeze store, which will then show up in the diff for that MR. That way we can keep tabs on how many tests still need to be converted, and once that number is down far enough we can again try automation with https://docs.openrewrite.org/tutorials/migrate-from-junit-4-to-junit-5, similar to what was started in #1616; they've even since added support for migrating WireMockRule to WireMockExtension. :tada:

Is it possible to give the freeze files meaningful names rather than just UUIDs?
Since they're very large, it might be nice not to have to rely on eyeballing them to see what they're for.