text:
No updates when belongs_to association is declared as index

Hi,
I have two models, that have a one-to-many relation (belongs_to and has_many). Everything works fine if I don't declare an index on the belongs_to relation. Them moment I add the index declaration I have no more updates that are send to the client.
With the index declared, I get the following messages in the server console/log:
Finished "/cable/" [WebSocket] for 127.0.0.1 at 2016-11-04 12:20:28 +0100
Closing cursor: #<NoBrainer::Streams::ConcurrentAsyncHandler::AsyncQueryHandler:0x000000056a6b98 @handler=#<RethinkDB::CallbackHandler:0x000000056a6df0 @callback=#<Proc:0x000000055aaa50@/home/sille/.rvm/gems/ruby-2.3.0/gems/nobrainer_streams-0.2.0/lib/nobrainer_streams.rb:31 (lambda)>>, @msg=[152, [[41, [[15, ["weathers"]]], {"index"=>[73, [:id]]}]]], @all_opts={:db=>r.db("ttn_weather_dashboard_development")}, @token=1, @conn=#<RethinkDB::Connection:44913440 (localhost:28015) (Default DB: r.db("ttn_weather_dashboard_development")) (open)>, @opened=true, @closed=false>
Closing cursor: #<NoBrainer::Streams::ConcurrentAsyncHandler::AsyncQueryHandler:0x000000056bc678 @handler=#<RethinkDB::CallbackHandler:0x000000056bc8d0 @callback=#<Proc:0x000000056bfaf8@/home/sille/.rvm/gems/ruby-2.3.0/gems/nobrainer_streams-0.2.0/lib/nobrainer_streams.rb:31 (lambda)>>, @msg=[152, [[39, [[41, [[15, ["weathers"]]], {"index"=>[73, [:id]]}], [69, [[2, [r(3)]], [17, [[170, [[10, [3]], :sensor_id]], "41ovpOFKNAmyqt"]]]]]]]], @all_opts={:db=>r.db("ttn_weather_dashboard_development")}, @token=2, @conn=#<RethinkDB::Connection:44913440 (localhost:28015) (Default DB: r.db("ttn_weather_dashboard_development")) (open)>, @opened=true, @closed=false>

I am new to Rethinkdb and Nobrainer, so I cannot figure this out. Is this a bug? or am I using it wrong?
The models I declared in my application are:
class Weather
  include NoBrainer::Document
  include NoBrainer::Document::Timestamps

  field :temperature, :type => Float
  field :humidity, :type => Float
  field :pressure, :type => Float

  index :created_at

  belongs_to :sensor, required: true#, index: true
end

and
class Sensor
  include NoBrainer::Document
  include NoBrainer::Document::Timestamps

  field :name, :type => String
  field :deveui, :type => String, unique: true, index: true
  field :description, :type => Text

  has_many :weathers
end

My channel looks like this:
class SensorsChannel < ApplicationCable::Channel
  include NoBrainer::Streams

  def subscribed
    stream_from Sensor.find(params[:id]).weathers
  end

  def unsubscribed
    # Any cleanup needed when channel is unsubscribed
  end
end

Oh I'm not sure. Could you check in the RethinkDB UI if the index has been created? This gem is rather experimental and I know there's a bug where it crashes if a collection doesn't exist in the DB yet, maybe that also holds for indexes.

The rake nobrainer:sync_schema returns this: [NoBrainer] Create index Weather.sensor_id
and
indexStatus() returns me this.
{
    "function": <binary, 96 bytes, "24 72 65 71 6c 5f..."> ,
    "geo": false ,
    "index": "sensor_id" ,
    "multi": false ,
    "outdated": false ,
    "query": "indexCreate('sensor_id', function(var1) { return var1("sensor_id"); })" ,
    "ready": true
}

I encountered the same problem, but I solved it with index as lambda.
ex)
index :sensor_id_index, ->(doc){ doc['sensor_id'] }

Heh, that's a coincidence, are you both working with sensor data in rethinkdb? What led you to RethinkDB and this Gem if you don't mind me asking @extem ?

Thank you for your reply.
I developed a real time medical and healthcare application using nobrainer_streams. It works very well.
There was a problem that did not work when using a secondary index in the condition of stream_from. I accidentally found that specifying an index with lambda works.
Index names may be related. . .
RethinkDB + ActionCable + nobrainer_streams has good performance and I think it's a great idea.
While this mechanism makes the system very simple, it can create very cool applications.
I hope RethinkDB + nobrainer + nobrainer_streams will evolve.

If I ported it to another database that has change feeds like mongodb,
would you still choose it, or is there some other nice feature in RethinkDB
that's really useful to you?
On Wed, Jul 24, 2019, 15:38 extem notifications@github.com wrote:

Thank you for your reply.
I developed a real time medical and healthcare application using
nobrainer_streams. It works very well.
There was a problem that did not work when using a secondary index in the
condition of stream_from. I accidentally found that specifying an index
with lambda works.
Index names may be related. . .
RethinkDB + ActionCable + nobrainer_streams has good performance and I
think it's a great idea.
While this mechanism makes the system very simple, it can create very cool
applications.
I hope RethinkDB + nobrainer + nobrainer_streams will evolve.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/tinco/nobrainer_streams/issues/1?email_source=notifications&email_token=AAAFQBDOMMR3N2PZ42LEQ6LQBBLLRA5CNFSM4CVFXVUKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD2WLO6A#issuecomment-514635640,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAAFQBAD7I4YW2ILBOTGUNTQBBLLRANCNFSM4CVFXVUA
.

Other databases will use connection pooling, but can you use a lot of ChangeFeeds like RethinkDB?
My application creates ChangeFeeds with 5-6 stream_from in one session (client), but for my application, there are no performance issues with increasing number of clients.
It is old information,
https://stackoverflow.com/questions/48411897/severe-performance-drop-with-mongodb-change-streams

nobrainer_stream is the best design for me.
However, I am worried about the future RethinkDB.
Next time, I wanted to try to see if postgresql's listen notify and ActionCable can implement features like nobrainer_stream.

I wrote something wrong about the index.
RethinkDB cannot use order_by when using Changefeed.
NoBrainer will automatically add an order(:id) if no order is specified.
Using order_by results in the following error internally:
“RethinkDB: Cannot call changes on an eager stream”
It works if you specify without_ordering instead of order.
Ex)
stream_from ChatItem.where (chat_room_id: params ['chat_room_id']). without_ordering, include_initial: true, include_states: true
(chat_room_id is an index)
I'm sorry, My English isn’t very good.
Thank you.

Thanks! Does that mean the issue is resolved for you? Should I add some documentation somewhere? Or perhaps should I modify the code to automatically add without_ordering?

Thank you for your reply.
Yes, my issue has been solved.
Previously, queries involving secondary indexes did not work.
Because you can use secondary indexes, you can use nobrainer_stream for tables with many records.
This issue only occurs when using a secondary index as a query.
rethinkdb_monkeypatch.rb
Add error handling to the callback (res)
Then you can confirm the cause.
The following error is returned but not logged.
{"t" => 18, "e" => 3000000, "r" => ["Unable to change eager stream calls." "]," b "=> [0]}
Thank you very much

authors: extem sillevl tinco


text:
OSGi Support

Would you be open to enabling OSGi support for the project? It's pretty easy to do with the maven-bundle-plugin.
Thanks!

We aren't doing major changes to blueprints given work on TP3.  We are largely in maintenance mode at this point for Blueprints and other 2.x components of TinkerPop.  Note that the issue of OSGi was brought up for TP3 as well:
https://github.com/tinkerpop/tinkerpop3/issues/266
and we don't expect to support it.  I know this is problematic for developers trying to work in that environment, but it is just not something we expect to include.  Sorry about that.

source: gharchive/issue

authors: skahmann spmallette

repo: tinkerpop/blueprints

license_type: permissive

license_source: bigquery


text:
Change Austrians 10-26 to 'Nationalfeiertag'

10-26 is called Nationalfeiertag while 01-05 is called Staatsfeiertag. Source: https://en.wikipedia.org/wiki/Public_holidays_in_Austria
Thanks for the library.

@webpapaya Dankeschön :)

source: gharchive/pull-request

authors: tinohager webpapaya

license: mit


text:
merge where alu when one branch is identity element const

this is another case that does not increase alu count

did not really hit, will keep this for later

repo: tinygrad/tinygrad

license: MIT

license_source: github-api


text:
[multimodule] 1. move all into child "javalin" module

https://github.com/tipsy/javalin/pull/749#issuecomment-567859786

Structure project as multi-module, but only have one sub-module containing everything

This looks fine to me. Ready for merge?

It's normally transparent for users. So OK
The next one will introduce breaking changes:

Add javalin-openapi dependency to the users pom

Great, I'm okay with that. For end users it should mean replacing many different dependencies with one, which should be an improvement really.

authors: chsfleury tipsy

repo: tipsy/javalin


text:
Add support for critical tasks

Is your feature request related to a problem? Please describe.
When defining tasks in a service, you cannot shut down the application once that task is done / has crashed. For the latter, the service would still run without doing anything (if it is the critical functionality).
Describe the solution you'd like
I am thinking of adding support for critical tasks. Once defined, the service will shutdown completely when (one of) the critical task is done / crashed.
CRITICAL_TASKS = ["critical_task_name1", "critical_task_name2"]  # Critical tasks would be defined by the user in the __init__ function of the DataService class

def task_done_callback(task: asyncio.Task, name: str) -> None:
    """Handles tasks that have finished."""

    # ... [rest of the existing code] ...

    # Check if the task is critical and either completed or crashed
    if name in CRITICAL_TASKS:
        if task.exception() is not None or task.done():
            shutdown_application()

def shutdown_application() -> None:
    """Shuts down the entire application."""
    # logic to gracefully shut down the application
    # e.g.
    asyncio.get_event_loop().stop()

I would like to add something like this:
import asyncio
import logging

from pydase import DataService, Server

logger = logging.getLogger(__name__)

class Channel(DataService):
    def __init__(self):
        self._readout_delay = 2.0
        self._value = 0
        self._autostart_tasks = {
            "read_sensor_data": {
                "args": (),  # defaults to ()
                "exit_when_stopped": False,  # defaults to False
                "exit_when_exception_raised": True,  # defaults to False
            }
        }
        super().__init__()

    def _read_from_sensor(self):
        logger.debug("Reading sensor data")
        self._value = 1.0

    @property
    def value(self):
        return self._value

    async def read_sensor_data(self):
        while True:
            self._read_from_sensor()
            await asyncio.sleep(1)

if __name__ == "__main__":
    service = Channel()
    Server(service).run()

The keyword arguments have default values and do not have to be specified. I want to still allow users to use the old way of defining autostart_tasks, namely providing a tuple, not a dictionary.

With the new task api, this could be as simple as this
import pydase
from pydase.task.decorator import task

class SensorService(pydase.DataService):
    @task(exit_on_exception=True)
    async def read_sensor_data(self):
        while True:
            # do the logic ...
            await asyncio.sleep(...)

repo: tiqi-group/pydase


text:
makeDeepLinkGenerator 반환 함수에 appScheme 파라미터 추가

PR 설명

변경 내역

체크리스트

스크린샷 & URL

release-canary

release-canary

release-canary

repo: titicacadev/triple-frontend


text:
[Feature] since_last_passing_remote_commit

Is this feature missing in the latest version?

[X] I'm using the latest release

Is your feature request related to a problem? Please describe.
I'm currently using this action to detect changes to our dockerfile that we use for dev and our CI/CD pipeline. Currently it will rebuild our image and upload it to the registry if the dockerfile has changed since last remote commit. However, if the workflow fails before the build can be uploaded, this change in dockerfile is not captured.  Therefore the next remote commit that might fix the failed workflow might not have a dockerfile change and therefore the image rebuild will not take place and an old image will be used for testing.
Describe the solution you'd like?
A way to check if a file has been modified since the last passing remote commit. This should fix the issue stated above. Passing in this context is passing all enabled workflow checks.
Describe alternatives you've considered?
Current solution is a rule that disallows editing the workflows and dockerfile in the same remote commit, however other issues could arise (such as server failure) that this would not capture.
Anything else?
If anyone has a workaround for this that would work with the current version, that would be great. Let me know if you have any questions.
Code of Conduct

[X] I agree to follow this project's Code of Conduct

@Archie-Elvie  I’ve update the README highlighting the solution to solving this problem.

@jackton1 That works great, thank you. Out of interest is there a reason to use tj-actions/branch-names@v5 instead of ${{ github.ref_name }}?

From my test it doesn't appear that ${{ github.ref_name }} is going to return a valid branch name always which is why tj-actions/branch-names@v5 is recommended.

repo: tj-actions/changed-files


text:
[BUG] action fail with pull request from external branch called master

Is there an existing issue for this?

[X] I have searched the existing issues

Does this issue exist in the latest version?

[X] I'm using the latest release

Describe the bug?
(sorry if this is already handled or I didn't found a similar issue)
We are using this action on openwrt to detect changes from pr and push and I notice that from pr from user that use master as their branch on checkout the action fail with
  Resolving deltas:  97% (619/638)
  Resolving deltas:  98% (626/638)
  Resolving deltas:  99% (632/638)
  Resolving deltas: 100% (638/638)
  Resolving deltas: 100% (638/638), completed with 283 local objects.
  From https://github.com/openwrt/openwrt
   ! [rejected]        master     -> master  (non-fast-forward)
   * [new branch]      master     -> origin/master

This is one of the jobs https://github.com/openwrt/openwrt/actions/runs/4119643122/jobs/7150434105
Think this is a bug but I could be totally wrong... Notice this for a while so it doesn't seems to be a github problem.
To Reproduce

add some changes to the master branch of a forked repo
propose such changes to the original repo using the github pull request feature
run changed-files action and notice the rejected file in the log

What OS are you seeing the problem on?
ubuntu-latest or ubuntu-20.04
Expected behavior?
The changed file are correctly displayed.
Relevant log output
##[debug]Evaluating condition for step: 'Get changed files'
##[debug]Evaluating: success()
##[debug]Evaluating success:
##[debug]=> true
##[debug]Result: true
##[debug]Starting: Get changed files
##[debug]Register post job cleanup for action: tj-actions/changed-files@v35
##[debug]Loading inputs
##[debug]Loading env
Run tj-actions/changed-files@v35

##[debug]Evaluating: github.server_url
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'server_url'
##[debug]=> 'https://github.com'
##[debug]Result: 'https://github.com'
##[debug]Evaluating: github.repository
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'repository'
##[debug]=> 'openwrt/openwrt'
##[debug]Result: 'openwrt/openwrt'
##[debug]Evaluating: github.ref
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'ref'
##[debug]=> 'refs/pull/11935/merge'
##[debug]Result: 'refs/pull/11935/merge'
##[debug]Evaluating: github.sha
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'sha'
##[debug]=> 'a045530910cf122aa4660b203c75e9e6fa20463d'
##[debug]Result: 'a045530910cf122aa4660b203c75e9e6fa20463d'
##[debug]Evaluating: github.workspace
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'workspace'
##[debug]=> '/home/runner/work/openwrt/openwrt'
##[debug]Result: '/home/runner/work/openwrt/openwrt'
##[debug]Evaluating: github.event.pull_request.head.repo.fork
##[debug]Evaluating Index:
##[debug]..Evaluating Index:
##[debug]....Evaluating Index:
##[debug]......Evaluating Index:
##[debug]........Evaluating Index:
##[debug]..........Evaluating github:
##[debug]..........=> Object
##[debug]..........Evaluating String:
##[debug]..........=> 'event'
##[debug]........=> Object
##[debug]........Evaluating String:
##[debug]........=> 'pull_request'
##[debug]......=> Object
##[debug]......Evaluating String:
##[debug]......=> 'head'
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'repo'
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'fork'
##[debug]=> true
##[debug]Result: true
##[debug]Evaluating: github.event.pull_request.number
##[debug]Evaluating Index:
##[debug]..Evaluating Index:
##[debug]....Evaluating Index:
##[debug]......Evaluating github:
##[debug]......=> Object
##[debug]......Evaluating String:
##[debug]......=> 'event'
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'pull_request'
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'number'
##[debug]=> 11935
##[debug]Result: 11935
##[debug]Evaluating: github.event.pull_request.base.ref
##[debug]Evaluating Index:
##[debug]..Evaluating Index:
##[debug]....Evaluating Index:
##[debug]......Evaluating Index:
##[debug]........Evaluating github:
##[debug]........=> Object
##[debug]........Evaluating String:
##[debug]........=> 'event'
##[debug]......=> Object
##[debug]......Evaluating String:
##[debug]......=> 'pull_request'
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'base'
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'ref'
##[debug]=> 'master'
##[debug]Result: 'master'
##[debug]Evaluating: github.event.pull_request.head.ref
##[debug]Evaluating Index:
##[debug]..Evaluating Index:
##[debug]....Evaluating Index:
##[debug]......Evaluating Index:
##[debug]........Evaluating github:
##[debug]........=> Object
##[debug]........Evaluating String:
##[debug]........=> 'event'
##[debug]......=> Object
##[debug]......Evaluating String:
##[debug]......=> 'pull_request'
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'head'
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'ref'
##[debug]=> 'master'
##[debug]Result: 'master'
##[debug]Evaluating: github.event.pull_request.base.sha
##[debug]Evaluating Index:
##[debug]..Evaluating Index:
##[debug]....Evaluating Index:
##[debug]......Evaluating Index:
##[debug]........Evaluating github:
##[debug]........=> Object
##[debug]........Evaluating String:
##[debug]........=> 'event'
##[debug]......=> Object
##[debug]......Evaluating String:
##[debug]......=> 'pull_request'
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'base'
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'sha'
##[debug]=> '712681458a65736d3fc625bb9c481c31b23c1f97'
##[debug]Result: '712681458a65736d3fc625bb9c481c31b23c1f97'
##[debug]Evaluating: github.event.pull_request.head.sha
##[debug]Evaluating Index:
##[debug]..Evaluating Index:
##[debug]....Evaluating Index:
##[debug]......Evaluating Index:
##[debug]........Evaluating github:
##[debug]........=> Object
##[debug]........Evaluating String:
##[debug]........=> 'event'
##[debug]......=> Object
##[debug]......Evaluating String:
##[debug]......=> 'pull_request'
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'head'
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'sha'
##[debug]=> '96d56af46dc7edc7853b00b773714d842e2150f6'
##[debug]Result: '96d56af46dc7edc7853b00b773714d842e2150f6'
##[debug]Evaluating: github.event.pull_request.commits
##[debug]Evaluating Index:
##[debug]..Evaluating Index:
##[debug]....Evaluating Index:
##[debug]......Evaluating github:
##[debug]......=> Object
##[debug]......Evaluating String:
##[debug]......=> 'event'
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'pull_request'
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'commits'
##[debug]=> 1
##[debug]Result: 1
##[debug]Evaluating: github.event.before
##[debug]Evaluating Index:
##[debug]..Evaluating Index:
##[debug]....Evaluating github:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'event'
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'before'
##[debug]=> '6d2c9d1aac519f1f3d856e6f5a8a0836bce41d07'
##[debug]Result: '6d2c9d1aac519f1f3d856e6f5a8a0836bce41d07'
##[debug]Evaluating: github.event.forced
##[debug]Evaluating Index:
##[debug]..Evaluating Index:
##[debug]....Evaluating github:
##[debug]....=> Object
##[debug]....Evaluating String:
##[debug]....=> 'event'
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'forced'
##[debug]=> null
##[debug]Result: null
##[debug]Evaluating: github.ref_name
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'ref_name'
##[debug]=> '11935/merge'
##[debug]Result: '11935/merge'
##[debug]Evaluating: inputs.sha
##[debug]Evaluating Index:
##[debug]..Evaluating inputs:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'sha'
##[debug]=> ''
##[debug]Result: ''
##[debug]Evaluating: inputs.base_sha
##[debug]Evaluating Index:
##[debug]..Evaluating inputs:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'base_sha'
##[debug]=> ''
##[debug]Result: ''
##[debug]Evaluating: inputs.since
##[debug]Evaluating Index:
##[debug]..Evaluating inputs:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'since'
##[debug]=> ''
##[debug]Result: ''
##[debug]Evaluating: inputs.until
##[debug]Evaluating Index:
##[debug]..Evaluating inputs:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'until'
##[debug]=> ''
##[debug]Result: ''
##[debug]Evaluating: inputs.path
##[debug]Evaluating Index:
##[debug]..Evaluating inputs:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'path'
##[debug]=> '.'
##[debug]Result: '.'
##[debug]Evaluating: inputs.fetch_depth
##[debug]Evaluating Index:
##[debug]..Evaluating inputs:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'fetch_depth'
##[debug]=> '50'
##[debug]Result: '50'
##[debug]Evaluating: inputs.since_last_remote_commit
##[debug]Evaluating Index:
##[debug]..Evaluating inputs:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'since_last_remote_commit'
##[debug]=> 'false'
##[debug]Result: 'false'
##[debug]Evaluating condition for step: 'run'
##[debug]Evaluating: success()
##[debug]Evaluating success:
##[debug]=> true
##[debug]Result: true
##[debug]Starting: run
##[debug]Loading inputs
##[debug]Loading env
Run # "Calculating the previous and current SHA..."
##[debug]/usr/bin/bash --noprofile --norc -e -o pipefail /home/runner/work/_temp/c370bbd2-5b4e-4ba7-a8ad-495530fb33f6.sh
::group::changed-files-diff-sha
changed-files-diff-sha
  ##[debug]Resolving repository path: /home/runner/work/openwrt/openwrt/.
  Verifying git version...
  Valid git version found: (2.39.1)
  Running on a pull request event...
  Fetching remote refs...
  From https://github.com/openwrt/openwrt
   * [new ref]         refs/pull/11935/head -> master
  ##[debug]Fetching remote target branch...
  remote: Enumerating objects: 2524, done.
  remote: Counting objects:   0% (1/1703)
  remote: Counting objects:   1% (18/1703)
  remote: Counting objects:   2% (35/1703)
  remote: Counting objects:   3% (52/1703)
  remote: Counting objects:   4% (69/1703)
  remote: Counting objects:   5% (86/1703)
  remote: Counting objects:   6% (103/1703)
  remote: Counting objects:   7% (120/1703)
  remote: Counting objects:   8% (137/1703)
  remote: Counting objects:   9% (154/1703)
  remote: Counting objects:  10% (171/1703)
  remote: Counting objects:  11% (188/1703)
  remote: Counting objects:  12% (205/1703)
  remote: Counting objects:  13% (222/1703)
  remote: Counting objects:  14% (239/1703)
  remote: Counting objects:  15% (256/1703)
  remote: Counting objects:  16% (273/1703)
  remote: Counting objects:  17% (290/1703)
  remote: Counting objects:  18% (307/1703)
  remote: Counting objects:  19% (324/1703)
  remote: Counting objects:  20% (341/1703)
  remote: Counting objects:  21% (358/1703)
  remote: Counting objects:  22% (375/1703)
  remote: Counting objects:  23% (392/1703)
  remote: Counting objects:  24% (409/1703)
  remote: Counting objects:  25% (426/1703)
  remote: Counting objects:  26% (443/1703)
  remote: Counting objects:  27% (460/1703)
  remote: Counting objects:  28% (477/1703)
  remote: Counting objects:  29% (494/1703)
  remote: Counting objects:  30% (511/1703)
  remote: Counting objects:  31% (528/1703)
  remote: Counting objects:  32% (545/1703)
  remote: Counting objects:  33% (562/1703)
  remote: Counting objects:  34% (580/1703)
  remote: Counting objects:  35% (597/1703)
  remote: Counting objects:  36% (614/1703)
  remote: Counting objects:  37% (631/1703)
  remote: Counting objects:  38% (648/1703)
  remote: Counting objects:  39% (665/1703)
  remote: Counting objects:  40% (682/1703)
  remote: Counting objects:  41% (699/1703)
  remote: Counting objects:  42% (716/1703)
  remote: Counting objects:  43% (733/1703)
  remote: Counting objects:  44% (750/1703)
  remote: Counting objects:  45% (767/1703)
  remote: Counting objects:  46% (784/1703)
  remote: Counting objects:  47% (801/1703)
  remote: Counting objects:  48% (818/1703)
  remote: Counting objects:  49% (835/1703)
  remote: Counting objects:  50% (852/1703)
  remote: Counting objects:  51% (869/1703)
  remote: Counting objects:  52% (886/1703)
  remote: Counting objects:  53% (903/1703)
  remote: Counting objects:  54% (920/1703)
  remote: Counting objects:  55% (937/1703)
  remote: Counting objects:  56% (954/1703)
  remote: Counting objects:  57% (971/1703)
  remote: Counting objects:  58% (988/1703)
  remote: Counting objects:  59% (1005/1703)
  remote: Counting objects:  60% (1022/1703)
  remote: Counting objects:  61% (1039/1703)
  remote: Counting objects:  62% (1056/1703)
  remote: Counting objects:  63% (1073/1703)
  remote: Counting objects:  64% (1090/1703)
  remote: Counting objects:  65% (1107/1703)
  remote: Counting objects:  66% (1124/1703)
  remote: Counting objects:  67% (1142/1703)
  remote: Counting objects:  68% (1159/1703)
  remote: Counting objects:  69% (1176/1703)
  remote: Counting objects:  70% (1193/1703)
  remote: Counting objects:  71% (1210/1703)
  remote: Counting objects:  72% (1227/1703)
  remote: Counting objects:  73% (1244/1703)
  remote: Counting objects:  74% (1261/1703)
  remote: Counting objects:  75% (1278/1703)
  remote: Counting objects:  76% (1295/1703)
  remote: Counting objects:  77% (1312/1703)
  remote: Counting objects:  78% (1329/1703)
  remote: Counting objects:  79% (1346/1703)
  remote: Counting objects:  80% (1363/1703)
  remote: Counting objects:  81% (1380/1703)
  remote: Counting objects:  82% (1397/1703)
  remote: Counting objects:  83% (1414/1703)
  remote: Counting objects:  84% (1431/1703)
  remote: Counting objects:  85% (1448/1703)
  remote: Counting objects:  86% (1465/1703)
  remote: Counting objects:  87% (1482/1703)
  remote: Counting objects:  88% (1499/1703)
  remote: Counting objects:  89% (1516/1703)
  remote: Counting objects:  90% (1533/1703)
  remote: Counting objects:  91% (1550/1703)
  remote: Counting objects:  92% (1567/1703)
  remote: Counting objects:  93% (1584/1703)
  remote: Counting objects:  94% (1601/1703)
  remote: Counting objects:  95% (1618/1703)
  remote: Counting objects:  96% (1635/1703)
  remote: Counting objects:  97% (1652/1703)
  remote: Counting objects:  98% (1669/1703)
  remote: Counting objects:  99% (1686/1703)
  remote: Counting objects: 100% (1703/1703)
  remote: Counting objects: 100% (1703/1703), done.
  remote: Compressing objects:   0% (1/689)
  remote: Compressing objects:   1% (7/689)
  remote: Compressing objects:   2% (14/689)
  remote: Compressing objects:   3% (21/689)
  remote: Compressing objects:   4% (28/689)
  remote: Compressing objects:   5% (35/689)
  remote: Compressing objects:   6% (42/689)
  remote: Compressing objects:   7% (49/689)
  remote: Compressing objects:   8% (56/689)
  remote: Compressing objects:   9% (63/689)
  remote: Compressing objects:  10% (69/689)
  remote: Compressing objects:  11% (76/689)
  remote: Compressing objects:  12% (83/689)
  remote: Compressing objects:  13% (90/689)
  remote: Compressing objects:  14% (97/689)
  remote: Compressing objects:  15% (104/689)
  remote: Compressing objects:  16% (111/689)
  remote: Compressing objects:  17% (118/689)
  remote: Compressing objects:  18% (125/689)
  remote: Compressing objects:  19% (131/689)
  remote: Compressing objects:  20% (138/689)
  remote: Compressing objects:  21% (145/689)
  remote: Compressing objects:  22% (152/689)
  remote: Compressing objects:  23% (159/689)
  remote: Compressing objects:  24% (166/689)
  remote: Compressing objects:  25% (173/689)
  remote: Compressing objects:  26% (180/689)
  remote: Compressing objects:  27% (187/689)
  remote: Compressing objects:  28% (193/689)
  remote: Compressing objects:  29% (200/689)
  remote: Compressing objects:  30% (207/689)
  remote: Compressing objects:  31% (214/689)
  remote: Compressing objects:  32% (221/689)
  remote: Compressing objects:  33% (228/689)
  remote: Compressing objects:  34% (235/689)
  remote: Compressing objects:  35% (242/689)
  remote: Compressing objects:  36% (249/689)
  remote: Compressing objects:  37% (255/689)
  remote: Compressing objects:  38% (262/689)
  remote: Compressing objects:  39% (269/689)
  remote: Compressing objects:  40% (276/689)
  remote: Compressing objects:  41% (283/689)
  remote: Compressing objects:  42% (290/689)
  remote: Compressing objects:  43% (297/689)
  remote: Compressing objects:  44% (304/689)
  remote: Compressing objects:  45% (311/689)
  remote: Compressing objects:  46% (317/689)
  remote: Compressing objects:  47% (324/689)
  remote: Compressing objects:  48% (331/689)
  remote: Compressing objects:  49% (338/689)
  remote: Compressing objects:  50% (345/689)
  remote: Compressing objects:  51% (352/689)
  remote: Compressing objects:  52% (359/689)
  remote: Compressing objects:  53% (366/689)
  remote: Compressing objects:  54% (373/689)
  remote: Compressing objects:  55% (379/689)
  remote: Compressing objects:  56% (386/689)
  remote: Compressing objects:  57% (393/689)
  remote: Compressing objects:  58% (400/689)
  remote: Compressing objects:  59% (407/689)
  remote: Compressing objects:  60% (414/689)
  remote: Compressing objects:  61% (421/689)
  remote: Compressing objects:  62% (428/689)
  remote: Compressing objects:  63% (435/689)
  remote: Compressing objects:  64% (441/689)
  remote: Compressing objects:  65% (448/689)
  remote: Compressing objects:  66% (455/689)
  remote: Compressing objects:  67% (462/689)
  remote: Compressing objects:  68% (469/689)
  remote: Compressing objects:  69% (476/689)
  remote: Compressing objects:  70% (483/689)
  remote: Compressing objects:  71% (490/689)
  remote: Compressing objects:  72% (497/689)
  remote: Compressing objects:  73% (503/689)
  remote: Compressing objects:  74% (510/689)
  remote: Compressing objects:  75% (517/689)
  remote: Compressing objects:  76% (524/689)
  remote: Compressing objects:  77% (531/689)
  remote: Compressing objects:  78% (538/689)
  remote: Compressing objects:  79% (545/689)
  remote: Compressing objects:  80% (552/689)
  remote: Compressing objects:  81% (559/689)
  remote: Compressing objects:  82% (565/689)
  remote: Compressing objects:  83% (572/689)
  remote: Compressing objects:  84% (579/689)
  remote: Compressing objects:  85% (586/689)
  remote: Compressing objects:  86% (593/689)
  remote: Compressing objects:  87% (600/689)
  remote: Compressing objects:  88% (607/689)
  remote: Compressing objects:  89% (614/689)
  remote: Compressing objects:  90% (621/689)
  remote: Compressing objects:  91% (627/689)
  remote: Compressing objects:  92% (634/689)
  remote: Compressing objects:  93% (641/689)
  remote: Compressing objects:  94% (648/689)
  remote: Compressing objects:  95% (655/689)
  remote: Compressing objects:  96% (662/689)
  remote: Compressing objects:  97% (669/689)
  remote: Compressing objects:  98% (676/689)
  remote: Compressing objects:  99% (683/689)
  remote: Compressing objects: 100% (689/689)
  remote: Compressing objects: 100% (689/689), done.
  Receiving objects:   0% (1/1195)
  Receiving objects:   1% (12/1195)
  Receiving objects:   2% (24/1195)
  Receiving objects:   3% (36/1195)
  Receiving objects:   4% (48/1195)
  Receiving objects:   5% (60/1195)
  Receiving objects:   6% (72/1195)
  Receiving objects:   7% (84/1195)
  Receiving objects:   8% (96/1195)
  Receiving objects:   9% (108/1195)
  Receiving objects:  10% (120/1195)
  Receiving objects:  11% (132/1195)
  Receiving objects:  12% (144/1195)
  Receiving objects:  13% (156/1195)
  Receiving objects:  14% (168/1195)
  Receiving objects:  15% (180/1195)
  Receiving objects:  16% (192/1195)
  Receiving objects:  17% (204/1195)
  Receiving objects:  18% (216/1195)
  Receiving objects:  19% (228/1195)
  Receiving objects:  20% (239/1195)
  Receiving objects:  21% (251/1195)
  Receiving objects:  22% (263/1195)
  Receiving objects:  23% (275/1195)
  Receiving objects:  24% (287/1195)
  Receiving objects:  25% (299/1195)
  Receiving objects:  26% (311/1195)
  Receiving objects:  27% (323/1195)
  Receiving objects:  28% (335/1195)
  Receiving objects:  29% (347/1195)
  Receiving objects:  30% (359/1195)
  Receiving objects:  31% (371/1195)
  Receiving objects:  32% (383/1195)
  Receiving objects:  33% (395/1195)
  Receiving objects:  34% (407/1195)
  Receiving objects:  35% (419/1195)
  Receiving objects:  36% (431/1195)
  Receiving objects:  37% (443/1195)
  Receiving objects:  38% (455/1195)
  Receiving objects:  39% (467/1195)
  Receiving objects:  40% (478/1195)
  Receiving objects:  41% (490/1195)
  Receiving objects:  42% (502/1195)
  Receiving objects:  43% (514/1195)
  Receiving objects:  44% (526/1195)
  Receiving objects:  45% (538/1195)
  Receiving objects:  46% (550/1195)
  Receiving objects:  47% (562/1195)
  Receiving objects:  48% (574/1195)
  Receiving objects:  49% (586/1195)
  Receiving objects:  50% (598/1195)
  Receiving objects:  51% (610/1195)
  Receiving objects:  52% (622/1195)
  Receiving objects:  53% (634/1195)
  Receiving objects:  54% (646/1195)
  Receiving objects:  55% (658/1195)
  Receiving objects:  56% (670/1195)
  Receiving objects:  57% (682/1195)
  Receiving objects:  58% (694/1195)
  Receiving objects:  59% (706/1195)
  Receiving objects:  60% (717/1195)
  Receiving objects:  61% (729/1195)
  Receiving objects:  62% (741/1195)
  Receiving objects:  63% (753/1195)
  Receiving objects:  64% (765/1195)
  Receiving objects:  65% (777/1195)
  Receiving objects:  66% (789/1195)
  Receiving objects:  67% (801/1195)
  Receiving objects:  68% (813/1195)
  Receiving objects:  69% (825/1195)
  Receiving objects:  70% (837/1195)
  Receiving objects:  71% (849/1195)
  Receiving objects:  72% (861/1195)
  Receiving objects:  73% (873/1195)
  Receiving objects:  74% (885/1195)
  Receiving objects:  75% (897/1195)
  Receiving objects:  76% (909/1195)
  Receiving objects:  77% (921/1195)
  Receiving objects:  78% (933/1195)
  Receiving objects:  79% (945/1195)
  Receiving objects:  80% (956/1195)
  Receiving objects:  81% (968/1195)
  Receiving objects:  82% (980/1195)
  Receiving objects:  83% (992/1195)
  Receiving objects:  84% (1004/1195)
  Receiving objects:  85% (1016/1195)
  Receiving objects:  86% (1028/1195)
  Receiving objects:  87% (1040/1195)
  Receiving objects:  88% (1052/1195)
  Receiving objects:  89% (1064/1195)
  Receiving objects:  90% (1076/1195)
  Receiving objects:  91% (1088/1195)
  Receiving objects:  92% (1100/1195)
  remote: Total 1195 (delta 842), reused 766 (delta 435), pack-reused 0
  Receiving objects:  93% (1112/1195)
  Receiving objects:  94% (1124/1195)
  Receiving objects:  95% (1136/1195)
  Receiving objects:  96% (1148/1195)
  Receiving objects:  97% (1160/1195)
  Receiving objects:  98% (1172/1195)
  Receiving objects:  99% (1184/1195)
  Receiving objects: 100% (1195/1195)
  Receiving objects: 100% (1195/1195), 215.60 KiB | 3.04 MiB/s, done.
  Resolving deltas:   0% (0/842)
  Resolving deltas:   1% (9/842)
  Resolving deltas:   2% (17/842)
  Resolving deltas:   3% (26/842)
  Resolving deltas:   4% (34/842)
  Resolving deltas:   5% (43/842)
  Resolving deltas:   6% (51/842)
  Resolving deltas:   7% (59/842)
  Resolving deltas:   8% (68/842)
  Resolving deltas:   9% (76/842)
  Resolving deltas:  10% (85/842)
  Resolving deltas:  11% (93/842)
  Resolving deltas:  12% (102/842)
  Resolving deltas:  13% (110/842)
  Resolving deltas:  14% (118/842)
  Resolving deltas:  15% (127/842)
  Resolving deltas:  16% (135/842)
  Resolving deltas:  17% (144/842)
  Resolving deltas:  18% (152/842)
  Resolving deltas:  19% (160/842)
  Resolving deltas:  20% (169/842)
  Resolving deltas:  21% (177/842)
  Resolving deltas:  22% (186/842)
  Resolving deltas:  23% (194/842)
  Resolving deltas:  24% (203/842)
  Resolving deltas:  25% (211/842)
  Resolving deltas:  26% (219/842)
  Resolving deltas:  27% (228/842)
  Resolving deltas:  28% (236/842)
  Resolving deltas:  29% (245/842)
  Resolving deltas:  30% (253/842)
  Resolving deltas:  31% (262/842)
  Resolving deltas:  32% (270/842)
  Resolving deltas:  33% (278/842)
  Resolving deltas:  34% (287/842)
  Resolving deltas:  35% (295/842)
  Resolving deltas:  36% (304/842)
  Resolving deltas:  37% (312/842)
  Resolving deltas:  38% (320/842)
  Resolving deltas:  39% (329/842)
  Resolving deltas:  40% (337/842)
  Resolving deltas:  41% (346/842)
  Resolving deltas:  42% (354/842)
  Resolving deltas:  43% (363/842)
  Resolving deltas:  44% (371/842)
  Resolving deltas:  45% (379/842)
  Resolving deltas:  46% (388/842)
  Resolving deltas:  47% (396/842)
  Resolving deltas:  48% (405/842)
  Resolving deltas:  49% (413/842)
  Resolving deltas:  50% (421/842)
  Resolving deltas:  51% (430/842)
  Resolving deltas:  52% (438/842)
  Resolving deltas:  53% (447/842)
  Resolving deltas:  54% (455/842)
  Resolving deltas:  55% (464/842)
  Resolving deltas:  56% (472/842)
  Resolving deltas:  57% (480/842)
  Resolving deltas:  58% (489/842)
  Resolving deltas:  59% (497/842)
  Resolving deltas:  60% (506/842)
  Resolving deltas:  61% (514/842)
  Resolving deltas:  62% (523/842)
  Resolving deltas:  63% (531/842)
  Resolving deltas:  64% (539/842)
  Resolving deltas:  65% (548/842)
  Resolving deltas:  66% (556/842)
  Resolving deltas:  67% (565/842)
  Resolving deltas:  68% (573/842)
  Resolving deltas:  69% (581/842)
  Resolving deltas:  70% (590/842)
  Resolving deltas:  71% (598/842)
  Resolving deltas:  72% (607/842)
  Resolving deltas:  73% (615/842)
  Resolving deltas:  74% (624/842)
  Resolving deltas:  75% (632/842)
  Resolving deltas:  76% (640/842)
  Resolving deltas:  77% (649/842)
  Resolving deltas:  78% (657/842)
  Resolving deltas:  79% (666/842)
  Resolving deltas:  80% (674/842)
  Resolving deltas:  81% (683/842)
  Resolving deltas:  82% (691/842)
  Resolving deltas:  83% (699/842)
  Resolving deltas:  84% (708/842)
  Resolving deltas:  85% (716/842)
  Resolving deltas:  86% (725/842)
  Resolving deltas:  87% (733/842)
  Resolving deltas:  88% (741/842)
  Resolving deltas:  89% (750/842)
  Resolving deltas:  90% (758/842)
  Resolving deltas:  91% (767/842)
  Resolving deltas:  92% (775/842)
  Resolving deltas:  93% (784/842)
  Resolving deltas:  94% (792/842)
  Resolving deltas:  95% (800/842)
  Resolving deltas:  96% (809/842)
  Resolving deltas:  97% (817/842)
  Resolving deltas:  98% (826/842)
  Resolving deltas:  99% (834/842)
  Resolving deltas: 100% (842/842)
  Resolving deltas: 100% (842/842), completed with 335 local objects.
  From https://github.com/openwrt/openwrt
   ! [rejected]        master     -> master  (non-fast-forward)
   * [new branch]      master     -> origin/master
  Error: Process completed with exit code 1.
  ##[debug]Finished: run
  ##[debug]Evaluating condition for step: 'run'
  ##[debug]Evaluating: success()
  ##[debug]Evaluating success:
  ##[debug]=> false
  ##[debug]Result: false
  ##[debug]Evaluating: github.workspace
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating github:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'workspace'
  ##[debug]=> '/home/runner/work/openwrt/openwrt'
  ##[debug]Result: '/home/runner/work/openwrt/openwrt'
  ##[debug]Evaluating: github.event.pull_request.base.ref
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating Index:
  ##[debug]........Evaluating github:
  ##[debug]........=> Object
  ##[debug]........Evaluating String:
  ##[debug]........=> 'event'
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'pull_request'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'base'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'ref'
  ##[debug]=> 'master'
  ##[debug]Result: 'master'
  ##[debug]Evaluating: github.event.pull_request.head.repo.fork
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating Index:
  ##[debug]........Evaluating Index:
  ##[debug]..........Evaluating github:
  ##[debug]..........=> Object
  ##[debug]..........Evaluating String:
  ##[debug]..........=> 'event'
  ##[debug]........=> Object
  ##[debug]........Evaluating String:
  ##[debug]........=> 'pull_request'
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'head'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'repo'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'fork'
  ##[debug]=> true
  ##[debug]Result: true
  ##[debug]Evaluating: steps.glob.outputs.paths-output-file
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'glob'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'paths-output-file'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: inputs.separator
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'separator'
  ##[debug]=> ' '
  ##[debug]Result: ' '
  ##[debug]Evaluating: inputs.path
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'path'
  ##[debug]=> '.'
  ##[debug]Result: '.'
  ##[debug]Evaluating: steps.changed-files-diff-sha.outputs.previous_sha
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files-diff-sha'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'previous_sha'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files-diff-sha.outputs.current_sha
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files-diff-sha'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'current_sha'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files-diff-sha.outputs.target_branch
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files-diff-sha'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'target_branch'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files-diff-sha.outputs.current_branch
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files-diff-sha'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'current_branch'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files-diff-sha.outputs.diff
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files-diff-sha'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'diff'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: inputs.quotepath
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'quotepath'
  ##[debug]=> 'true'
  ##[debug]Result: 'true'
  ##[debug]Evaluating: inputs.include_all_old_new_renamed_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'include_all_old_new_renamed_files'
  ##[debug]=> 'false'
  ##[debug]Result: 'false'
  ##[debug]Evaluating: inputs.old_new_separator
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'old_new_separator'
  ##[debug]=> ','
  ##[debug]Result: ','
  ##[debug]Evaluating: inputs.old_new_files_separator
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'old_new_files_separator'
  ##[debug]=> ' '
  ##[debug]Result: ' '
  ##[debug]Evaluating: inputs.diff_relative
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'diff_relative'
  ##[debug]=> ''
  ##[debug]Result: ''
  ##[debug]Evaluating: inputs.dir_names
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'dir_names'
  ##[debug]=> 'false'
  ##[debug]Result: 'false'
  ##[debug]Evaluating: inputs.dir_names_max_depth
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'dir_names_max_depth'
  ##[debug]=> ''
  ##[debug]Result: ''
  ##[debug]Evaluating: inputs.dir_names_exclude_root
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'dir_names_exclude_root'
  ##[debug]=> 'false'
  ##[debug]Result: 'false'
  ##[debug]Evaluating: inputs.json
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'json'
  ##[debug]=> 'false'
  ##[debug]Result: 'false'
  ##[debug]Evaluating: steps.glob.outputs.has-custom-patterns
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'glob'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'has-custom-patterns'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: inputs.json_raw_format
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating inputs:
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'json_raw_format'
  ##[debug]=> 'false'
  ##[debug]Result: 'false'
  ##[debug]Evaluating condition for step: 'run'
  ##[debug]Evaluating: success()
  ##[debug]Evaluating success:
  ##[debug]=> false
  ##[debug]Result: false
  ##[debug]Evaluating condition for step: 'run'
  ##[debug]Evaluating: (success() && (inputs.write_output_files == 'true'))
  ##[debug]Evaluating And:
  ##[debug]..Evaluating success:
  ##[debug]..=> false
  ##[debug]=> false
  ##[debug]Expanded: (false && (inputs['write_output_files'] == 'true'))
  ##[debug]Result: false
  ##[debug]Evaluating: steps.changed-files.outputs.added_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'added_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.copied_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'copied_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.deleted_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'deleted_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.modified_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'modified_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.renamed_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'renamed_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.all_old_new_renamed_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'all_old_new_renamed_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.type_changed_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'type_changed_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.unmerged_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'unmerged_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.unknown_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'unknown_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.all_changed_and_modified_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'all_changed_and_modified_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.all_changed_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'all_changed_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.any_changed
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'any_changed'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.only_changed
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'only_changed'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.other_changed_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'other_changed_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.all_modified_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'all_modified_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.any_modified
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'any_modified'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.only_modified
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'only_modified'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.other_modified_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'other_modified_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.any_deleted
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'any_deleted'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.only_deleted
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'only_deleted'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Evaluating: steps.changed-files.outputs.other_deleted_files
  ##[debug]Evaluating Index:
  ##[debug]..Evaluating Index:
  ##[debug]....Evaluating Index:
  ##[debug]......Evaluating steps:
  ##[debug]......=> Object
  ##[debug]......Evaluating String:
  ##[debug]......=> 'changed-files'
  ##[debug]....=> Object
  ##[debug]....Evaluating String:
  ##[debug]....=> 'outputs'
  ##[debug]..=> Object
  ##[debug]..Evaluating String:
  ##[debug]..=> 'other_deleted_files'
  ##[debug]=> null
  ##[debug]Result: null
  ##[debug]Finishing: Get changed files

Anything else?
No response
Code of Conduct

[X] I agree to follow this project's Code of Conduct

Hi @Ansuel this should now be resolved in the latest release

@jackton1 can confirm the new release correctly fixed the bug! Thanks for the quick fixup!


text:
🛑 id.tjo.space is down

In 67fc1b5, id.tjo.space (https://id.tjo.space) was down:

HTTP code: 0
Response time: 0 ms

Resolved: id.tjo.space is back up in bf44f46.

repo: tjo-space/status


text:
🛑 SITE_TOK is down

In c973ceb, SITE_TOK ($SITE_TOK) was down:

HTTP code: 502
Response time: 3800 ms

Resolved: SITE_TOK is back up in 9e5d5b9.

repo: tjsky/upptime


text:
🛑 SITE_MS is down

In 813cab1, SITE_MS ($SITE_MS) was down:

HTTP code: 0
Response time: 0 ms

Resolved: SITE_MS is back up in b778407.


text:
Allow menu widget to have items displayed horizontally instead of only vertically.

Take a look at menu.cpp and menu.h. Implement logic to display items in multiple columns. Currently, appending an item will always have the item displayed below previous items. Add a second parameter to the append_item function as is done in the menu constructor. The default value can be "none". When the parameter is equal to "new column", the item should be displayed at the top of a new row to the right instead of being added to the bottom of the previous row. Track the row and column of an item when it is appended so that it can be displayed in the proper location. When moving right or left in get_selection function, if the row of the old column exists in the new column, then keep the row the same, otherwise, make the row be the bottom row of the new column. Use the following code in a main function as an example for testing purposes. You will have to add initialization functions for ncurses.
#include "ascii_board.h"
#include "ascii_io.h"
#include "frame.h"
#include "text_box.h"
#include "menu.h"
#include "error_codes.h"
#include "controls.h"
#include "label.h"

int main()
{
    frame* test_frame = new frame();
    ascii_io::hide_curser();
    text_box test_text_box(test_frame, "none", 10);
    test_text_box.set_spacing(3, 3, 10, 10);
    test_text_box.set_horizontal_border('*');
    test_text_box.set_vertical_border('#');
    test_text_box.set_corner_border(',');
    test_text_box.add_border();

    label test_label(test_frame);
    test_label.set_spacing(1, 1, 10, 10);
    test_label.add_border();
    test_label.set_output("This is a test for the label.\nDoes it work well?");

    text_box test_text_box3(test_frame, "merge", 2);
    test_text_box3.set_spacing(1, 1, 10, 10);
    test_text_box3.add_border();
    text_box test_text_box4(test_frame, "merge", 2);

    test_text_box4.set_spacing(1, 1, 10, 10);
    test_text_box4.add_border();
    menu test_menu(test_frame, "new line");
    test_menu.append_item("1");
    test_menu.append_item("2");
    test_menu.append_item("exit");
    test_menu.set_alignment("center");
    test_menu.add_border();
    unsigned int command = 0;
    std::string menu_selection = "";
    while (menu_selection != "exit")
    {
        int id = test_frame->get_selection();
        if (id == test_text_box)
        {
            command = test_text_box.write();
        }
        else if (id == test_text_box3)
        {
            command = test_text_box3.write();
        }
        else if (id == test_text_box4)
        {
            command = test_text_box4.write();
        }
        else if (id == test_menu)
        {
            menu_selection = test_menu.get_selection();
        }
        ascii_io::hide_curser();
    }
}

Menu allows scrolling instead.


text:
Error requiring lib with webpack

Hi,
First of all thanks for your work.
I'm using webpack to build my client-side app, and it fails building the bundle doing require('sails-backbone-client'). The library version is 0.11.15, installed via npm install sails-backbone-client --save.
This is the webpack error when I do var BackboneClient   = require('sails-backbone-client');  on the client side:
ERROR in ./~/sails-backbone-client/~/anchor/~/geojsonhint/~/jsonlint-lines/lib/jsonlint.js
Module not found: Error: Cannot resolve module 'fs' in [project_path]/node_modules/sails-backbone-client/node_modules/anchor/node_modules/geojsonhint/node_modules/jsonlint-lines/lib
 @ ./~/sails-backbone-client/~/anchor/~/geojsonhint/~/jsonlint-lines/lib/jsonlint.js 648:17-30

Since the problem seems to be in Anchor dependencies, I tried to update it in my sails-backbone-client fork, but the problem still exists.
If I require directly the parser, the bundle compilation works fine, and I receive the models on the client:
var SailsBackboneParser   = require('sails-backbone-client/lib/parser');
$.get('/backbonemodel', function(data) {
  app.models = SailsBackboneParser.parse(data, {url: 'http://localhost:8000/backbonemodel'});
  console.log(api.models);   // Models and collections OK
});

I didn't tried with browserify since I'm already using webpack.
Since I'm new to webpack, I don't know if I may require a package telling it to not consider dependencies such as node fs. I'll dig more into it.
Regards,
Matteo

Just an update. Since I don't load the whole library, I actually don't use the BackboneClient.create() function, thus what I print in the previous console.log are not actual Backbone models.

I resolved the inclusion errore adding the following to the webpack config
node: {
  fs: 'empty'
},

repo: tjwebb/sails-backbone-client


text:
Feature Request - Extract Files to Current Directory 提取文件到当前目录功能请求

Issue Description/问题描述:
I have encountered a scenario where the file structure within some compressed files includes an additional folder. As a result, when I extract such files, a folder with the same name as the compressed file is created, and it contains the original folder structure from the compressed file.
如果压缩文件中的文件结构的根目录 是一个与压缩文件同名的文件夹。当我解压这样的文件时，会创建一个与压缩文件同名的文件夹，它包含了来自压缩文件的原始文件夹结构。
The results are as below:
结果如下：
.
├── file
│   └── file
│       └── TextFile.txt
└── file.zip

Feature Request/功能请求:
I would like to propose an enhancement to the plugin's file extraction behavior. Specifically, I suggest implementing a check to determine whether the file structure within the compressed file consists of a single file at the root level, sharing the same name as the compressed file. If such a scenario is detected, the plugin should extract the file directly to the current directory instead of creating an additional folder. On the other hand, if the file structure includes multiple files or folders, the plugin should continue creating a new folder and extracting the contents accordingly.
我建议对插件的文件解压行为进行增强。具体而言，我建议在解压缩过程中检查压缩文件内的文件结构是否只包含一个与压缩文件同名的文件位于根目录。如果检测到这种情况，插件应该直接将文件解压缩到当前目录，而不是创建额外的文件夹。另一方面，如果文件结构包含多个文件或文件夹，插件应该继续创建新的文件夹并相应地进行提取。
Or maybe adding a feature that allows extracting the files directly to the current directory instead of creating a new folder.
或者可以增加一个功能，允许直接将文件提取到当前目录，而不创建新的文件夹。

合理的做法是源文件是怎样的结构解压之后就应该是怎样的结构，不应该搞一些黑魔法，issue 先留着，如果别人也有同样的需求再考虑实现。


text:
Error

Your example gives this error:

Got the same error!

As you can see .devcontainer, this repository is intended to use Python3.10.
The error message you provided, TypeError: unsupported operand type(s) for |: 'type' and 'NoneType', suggests that you're trying to use the | (bitwise OR) operator with operands that are not supported. Specifically, one of the operands seems to be of type and the other is NoneType.
The common mistake is often seen in the context of Python type hints, especially in Python 3.9+ when using the new union operator | for type hinting.
Ensure that you're using Python 3.9 or newer.

Hi! I am using Python 3.9.18 and getting the same error. The Pypi page explicits the need of Python>=3.6, please update it to a minimum working version.

authors: NicolaGugole jvollmuller-risk pfvbell tk42


text:
multi-label classification

Hello! I have a problem with a multi-label classification.
I changed loss = tf.nn.sigmoid_cross_entropy_with_logits(logits=preds, labels=labels) and correct_prediction = tf.equal(preds, labels) in metrics.py .
And use  tf.nn.sigmoid(self.outputs) to predict in models.py.
Do you think it is ok, or you have other suggestions?
Thank you!

Looks good to me on first glance. Make sure that the function
tf.nn.sigmoid_cross_entropy_with_logits receives logits and not outputs
from a sigmoid.
On Tue, May 28, 2019 at 4:48 PM Chengmeng94 notifications@github.com
wrote:

Hello! I have a problem with a multi-label classification.
I changed loss = tf.nn.sigmoid_cross_entropy_with_logits(logits=preds,
labels=labels) and correct_prediction = tf.equal(preds, labels) in
metrics.py .
And use tf.nn.sigmoid(self.outputs) to predict in models.py.
Do you think it is ok, or you have other suggestions?
Thank you!
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/tkipf/gcn/issues/119?email_source=notifications&email_token=ABYBYYCTI4XMEB2T5WB5MP3PXXAETA5CNFSM4HQH6KH2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4GWLGZHQ,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABYBYYAQSAPF33T37RBGW2LPXXAETANCNFSM4HQH6KHQ
.

It seems that correct_prediction only have 'false's because of preds is always decimals while label is 0 or 1(for binary classification)?

It seems that correct_prediction only have 'false's because of preds is always decimal while label is 0 or 1(for binary classification)?

I think that for multi-label tasks, only the correct prediction for all the labels  can be considered as correct predictions. The following is the code I modified, welcome to discuss.
def masked_accuracy(preds, labels, mask):     """Accuracy with masking."""     # correct_prediction = tf.equal(tf.argmax(preds, 1), tf.argmax(labels, 1))     correct_prediction = tf.equal(preds, labels)     c = np.empty((correct_prediction.shape[0],), dtype=np.bool)     for i in range(correct_prediction.shape[0]):         if False in correct_prediction[i]:             c[i] = False         else:             c[i] = True     accuracy_all = tf.cast(c, tf.float32)     mask = tf.cast(mask, dtype=tf.float32)     mask /= tf.reduce_mean(mask)     accuracy_all *= mask     return tf.reduce_mean(accuracy_all)

It seems that correct_prediction only have 'false's because of preds is always decimal while label is 0 or 1(for binary classification)?

I think that for a node, in a multi-label task, all labels should be predicted correctly. The following is the code I modified, welcome to discuss.
`
def gettoplist(ytest):
y_test = [[] for _ in range(ytest.shape[0])]
cy = sparse.coo_matrix(ytest)
for i, j in zip(cy.row, cy.col):

    y_test[i].append(j)

toplist = [len(l) for l in y_test]

return toplist

`
`
def makeCC(top_k_list,A,probs):
CC = np.zeros([A.shape[0],A.shape[1]],dtype = 'float32')
for i, k in enumerate(top_k_list):

    probs_ = probs[i,:]

    labels = probs_.argsort()[-k:].tolist()

    for l in labels:

        CC[i][l] = 1

return CC

`
`
def masked_accuracy(preds, labels, mask):
"""Accuracy with masking."""

# correct_prediction = tf.equal(tf.argmax(preds, 1), tf.argmax(labels, 1))

toplist = gettoplist(labels)

CC = makeCC(toplist,labels,preds)

correct_prediction = tf.equal(CC, labels)

c = np.empty((correct_prediction.shape[0],), dtype=np.bool)

for i in range(correct_prediction.shape[0]):

    if False in correct_prediction[i]:

        c[i] = False

    else:

        c[i] = True

accuracy_all = tf.cast(c, tf.float32)

mask = tf.cast(mask, dtype=tf.float32)

mask /= tf.reduce_mean(mask)

accuracy_all *= mask

return tf.reduce_mean(accuracy_all)

`

You should threshold the output of the sigmoid (preds) before comparing
it to the binary labels.
On Wed, May 29, 2019 at 4:48 AM Chengmeng94 notifications@github.com
wrote:

It seems that correct_prediction only have 'false's because of preds is
always decimal while label is 0 or 1(for binary classification)?
I think that for a node, in a multi-label task, all labels should be
predicted correctly. The following is the code I modified, welcome to
discuss.
`
def gettoplist(ytest):
y_test = [[] for _ in range(ytest.shape[0])]
cy = sparse.coo_matrix(ytest)
for i, j in zip(cy.row, cy.col):
y_test[i].append(j)

toplist = [len(l) for l in y_test]
return toplist
`
`
def makeCC(top_k_list,A,probs):
CC = np.zeros([A.shape[0],A.shape[1]],dtype = 'float32')
for i, k in enumerate(top_k_list):
probs_ = probs[i,:]

labels = probs_.argsort()[-k:].tolist()

for l in labels:

    CC[i][l] = 1

return CC
`
`
def masked_accuracy(preds, labels, mask):
"""Accuracy with masking."""
correct_prediction = tf.equal(tf.argmax(preds, 1), tf.argmax(labels, 1))
toplist = gettoplist(labels)
CC = makeCC(toplist,labels,preds)
correct_prediction = tf.equal(CC, labels)
c = np.empty((correct_prediction.shape[0],), dtype=np.bool)
for i in range(correct_prediction.shape[0]):
if False in correct_prediction[i]:

    c[i] = False

else:

    c[i] = True

accuracy_all = tf.cast(c, tf.float32)
mask = tf.cast(mask, dtype=tf.float32)
mask /= tf.reduce_mean(mask)
accuracy_all *= mask
return tf.reduce_mean(accuracy_all)
`
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/tkipf/gcn/issues/119?email_source=notifications&email_token=ABYBYYG4IANWZC4UJIXEX73PXZUPJA5CNFSM4HQH6KH2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWPCFBI#issuecomment-496902789,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABYBYYE7TVSASD4VVSSL53LPXZUPJANCNFSM4HQH6KHQ
.

You can use this, if you are dealing with multi-label,
class Optimizers(object):

    @staticmethod
    def multilabel_optimizer(logits, ground_truth, learning_rate):

        cross_entropy    = tf.nn.sigmoid_cross_entropy_with_logits(logits = logits,
                                                                   labels = tf.cast(ground_truth,
                                                                                tf.float32))
        loss             = tf.reduce_mean(tf.reduce_sum(cross_entropy, axis=1))
        optimizer        = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(loss)

        logits_prob      = tf.nn.sigmoid(logits, name = 'prob')
        predictions      = tf.cast(tf.sigmoid(logits) > 0.5, tf.int32,name='predictions')

        return {
                'loss'      : loss,
                'optimizer' : optimizer,
                'prediction': predictions,
                'log_prob'  : logits_prob
                }

For more detail and models for multi-label classification, check this framework
https://github.com/monk1337/MultiLab

repo: tkipf/gcn


text:
Add demo to render Dataframe as HTML table

This adds a small section in the demo section about rendering tables as HTML.

It looks like the math rendering does not work so great...
"\$\\frac{1}{2}\$" get rendered as $\\sqrt{2\\pi}$\n


text:
Add serve weave() to update and serve weave files

This is a small extension to LiveServer.jl so that it can be easily used for serving Weave.jl files.

Codecov Report

Merging #97 into master will decrease coverage by 3.91%.
The diff coverage is 0%.

@@            Coverage Diff             @@
##           master      #97      +/-   ##
==========================================
- Coverage   88.94%   85.02%   -3.92%
==========================================
  Files           4        5       +1
  Lines         217      227      +10
==========================================
  Hits          193      193
- Misses         24       34      +10

Impacted Files
Coverage Δ

src/LiveServer.jl
100% <ø> (ø)
:arrow_up:

src/weave.jl
0% <0%> (ø)

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 6a73ed0...e9c15b3. Read the comment docs.

Thanks a lot for this!
I'm very glad this worked well for you and it'll definitely be useful to people. However the requirement to have Weave (or Literate) is a killer.
I believe it's possible to remove it by having the Weave.weave command be evaluated instead of written as it is now (we don't want to use lazy loading either). I'll have a look into this over the weekend.
Thanks again for this PR!

is this going somewhere?

@Moelf I'm not pushing this specifically as you can use Weave via Franklin which has a similar effect (see https://franklinjl.org/demos/#015_using_weave and the code)
The comment above still holds, I don't want to add dependencies to LiveServer, so for this kind of support the path should be to provide an evaluation function for specific files (i.e. when a specific file is seen as changed, it triggers a function of that file then shows the output).
I'm happy to review a PR to this effect and help in discussions but I currently don't have bandwidth to push this myself

I think this should be something provided by Weave.jl tbh.

authors: Moelf codecov-io mpf tlienart


text:
Add support for AWS Athena

AWS just announced Athena (wow the project names really work well together here just randomly). This just may solve the one outstanding serverless concern - database. Opportunity for a serverless ORM here.
By storing JSON in S3 and querying it via Presto wih Athena, it just may be possible to build a completely serverless application.
I need to look into the costs and feasibility and performance...But $5/terabyte scanned? That may not be so bad. If your average web application database is only a couple hundred megabytes, that's really cheap. Plus there's caching and other solutions such as DynamoDB. So it just may work well.
Or maybe not. Either way, something to investigate.

Probably way too ambitious for now. At least to "do right" because one goal would be to lower costs and use a columnar storage format like Parquet (along with compression). The problem is the packages for Orc and Parquet for Go are basically non-existent. So there's a lot of work to build something there unfortunately (that just takes away from other things).
Moreover, the Go AWS SDK doesn't yet have anything for Athena. So users may sill be left to do some things in AWS console which isn't a good experience here.
You can connect to Athena with a JDBC driver, so that should probably be ok for Go...But I imagine there will still be a bit more work than it sounds like.
Querying Athena is pretty great. I saw it scan 13GB with pretty darn good speed. I think it'll be a really nice pairing with Lambda. Though writing will be one thing while querying will be a different. So it could certainly benefit from some sort of abstraction, but it does sound like a big undertaking.
I also wonder if by the time I can even get to it, someone else would have built something with Go for Athena. So it may just pay to wait and see how everything matures.

I think this makes more sense as a separate project. It can then be used with anything.

repo: tmaiaroto/aegis


text:
Chess: Move H5 to G6

Please do not change the title. Just click "Submit new issue".

@tmchuynh done! Successfully played move h5g6 for current game.
Thanks for playing!

repo: tmchuynh/tmchuynh


text:
Adding messages to const object

I am trying to stop people from spelling certain racist words over individual messages. My idea was use regex to spot which messages match spelling, the add them to a constant variable object by pushing the message id as key and the designation of the messages as value.
Actual behaviour:
It seems to skip a message when send by the same person.
An example of a twitch chat
twitch_user : I
twitch_user : I
another_twitch_user : Hello!
twitch_user : I
Script Output :
{
'ea9d46fb-e546-4177-b832-de8af1a1391a': 'I',
'8bb27e58-9452-4ba6-b50a-e44f74941ec8': 'I'
}
Problem : The middle "I" is skipped while the other 2 are added to the object as expected.
When I try to output the message id to the console, the message id changes with each message.
client.on("message", (channel, userstate, message, self) => {
	if (self) return;

	switch(userstate["message-type"]) {
		case "chat":
			if(i_character.test(message)) {
				if (!entries.hasOwnProperty(userstate.id)){
					Object.assign(entries, {[userstate.id]: "I"});
				}
			}
               break;
	}
});

Expected behaviour:
I would like for new messages that match that regex to be pushed into this constant object every single time.
Error log:
{
  'ea9d46fb-e546-4177-b832-de8af1a1391a': 'I',
  '8bb27e58-9452-4ba6-b50a-e44f74941ec8': 'I'
}

Server configuration

Operating system: MacOS Big Sur Version 11.0.1
Node version (if applicable): v15.3.0
NPM version (if applicable): 7.0.14
tmi.js version: 1.5.0

You may have a case of duplicate messages not being sent by "twitch_user". I'm not sure how you're doing your testing. 🤷
You probably don't need to test the message-type of the message. If you're pulling that from documentation that was just demonstrating how to differ between types of messages. You'll probably want to compare action messages too and whisper messages will be difference in other ways. You'd be trying to moderate the broadcaster from a whisper which you could otherwise ignore. (Especially with such low usage).
client.on('message', (channel, tags, message, self) => {
    if(self) return;
    if(regex.test(message)) {}
});

A Map object map be more suitable than overengineering assigning to an object.
This doesn't seem to be an issue with tmi.js so I'm going to close it.

authors: AlcaDesign gzachariadis


text:
🛑 Portal 1 is down

In a81759e, Portal 1 (https://portal1.hcmus.edu.vn/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Portal 1 is back up in aa19ba9.

repo: tmkhiem/hcmus-web-uptime


text:
tmuxinator crashes tmux and causes graphical issues with two fullscreen apps

Describe the bug
Graphical glitches and sometimes tmux crashes
To Reproduce
I've got a tmuxinator config defined very simply as
name: test
root: ~/helm-charts

windows:
  - editor:
      layout: main-horizontal
      panes:
        - # Shell
        - # Shell

When I run a full-screen app (such as running less in pager mode, or vim) in the top pane, and then run a full-screen app in the bottom pane, it starts screwing things up graphically:

If I run a cat in the second pane and the contents are larger than what would fit into the pane, the whole tmux server crashes:
[lost server]

Expected behavior
No graphical glitches or crashes.
I'm able to repeat these same steps in vanilla tmux and it works just fine there
Environment

tmuxinator Version: tmuxinator 1.1.0`
tmux Version: tmux 2.9a
Ruby Version: ruby 2.4.6p354 (2019-04-01 revision 67394) [x86_64-darwin16]
OS: macOS mojave
iTerm: Build 3.3.3beta2

Exactly same issue with both graphical glitches in Neovim and semi-random crashes of whole Tmux server

@chrisjohnson It's unfortunately not a tmuxinator bug. I managed to repeat it with manually launched tmux window with couple splits.
After couple layout changes  using next-layout, a prompt for currently active window (usually bottom/left) became glitched and overlayed over status bar. Running a $ yes and stopping it with Ctrl+C repeatedly causes [lost server].
If run with tmux -vvv the tmux-server log file ending line is
fatal: tty_clamp_area: y too big, 4294967295 > 0
Several other persons are having exact same issue per tmux bugtracker. I suggest the tmuxinator bug report is closed and we continue watching/discussions upstream.

Thanks for following up, @aleksandrs-ledovskis. I hadn't had a chance to look into this, but figured this probably wasn't a tmuxinator specific issue.
I'm going to close this for now, but feel free to reopen if anyone thinks there's more to discuss here.

Hey guys, I know this is not a tmuxinator issue per se, but I still got the same exact same issue as op using main-horizontal layout. Not sure if the value for that layout is standard tmux or you guys wrote it.
Anyway, if you're experiencing this issue the best course of action I would recommend is to manually create the layout you want, then extract it using the instructions here: https://stackoverflow.com/questions/9812000/specify-pane-percentage-in-tmuxinator-project/9976282#9976282
After I did this I managed to go around this issue.

Side note, is it possible to create and reuse layouts? The only solution I can think of (not tmuxinator related) is to export it as an variable in my zshrc and have tmuxinator call it using erb.

@rnmp

I still got the same exact same issue as op

If you mean crash, you need to report it upstream to tmux

@aleksandrs-ledovskis I saw that homebrew declined your PR to add the patch there, has it made it into the 2.x branch of tmux yet? I recently got a new machine and I remember having to re-apply your patches to get the 2.x branch to work

@chrisjohnson The latest version (3.0a / available in Homebrew) includes both fixes and resolves the crashes for me.

    WARNING: You are running tmuxinator with an unsupported version of tmux.
    Please consider using a supported version:
    (2.9a, 2.9, 2.8, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2, 2.1, 2.0, 1.9, 1.8, 1.7, 1.6, 1.5)```

I think the reason I was on 2.9a is that tmuxinator warns that 3.x is not supported. That's why I was excited when I saw your PR to homebrew to backport your fixes into the 2.9x branch. I'm curious if you think it's not worth backporting the fixes to the 2.9a branch

tmuxinator warns that 3.x is not supported

Update your tmuxinator installation. Since couple of days the 3.0a is supported and won't cause warnings.

Thanks!

authors: aleksandrs-ledovskis chrisjohnson ethagnawl rnmp

repo: tmuxinator/tmuxinator


text:
Working with SafetyInfo

I am trying to get a SafetyInfo element added to an L5X, and then add a list of SafetyTagMaps. I think I am able to get the SafetyInfo created with an xElement representing the tag maps, but I'm having difficulty figuring out how to incorporate that SafetyInfo into the L5X.
What is the correct way to incorporate the SafetyInfo object?

SafetyInfo is a property of the Controller component. You can access the Controller from the L5X and then get/set the SafetyInfo property.
var content = L5X.Load("MyFile.L5X");

var info = content.Controller.SafetyInfo;

content.Controller.SafetyInfo = new SafetyInfo
{
    SafetyLocked = true,
    SafetySignature = "..."
};

content.Save("UpdatedFile.L5X");

I have not really tested things like SafetyInfo, Security, or RedundancyInfo for the Controller component so if you have issues let me know.

Ah, ok I see how that works now. It looks like I'll most likely have to build out the structure as an XElement first and then add it to the controller to get the tag maps.
As an example:
<SafetyInfo SafetyLocked="false" SignatureRunModeProtect="false" ConfigureSafetyIOAlways="false" SafetyLevel="SIL2/PLd"> 	<SafetyTagMap> AST_ESTOP=AST_Safety</SafetyTagMap> </SafetyInfo>

Yeah, looks like SafetyInfo is just missing the ability to add tags to the SafetyTagMap element, is that right?
If that is the issue, then I will get that added here at some point, so you don't have to edit the XElement manually.

Yeah, I think that's the only functionality I can see that would really be useful.
That would be awesome, once again I really appreciate your help!

@Ryushi5 Version 2.1.0 adds SafetyTagMap as a property to SafetyInfo. It implements IList<TagName> which gives it the standard list functionality for tag names.
I added a few tests but nothing substantial. If you have issues let me know.

Thank you for the updates! I had to rework my code a little to work with 2.0+
It looks like the SafetyInfo tag is generated near the end of the L5X, and when importing, Studio 5000 shows this error:
Error: Line 16878: Element <SafetyInfo> is in the wrong order. 	RSLogix5000Content/Controller Complete - 1 error(s), 293 warning(s)
If I move the SafetyInfo tag to be right after the Controller tag in the L5X: it imports properly.

Thanks for reporting. I noticed something similar with the AOI component.
I'm currently adding some code to the base LogixElement to allow derived components to specify their element order and whenever a Set method is called, the element will ensure the proper order as required by Studio and defined in the derived class. This will give us a uniform way to handle the ordering of elements and help with preventing these errors.
I'll reply when this update is released.

I have released version 2.2.0. This should take care of element ordering issues. Let me know if this resolves your issues with SafetyInfo.


text:
无法加载正版用户的皮肤

使用场景是这样的：
用yggdrasil-backend搭建了兼容正版登录的认证，然后正版用户使用原版客户端无法加载其他正版用户的皮肤，客户端报错如下：
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: java.security.SignatureException: Signature length not correct: got 256 but was expecting 512
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at sun.security.rsa.RSASignature.engineVerify(RSASignature.java:189)
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at java.security.Signature$Delegate.engineVerify(Signature.java:1219)
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at java.security.Signature.verify(Signature.java:652)
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at com.mojang.authlib.properties.Property.isSignatureValid(Property.java:47)
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.getTextures(YggdrasilMinecraftSessionService.java:134)
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at cev$3.run(SourceFile:104)
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[13:03:05] [pool-2-thread-1/INFO]: [STDERR]: 	at java.lang.Thread.run(Thread.java:748)
[13:03:05] [pool-2-thread-1/ERROR]: Textures payload has been tampered with (signature invalid)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: java.security.SignatureException: Signature length not correct: got 256 but was expecting 512
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at sun.security.rsa.RSASignature.engineVerify(RSASignature.java:189)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at java.security.Signature$Delegate.engineVerify(Signature.java:1219)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at java.security.Signature.verify(Signature.java:652)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at com.mojang.authlib.properties.Property.isSignatureValid(Property.java:47)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.getTextures(YggdrasilMinecraftSessionService.java:134)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at cev$3.run(SourceFile:104)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[13:03:07] [pool-2-thread-1/INFO]: [STDERR]: 	at java.lang.Thread.run(Thread.java:748)
[13:03:07] [pool-2-thread-1/ERROR]: Textures payload has been tampered with (signature invalid)

提供以下链接以供参考：
https://mcauth.nanpuyue.com/profiles/minecraft/c17112cf3f0e44a0be2cf3fd0b5ccd6a
https://sessionserver.mojang.com/session/minecraft/profile/c17112cf3f0e44a0be2cf3fd0b5ccd6a

看样子是签名的问题，请问有选项可以禁用签名么？

是可以禁用的。
删除yggdrasil-backend/src/main/resources下的signature_key.der然后直接运行mvn clean package进行构建即可（构建输出在yggdrasil-backend/target下）。
这可能是一个bug，上面所述作为临时解决方法。我这个周末会看看能不能重现它。

感谢回复。
仔细看了一下，从原理上讲必然会造成这样的情况，对于原版客户端，它会验证签名并且只认官方的私钥签出来的，而我们没有Mojang官方的私钥，如果对从官方获取到的角色信息进行重签名就必然导致原版客户端报错。
禁用签名的话，客户端也会包签名缺失，但是还没测试这样是否能够正常加载皮肤。
所以自己折腾了一下，注释了对正版用户的信息重签名的代码，并替换了authlibagent.jar中的公钥为官方的。算是解决了正版用户皮肤不能加载的问题，但是非正版用户登录的话，正版用户客户端日志里还是会报签名错误。

此外好像官方的签名是用的4096位的秘钥。

这属于我当时设计这个功能时的失误。关于兼容正版的讨论在 #13 。当时我并没有考虑到正版用户显示textures的问题。

酱紫，谢谢～

authors: nanpuyue yushijinhun


text:
Use filter_var for email validation

Replaces RegExp used for email validation with more idiomatic filter_var.

Done, thank you! :)


text:
failed to start notifications server: listen tcp :80: bind: permission denied

I'm only able to run hacompanion as root on my amd64 kubuntu laptop.
If i run it as a user it gives the following error.
daft@Blue-Mage:~$ hacompanion

lots of logs and i think it shows the token so i left it out

2022/08/11 00:17:26 failed to start notifications server: listen tcp :80: bind: permission denied

[homeassistant]
# Generate the token on the /profile page in Home Assistant
token = "###########################"
# The display name of your device in Home Assistant
device_name = "laptop-a"
# Enter the full URL of your Home Assistant instance.
host = "my ip"

[companion]
# New sensor values are sent to Home Assistant at this interval.
update_interval = "15s"
# The location, where all registration information for Home Assistant will be stored on your machine.
# You do not need to change this.
registration_file = "~/.config/hacompanion-registration.json"

#[notifications]
# Where Home Assistant should send notifications to. Make sure to insert your
# local IP address here. Make sure the port is the same as in the `listen` setting below.
push_url = "http://192.168.5.41:8080/notifications"
# The IP and Port where the Notification server on your machine will listen.
# By default listens on port 8080 on all interfaces.
listen = ":8080"

##
## Below are all available senors. Enable/Disable them as needed.
##

# Report the number of processes that are currently accessing your webcam.
# This will send the number as reported by `lsmod | grep uvcvideo`.
[sensor.webcam]
enabled = true
name = "Webcam Process Count"

# Report the CPU temperature of all cores.
# Note: Requires `lm-sensors` package to be installed locally.
[sensor.cpu_temp]
enabled = true
name = "CPU Temperature"
meta = { celsius = true }

# Report the CPU usage of all cores.
[sensor.cpu_usage]
enabled = true
name = "CPU Usage"

# Report the current system uptime since last boot.
[sensor.uptime]
enabled = true
name = "Last Boot"

# Report the current memory/swap usage.
[sensor.memory]
enabled = true
name = "Memory"

# Report the current battery charge.
# In case of multiple batteries, you can set which battery to monitor
# in the meta section. To see available batteries run
# `ls /sys/class/power_supply/`
[sensor.power]
enabled = true
name = "Power"
meta = { battery = "BAT0" }

# Report if the companion process is running on this machine.
[sensor.companion_running]
enabled = true
name = "Companion Is Running"

# Report if this machine has connection to a remote host.
# You can configure which host to ping in the meta section.
#[sensor.online_check]
#enabled = true
#name = "Is Online"
## Available modes are "http" and "ping".
## meta = { target = "192.168.1.1", mode = "ping" }
#meta = { target = "https://google.com", mode = "http" }

# Report the average system load in the last 1m, 5m and 15m.
[sensor.load_avg]
enabled = true
name = "Load Avg"

# Report the audio volume and mute state.
[sensor.audio_volume]
enabled = true
name = "Audio Volume"

## Register a custom sensor that is populated by a custom script.
## See the README for more details on this feature.
# [script.your_custom_script_sensor]
# path = "/path/to/your/script.sh"
## Attributes according to
## https://developers.home-assistant.io/docs/api/native-app-integration/sensors
# name = "Friendly name of your custom sensor"
# icon = "mdi:script-text"
# type = "sensor" # or binary_sensor
## unit_of_measurement = "%"
## device_class = "battery"

#[notifications]

Remove that comment so the listen setting for the notification server is parsed correctly and the server starts on port 8080 instead of 80.  Ports below 1024 require root permissions.
Let me know if this does not solve the issue for you.

Whoops
Op do 11 aug. 2022 09:44 schreef Tobias Kündig @.***>:

Closed #15 https://github.com/tobias-kuendig/hacompanion/issues/15 as
completed.
—
Reply to this email directly, view it on GitHub
https://github.com/tobias-kuendig/hacompanion/issues/15#event-7169421950,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AMYKLXLBZI33WQEJEZO2RYLVYSVOBANCNFSM56GEUNYQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

authors: Bram-diederik tobias-kuendig

repo: tobias-kuendig/hacompanion


text:
Release Date for Code?

Hi there,
I was wondering when you plan to release the code for Gaussian Splatting for dynamic scenes or it will be a B2B research product. Thanks for your amazing work!

Dup of #1

authors: ElenaViewSynthesis tobiasfshr


text:
[hub-mirror] 请求执行任务

{
"hub-mirror": [
"k8s.gcr.io/hyperkube:v1.16.12"
]
}

{
"hub-mirror": [
"ghcr.io/openclarity/apiclarity:v0.14.5"
]
}

repo: togettoyou/hub-mirror


text:
Check new chrome notifications compatibility

Spot if there are any issues with this.

Starting in Chrome 59, now available in Chrome Beta, notifications sent via
chrome.notifications will be shown directly by the macOS notification
system.

There is also supposed to be a migration guide somewhere

Migration guide https://developers.google.com/web/updates/2017/04/native-mac-os-notifications

Notifications are working fine. 👍

authors: LulzAugusto syko

repo: toggl/toggl-button


text:
[FR] Allow image + contents

It will be pretty cool if we can have the image found + the content in the same times.

try notes list
https://github.com/702573N/Obsidian-Notes-List
but it doesn't support sorting or filter (maybe, not sure

Doesn't work as I wanted, as the frontmatter is displayed...
Also, for an unknown reason, sometimes the contents doesn't display.

repo: tokenshift/obsidian-page-gallery


text:
Loading a CPM Avatar in a Singleplayer World with Vivecraft causes crashing issues.

This is just something I've deduced from a Modpack. People who made the modpack said to report it here. Here's the crash log.
crash-2023-10-26_18.23.59-client.txt

Update ViveCraft