Text extractor Text Editor

Description of the new feature / enhancement
When copying text from the screen it would be nice to edit the Text and only copy the necessary text. An implementation could look like this:

enable open editor after select in the settings
Select text on screen
very simple editor pops up
text gets copied
change the text and remove parts that are unnecessary
press ok
text gets copied

Scenario when this would be used?
When formatting text before reusing it. Or only copying relevant text to google for. There are many places where this is usefull. The texteditor coud automatically close on lost focus to not be intrusive.
Supporting information
No response

Is the ask for like highlight boxes where you can deselect it?  /needinfo

Not really.
What I mean is that after coping text a small editor pops up with the text you just copied. There you can verify the result and format it. At the bottom of the edition is a big button "Ok" if you press it the editor closes and the text in the editor is copied to the clipboard.


Web - Chat - Unable to go to search bar using arrow keys

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Navigate to https://staging.new.expensify.com/
Log in with valid account
Сlick on the plus button on the left side of the screen
Choose an option "New chat" or "New group"
Remove cursor from "Search bar"
And using arrow keys

Expected Result:
Able to go to search bar using arrow keys
Actual Result:
Unable to go to search bar using arrow keys
Workaround:
Unknown
Platform:

Where is this issue occurring?

Web

Version Number: <IP_ADDRESS>
Reproducible in staging?: Yes
Reproducible in production?: Yes
Email or phone of affected tester (no customers): any
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://user-images.githubusercontent.com/93399543/187551298-e912787b-7204-45c5-850f-fd62fec0b8de.mp4
Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
View all open jobs on GitHub

Hey @kbecciv, I'm unable to reproduce. Can you confirm which browsers this is happening on?

@stephanieelliott Checking with QA team

@kbecciv did you have any luck trying to reproduce this?

I can reproduce this on Desktop v1.1.96-3.
When you're on the first result and press the up arrow key it loops to the last participant in the search list.
If you're on the last result and press the down arrow key it loops to the first participant in the search list.

Confirmed the reproduction on Web v1.1.96-5 as well.

Upwork job here: https://www.upwork.com/jobs/~01dc046bd601c8a48a

We have a conflicting issue. In the current issue we're saying it should go to the search bar using arrow keys, but in this issue https://github.com/Expensify/App/issues/10127, we're saying it should rotate back to the first/last item in the list?

We have a conflicting issue. In the current issue we're saying it should go to the search bar using arrow keys, but in this issue #10127, we're saying it should rotate back to the first/last item in the list?

I don't think this is issue.
To reproduce it, user manually needs to blur input by clicking somewhere.
By default, input is focused. And pressing arrow up/down keys doesn't affect input focused status.
While pressing arrows and middle item is highlighted, input is still focused and user is still able to type keyword.
This is how it looks after https://github.com/Expensify/App/issues/10127 is fixed by this PR
https://user-images.githubusercontent.com/97473779/188570625-322d6eb0-d3fa-437b-a984-059ccb0967f6.mov

We have a conflicting issue. In the current issue we're saying it should go to the search bar using arrow keys, but in this issue #10127, we're saying it should rotate back to the first/last item in the list?

@tgolen @trjExpensify  Did you get a chance to look my and @vladnobenladen's comment?
I don't think anything needs to be done here, unless there's some other issue such as input not being able to focus.

Yeah, I think taking a more critical look at the behavior that is "expected" in the issue description:

Able to go to search bar using arrow keys

I don't actually think that's something that we want. I think that's a strange UX that I wouldn't expect as a user. I expect that the tab key would get me to the next input (or shift+tab for the previous). I don't think the arrow keys should do that.
I'll go ahead and close this out, but if anyone has a strong desire to reopen it, feel free!


Enable prioritization of certain tasks

Hi,
Not really a bug but more of a suggestion :
It would be great, in my opinion, to have the possibility to add some sort of criticality indicator to certain tasks in my list (maybe a color indicator, an icon or whatever)
Currently i have to read all my tasks and determine which one i should do first, so i think this would be a great time saver
If this is already an existing functionnality and i just didn't see it, please excuse me for the unnecessary issue
But anyway it's a great tool, thanks for your work

nevermind, i just realized i could simply use the tags system to do this

Yes. I think tags are the way to go here.


Fixes vr_slider not scrolling if list item is already selected

Before:
https://user-images.githubusercontent.com/216870/115997762-5bedb980-a5b2-11eb-8fb0-24d961a28787.mp4
After:
https://user-images.githubusercontent.com/216870/115997777-64de8b00-a5b2-11eb-803e-93f64b67d2f8.mp4

nice, that was a little annoying, would be nice to add scroll support with the joystick to this next

Thanks a lot


Destination column types redux

[ch7196]
[ch9155]
[ch8624]

@jsantos17 Yes, we'll want to wait to merge this since it breaks things. I have all the SDBE changes completed and a snapshot released so that integration can be implemented, I'll remove the :stop_sign: here once it is ready to merge.


suggestion: add support for rust

support for rust add now

dude add Rust support

And also, why do you have Go support and not Rust?


[QUESTION] Can't get collection of interface

Hi!
In version 4.1.4 I was able to get interface collection like
jobsDb.GetCollection<IJob>("jobs");

In version 5.0.1 I can't do this - it needs type, not interface.
Why? How to fix it?

Hi @moabtools
I've tried to reproduce your issue, however... I didn't find anything that could be wrong.
You can find the code that I used below (tested against v5.0.2 though) :)
class Program
{
    static void Main(string[] args)
    {
        using var db = new LiteDatabase("test.db");
        var collection = db.GetCollection<IFruit>();
        collection.Insert(new Apple{Amount = 2});
        collection.Insert(new Lemon{ExpiryDate = DateTimeOffset.Now.AddDays(2)});

        var fruitSalad = collection.FindAll().ToList();

        Debugger.Break();
    }
}

interface IFruit
{
    [BsonId]
    Guid Id { get; set; }
}

class Apple : IFruit
{
    public Guid Id { get; set; }
    public string Type => nameof(Apple);

    public int Amount { get; set; }
}

class Lemon : IFruit
{
    public Guid Id { get; set; }
    public string Type => nameof(Lemon);

    public DateTimeOffset ExpiryDate { get; set; }
}

Inspecting the fruitsalad list gives us 1 Apple and 1 lemon object with the correct properties.
Can you let us know if you still have the same issue on 5.0.2? If not, you can close the issue :)

Sorry, it was urgent and I temporary moved to Mongo :) So, if you checked it - I think it works now.


refactored prophet model

Refactored from https://github.com/flojoy-io/nodes/pull/98

From https://github.com/Ben-Epstein/nodes/tree/feat/prophet-plotter


Add Trace Funnel Coresight component

In this PR I implemented a simple graph node for coresight trace funnels.
The TraceFunnel component is quite simple, it reads the number of available channels and enables them all at initialization. The rationale of this choice is that I think that in most of the cases the user wants everything to be working since the beginning.
Channels can be enabled and disabled with the set_enable_channels function, which provides a warning if trying to set more channels than available.
This is show graph output with this patch:
pyocd> show graph
- "board": Board
  - "soc": Mimxrt1176dvmaa
    - "cm7": CortexM
      - DWT
      - FPB
      - ITM
      - TraceFunnel
    - "cm4": CortexM
      - DWT
      - FPB
      - ITM
      - TraceFunnel

Sorry, I just realised… would you mind rebasing and retargeting this to the develop branch? Only fixes are allowed on main. After rebasing, you can edit this PR to modify the merge target branch.

/azp run


Replace TSlint with eslint-plugin-typescript

See: https://eslint.org/blog/2019/01/future-typescript-eslint

This was just released: https://github.com/google/gts

Closing because we're going with gts, which is tslint-based.


@sentry/react does not appear to get fixed

My configuration:
cjsInterop({
  dependencies: ['@sentry/react'],
}),

and I am still getting error:
b8d6ae3d > SyntaxError: [vite] Named export 'withScope' not found. The requested module '@sentry/react' is a CommonJS module, which may not support all module.exports as named exports.
b8d6ae3d > CommonJS modules can always be imported via the default export, for example using:
b8d6ae3d >
b8d6ae3d > import pkg from '@sentry/react';
b8d6ae3d > const {captureException, captureMessage, close, setUser, showReportDialog, withScope} = pkg;
b8d6ae3d >
b8d6ae3d >     at analyzeImportedModDifference (file:///Users/gajus/Developer/contra/gaia/node_modules/.pnpm/vite@5.1.0-beta.2_@types+node@20.10.0_sass@1.69.0/node_modules/vite/dist/node/chunks/dep-BzxBS-ea.js:54262:19)
b8d6ae3d >     at nodeImport (file:///Users/gajus/Developer/contra/gaia/node_modules/.pnpm/vite@5.1.0-beta.2_@types+node@20.10.0_sass@1.69.0/node_modules/vite/dist/node/chunks/dep-BzxBS-ea.js:54213:9)
b8d6ae3d >     at ssrImport (file:///Users/gajus/Developer/contra/gaia/node_modules/.pnpm/vite@5.1.0-beta.2_@types+node@20.10.0_sass@1.69.0/node_modules/vite/dist/node/chunks/dep-BzxBS-ea.js:54108:24)
b8d6ae3d >     at eval (/Users/gajus/Developer/contra/gaia/packages/sentry/src/react.ts:27:13)
b8d6ae3d >     at instantiateModule (file:///Users/gajus/Developer/contra/gaia/node_modules/.pnpm/vite@5.1.0-beta.2_@types+node@20.10.0_sass@1.69.0/node_modules/vite/dist/node/chunks/dep-BzxBS-ea.js:54170:9)
b8d6ae3d > ┌────────────────────────────────────────────────────────────────────────────────────────────────────────┐
b8d6ae3d > │ Error could be a CJS/ESM issue, consider using ssr.noExternal, see https://vike.dev/broken-npm-package │
b8d6ae3d > └────────────────────────────────────────────────────────────────────────────────────────────────────────┘

If it helps, @sentry/react is a dependency of a dependency in the same mono repo, as opposed to a direct dependency.
What debugging information can I provide?
I patched the plugin to produce some debugging information:
      walk(ast, {
        enter(node) {
          if (node.type === "ImportDeclaration") {
            console.log('>>', node.source.value);

            if (matchesDependencies(node.source.value)) {
              toBeFixed.push(node);

              console.log('>', toBeFixed);
            }
          } else if (node.type === "ImportExpression") {
            if (node.source.type === "Literal" && matchesDependencies(node.source.value)) {
              dynamicImportsToBeFixed.push(node);
            }
          }
        }
      });

so it does detect it:
e7686f01 > >> @sentry/react
e7686f01 > > [
e7686f01 >   Node {
e7686f01 >     type: 'ImportDeclaration',
e7686f01 >     start: 45,
e7686f01 >     end: 98,
e7686f01 >     loc: SourceLocation { start: [Position], end: [Position] },
e7686f01 >     specifiers: [ [Node], [Node] ],
e7686f01 >     source: Node {
e7686f01 >       type: 'Literal',
e7686f01 >       start: 82,
e7686f01 >       end: 97,
e7686f01 >       loc: [SourceLocation],
e7686f01 >       value: '@sentry/react',
e7686f01 >       raw: "'@sentry/react'"
e7686f01 >     }
e7686f01 >   }
e7686f01 > ]

A quick test seems to work.

If it helps, @sentry/react is a dependency of a dependency in the same mono repo, as opposed to a direct dependency.

That must be it. By default, Vite doesn't process SSR dependencies. So your direct dependency will not receive the fix. You can try ssr.noExternal like Vike suggests or provide a minimal reproduction so I can have a better understanding of the issue.

You can try ssr.noExternal like Vike suggests or provide a minimal reproduction so I can have a better understanding of the issue.

When adding it to ssr.noExternal, then I am getting error module is undefined.
Will try to read Vite changelog to see what changed. This was working in Vite 5.0.8 and broke after updating to 5.0.12. Must have been a chance in default configuration.

What I was suggesting was to add the direct dependency (which I assumed to be ESM) to ssr.noExternal. CommonJS modules (like @sentry/react) can't be added there without also being added to ssr.optimizeDeps.include (or something).

got it

What I was suggesting was to add the direct dependency (which I assumed to be ESM) to ssr.noExternal.

Just tried. Still the same.
I am going to close this as it seems to be somewhat specific to our environment.
For anyone else running into this issue, I did manage to get it working by simply updating the code to follow this pattern:
https://github.com/facebook/relay/issues/4548#issuecomment-1901133943

I am going to close this as it seems to be somewhat specific to our environment.

Glad you worked it out. Feel free to post a repro if you find the time though :)


[CRM457-630] Disbursements Edit Screen

Description of change
Added Edit screen for disbursements from the Review and adjust tab
Link to relevant ticket
https://dsdmoj.atlassian.net/browse/CRM457-630
Screenshots of changes

##Todo:

[x] Fix forms Save issue
[x] Fix translation for the radio
[x] Update rSpecs
[x] Remove commented out line 26 in disbursement_form
[x] Add rSpecs tests
[x] Update error translation
[x] Add system test
[ ] Update 'explanation' to previous_explanation

still have concerns about the cost calculator
@dwhenry We can have a quick call to discuss your concern

Can't see the code around not prepopulating the yes no button... assume it in a separate PR...

Yes it would be separate PR


Compile Warning

Building from c81622c5c5313c05eab2da3b5eca6c118b74369e, I'm getting a warning during compilation.
CC       src/decompress.o
src/decompress.c:51:20: warning: assigning to 'Bytef *' (aka 'unsigned char *')
from 'const void *' discards qualifiers
[-Wincompatible-pointer-types-discards-qualifiers]
stream.next_in = buf;
^ ~~~
1 warning generated.
I'm also getting a "clang: warning: argument unused during compilation: '-pthread'", but I don't think that that's related.
My gcc --version:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.4.0
Thread model: posix

Probably either should remove the comment on the line above (/* Explicitly cast away the const-ness of buf */), or figure out why that cast was added in the first place.

This issue happens after merging #659


False positive warning about closure isolation but only when argument label is omitted

Description
The compiler changes its diagnostic depending on whether a closure argument is declared with or without argument label.
Reproduction
struct SUT {
    func run1(completion: sending @escaping () -> Void) { }
    func run2(_ completion: sending @escaping () -> Void) { }
}

@MainActor
func test_run() {
    let sut = SUT()

    // No warning
    sut.run1 { }

    // Main actor-isolated value of type '() -> ()' passed as a strongly
    // transferred parameter; later accesses could race
    sut.run2 { }
}

This is very confusing.
Expected behavior
No warning in both cases.
Environment
% swiftc -version
swift-driver version: 1.112.3 Apple Swift version 6.0 (swiftlang-<IP_ADDRESS>.8 clang-16<IP_ADDRESS>)
Target: arm64-apple-macosx14.0
Additional information
No response

Related: #75521

@groue so this doesn't reproduce on main anymore. It was fixed in
tags/swift-DEVELOPMENT-SNAPSHOT-2024-08-28-a..tags/swift-DEVELOPMENT-SNAPSHOT-2024-08-29-a.
So one of these commits:
406b8bd8921 Merge pull request #76133 from slavapestov/sync-local-func-isolation
543fd214940 Merge pull request #76125 from ian-twilightcoder/unknown-platform-attr
8503f72b11e Merge pull request #76111 from tshortli/lazy-typecheck-lazy-var-in-inlinable-func
dfa60a1c809 Merge pull request #76101 from kateinoigakukun/yt/update-swift-collection-113
3436c49ee43 Merge pull request #76123 from hamishknight/a-form-of-expression
6465bdc6e13 Merge pull request #76042 from xedin/rdar-133415157
00eee36ea72 Merge pull request #76115 from xedin/rdar-131524246

Thank you @gottesmm :-) Glad the bug is fixed in the latest snapshot, because it is still there in Xcode 16.1 beta 3. #75521 is a similar issue.


Play genres

This commit adds the ability to play a random selection of songs (limited by tracks count setting) from a specific genre.
I added an intent with multiple utterances.
I changed the random_tracks function in utils/subsonic/api.py to accept a genre.
I tested on my echo dot.

oops, I don't see why it added the commits from the first branch again. What should I do?


Fixed slack notifications on main workflow

Description
Changes proposed in this pull request:

Fixed slack notifications on main workflow, needs duplicate

Related issue(s)

/test pull-api-gateway-integration-aws


Allow for portable AMD modules in the browser

pr for issue #45

Thanks for the PR!

Released as 1.2.0: https://www.npmjs.com/package/cronstrue


Url Image element with vertical fit content should occupy minimum height

Description
An image with vertical fit content should occupy minimum height.

Snippet
BlUrlImageElement new
	url: 'https://pbs.twimg.com/media/Et3PF5SWgAI1TcM.jpg';
	border: (BlBorder paint: Color red width: 1);
	constraintsDo: [ :c |
		c horizontal matchParent.
		c vertical fitContent ].

The correct height on vertical fit content

The correct height on vertical match parent


Create Unreal Tournament installer.

This will install Unreal Tournament 99 for x86, amd64, and arm64.  I haven't tested arm64.  Don't have a arm64 install available right now.

ill give it a try once im back on my pi5,

It occurred to me, please wait a little before testing.  I did use some variables that are defined in this patch:
https://www.github.com/RetroPie/RetroPie-Setup/pull/3951?notification_referrer_id=NT_kwDOALuzzbQxMTUzNTQxODIwMzoxMjMwMTI2MQ#issuecomment-2251316568

installs fine, i need to find the game files to test it all the way

i edited my config and i now get this
``
Parameters:
Executing: /opt/retropie/ports/ut/SystemARM64/ut-bin
WARNING: using preference directory: /home/pi/.utpg/System/
WARNING: Using system ini file: /opt/retropie/configs/ports/ut/System/UnrealTournament.ini
WARNING: Using user ini file: /opt/retropie/configs/ports/ut/System/User.ini
Failed to enter Entry: Can't find file Entry.
History: UGameEngine::Init <- InitEngine <- main
Exiting due to error
``
not sure if im missing a file or what

I'll look into both.  The file I thought was supposed to be auto-generated on first run.

I've updated the installer to add ARM64.
Will you please run the installer again and let me know if it works.
If it works, I suspect it's a problem caused by:
"Make sure you do not overwrite the Texture files that came with the patch, otherwise the in-game text will render incorrectly."  and "Please ensure that you do NOT copy the contents of the System directory in your cd/GoG image into the game directory, otherwise the game will not launch!" from https://github.com/OldUnreal/UnrealTournamentPatches
I tried to set it up so that the files when moved would remain owned by root to try and prevent that.

If that works, I may change it to not move the System directory.  That may prevent the problem in the future.  I did it the way I did so that people could add new files if necessary while trying to set it up so they couldn't overwrite the existing files.  That may not work as well as I wanted.  And I am not sure if it will ever be necessary to add files to the system directory.

I am not sure if it will ever be necessary to add files to the system directory

its something that we can test.
yes i was confused at first by the folders being locked, but i do see why you did it.
i say lets getting it working, and then worry about cleaning it up and making it dummy proof (as much as we can)

Okay, I've removed the 'System' directory from the list of directories that are moved, and tested it that way.  The game runs perfectly without moving the directory.  This way people won't overwrite anything in there.
At this point I am thinking unless someone has any trouble because they can't add files to the system directory to simply leave it alone.
The single Texture file is the only one of concern at this point for dummy proofing (and I added a note in the Help file for that.)

Unreal Tournament 2004 is a separate game.  I plan on creating a script for that once this is working.

separate game

ok, i didnt know if it was a remake release or what. i only played the first UT, after that i was rocking HalfLife. lol

Half life was great too!
UT2004 will be x86 only.  The source for that was never completely released, so even today to run it you're running the last patched binaries that were compiled 2004ish.
It is possible to modify UnrealTournament.ini (or User.ini I forgot which) to enable online play again for both games.  I decided that was a bit out of the scope for this script.  Although I did set up an ansible playbook that works with RetroPie and can update the files correctly.  Still very much a WIP https://github.com/hearthminion/ansible-collection-games/tree/develop/roles/unrealtournament
The original Unreal is also available for linux (and ARM not sure if it requires 64bit or not).

so are all the folders ment to be set to root? if they are, then there is no way to get the game files in
do i need to have the game data already in the ut folder before its installed?
when i tryied it by having the game files in the ut before i install
i get
arameters:
Executing: /opt/retropie/ports/ut/SystemARM64/ut-bin
[ALSOFT] (EE) Could not query RTKit: No such file or directory (2)
[ALSOFT] (EE) Could not query RTKit: No such file or directory (2)
[ALSOFT] (EE) Could not query RTKit: No such file or directory (2)

I'll check.  It occurred to me, since we decided to stop the dummy proofing for now at least, I probably want to check the permissions again.

As for when the permissions patch, it was only added in the last few days.
I was impressed with how fast you were on this after they added it. I hadn't even gotten around to double checking everything since they added it.

Yeah I get bored at work. So I'm always learking around GitHub and the forum. So I saw that it was added not too long ago

So now, as long as you have at least commit d67e88db (and probably better 18c2b430 from two days ago) on RetroPie-Setup then this should set the permissions properly throughout.

ok, so i dont have a PC to test this on, but i can make it work on my Pi5,
it does work, but does not work on the Pi5 well. ( which is fine)
so this script is fine to go, and we just keep it for x86 only

I'm good with that.
I was hopeful that as old as it was, that it'd work well on a pi5.  Did you put XINIT in front of the command to get it to work.  I'm thinking I'll add that, so if/when the pi 6 comes out we already have it ready to try without having to remember exactly what we did to get it to work before.

Also, will you please do another couple tests:

In /opt/retropie/ports/ut/Systme64 make a backup of libSDL2.0.so.0 and symlink the system libSDL2.0.so.0

I may have the names slightly off.  That's usually a fix for a bug on x86 when using multiple monitors, so I wasn't planning on putting it in here, but if it helps I might.

If that doesn't work, You may need to edit the ini file to change the resolution.

I stumbled across this:
https://www.github.com/OldUnreal/UnrealTournamentPatches/issues/1479
They were having some font issues (which it doesn't sound like you have) but said otherwise the game ran well even on a pi3

Okay, so I see a few potential solutions:

Create an UnrealTournament.ini inside our repo that we install with those settings already set.
Add something to the help description that they will need to edit that file with the correct settings for those values.

Option 1, will probably work 90% of the time out of the box.  That is a fairly common resolution.  But considering this is Retropie, that may not be the case.
Option 2 requires more work on the user, but would be more consistent for everyone.
Did you have to remove libSDL and replace it with a symlink?

Did you have to remove libSDL and replace it with a symlink?

i did, and nothing was different
i think what we should do is both option 1 and 2.
1 will be the default and we put in the how to in the help on what lines need to be editied to fix it for the uses setup
one of my scripts i think pulls what resolution is picked and then edits something, but i cant remember what one, and if it will even work for what needs to be down

Okay.  The reason I asked, on my system, 2 monitors the packaged libSDL would overwrite any changes I made to the UnrealTournament.ini resolution settings.
If we're providing our own UnrealTournament.ini we should probably test that too.
One big advantage to providing our own  ini file is I cam go ahead and set the proper multiplayer servers, so people can actually play online.

set the proper multiplayer servers, so people can actually play online.

im down with that

Got a bit busy this week, hoping next week is better. Adding the ini file should be the easy part.

Got a bit busy this week

It all good. There's no rush

Thank you!

thanks for making this


Better formula tracking

When you rename a formula, it should be aware of its previous name. For example, when you removed hyphens from j-downloader and command-q, instead of recognizing the new appropriate names, I get an error message that the casks are not available.

This is connected with other issues (like list being broken), and something that is not forgotten, but should be solved when some restructuring is done, which is part of the near-future goals.


fix: Distance - Start and Stop labels do not change when dragging one over another.

Details

Fixed Issues
$ https://github.com/Expensify/App/issues/44153
PROPOSAL: https://github.com/Expensify/App/issues/44153#issuecomment-2183075314
Tests

Go to FAB > Submit expense > Distance.
Drag empty Stop row over empty Start row.
Verify that the Stop label changes to Start and Start label changes to stop.
Tap on the Stop row.
Select a waypoint.
Verify the waypoint is displayed correctly.

[x] Verify that no errors appear in the JS console

Offline tests

Go to FAB > Submit expense > Distance.
Drag empty Stop row over empty Start row.
Verify that the Stop label changes to Start and Start label changes to stop.
Tap on the Stop row.
Select a waypoint.
Verify the waypoint is displayed correctly.

QA Steps

Go to FAB > Submit expense > Distance.
Drag empty Stop row over empty Start row.
Verify that the Stop label changes to Start and Start label changes to stop.
Tap on the Stop row.
Select a waypoint.
Verify the waypoint is displayed correctly.

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native
https://github.com/Expensify/App/assets/85894871/a5051552-4d6f-4900-bc3d-5d21837168c3

Android: mWeb Chrome
https://github.com/Expensify/App/assets/85894871/1ef40712-180f-43fd-82bb-776b025d7cb3

iOS: Native
https://github.com/Expensify/App/assets/85894871/6ed3764e-4eeb-4a91-901c-86a206424945

iOS: mWeb Safari
https://github.com/Expensify/App/assets/85894871/b4be4749-d0e0-47b6-9489-11806163ff34

MacOS: Chrome / Safari
https://github.com/Expensify/App/assets/85894871/d6221a2f-044d-4322-980f-8032e45c45ed

MacOS: Desktop
https://github.com/Expensify/App/assets/85894871/eb4ab45a-2a3a-422b-879f-ccb8765160cf

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/MonilBhavsar in version: 9.0.7-3 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Cherry-picked to staging by https://github.com/thienlnam in version: 9.0.7-4 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

@Expensify/applauseleads please QA this PR and check it off on the deploy checklist if it passes.

🚀 Deployed to production by https://github.com/thienlnam in version: 9.0.7-8 🚀

platform
result

🤖 android 🤖
failure ❌

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/mountiny in version: 9.0.8-6 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

This PR caused a regression. Quoting https://github.com/Expensify/App/issues/45467#issuecomment-2268894879:

Here waypoints were updated to have a default keyForList key when there is no selected waypoint.
- waypoint0: {},
- waypoint1: {},
+ waypoint0: {keyForList: 'start_waypoint'},
+ waypoint1: {keyForList: 'stop_waypoint'},


Clarify cluster diagram as one possible reference architecture

This PR addresses the concerns raised in issue #47111 regarding the potential misunderstanding of component distribution in Kubernetes clusters, particularly the presence of kubelet and kube-proxy on control plane nodes.

Before
After
I'm not entirely sure how much additional detail is appropriate for this introductory page on cluster architecture. I'm open to removing certain details for brevity if needed. Feedback on the level of detail and which points are most crucial to keep would be greatly appreciated. Also if there is anything I have gotten wrong about cluster architecture, please feel free to correct me.

i think this is a great addition. thanks /lgtm
but not sure if the formatting / indentation is correct.
/assign @tengqm as per your comment on #47111 (comment)
/sig architecture

Thank you for the swift review, @neolit123! I appreciate your feedback on the formatting and indentation. If you're aware of any similar pages with correct formatting, or if you have any specific suggestions for improvement, I'd be grateful for your guidance.

page preview: https://deploy-preview-47164--kubernetes-io-main-staging.netlify.app/docs/concepts/architecture/

would leave the formatting correctness to the docs team.

The latest commit includes the following changes:

Migrated the text from /docs/concepts/overview/components to /docs/concepts/architecture
Added a section to /docs/concepts/architecture on the "Architecture Variations"
Added simple overview to /docs/concepts/overview/components
I'd love any feedback on the overall organization of the content or suggestions on how I can improve the content I added

Latest commit adds some small points of optimization to make the pages mesh more coherently and make the overview more of an overview.

Thanks for adding this! I do think we'll want a review from @kubernetes/sig-architecture-leads for this one

LGTM for docs

/lgtm

The proposed change mentions following under Node Components section: "These components are essential for node operation but are not always considered part of the core control plane". I have one query: in which case are node components (kubelet and kube-proxy) not considered part of the core control plane?

I have one query: in which case are node components (kubelet and kube-proxy) not considered part of the core control plane?

Always. The control plane does not include the kubelet and kube-proxy; see https://kubernetes.io/docs/concepts/overview/components/
You might run the control plane on a computer (or several) computers that are running kubelet, and possibly also running kube-proxy; however, the control plane is still:

kube-apiserver

and a backing store, canonically etcd

kube-scheduler
kube-controller-manager
(optional) a cloud controller manager to integrate with your cloud provider

I've added a follow up commit to fix some remaining issues and improve consistency. I am a little confused what the third-party notice is targeting so perhaps that is worth double checking. Thanks for the feedback!

@sftim : That's much clearer. Thanks.
However, if that's the case then shouldn't the revised doc mention:
"These components are essential for node operation but are never considered part of the core control plane"
instead of
"These components are essential for node operation but are not always considered part of the core control plane"?

“never“ feels correct to me @GarbageYard

/lgtm
/label tide/merge-method-squash

This is a really good addition @robert-cronin, thanks so much for writing it up!
(and thanks to all the reviewers too)
/approve

Thank you so much, @nate-double-u, and thanks to all the commenters and reviewers! 😊


Add Chat UI functionality

This PR contains:

New chat UI with courses and study groups messages display and sending.
Rest API for getting and posting messages (using djangorestframework).
Tests for the API.

fixes #102

Out of curiosity, why did you use Django rest instead of something like in the msgboard?
Also, could we add some tests here? what about tests for unauthorized or guest users? or checking the response status code?

I added and updated the tests.
The reason for Django rest is because the page is dynamic, I needed to know which chat is currently selected so I used js and then since I had all the data in the js I wanted to create a post request (to add a new message) and this is how I found out about django rest.


JetBrains: Integrate with IdeaVim by adding : colon commands to generate code and edit/refactor a specified range

Validations

[x] I believe this is a way to improve. I'll try to join the Continue Discord for questions
[x] I'm not able to find an open issue that requests the same enhancement

Problem
Currently the UX is not ideal for IdeaVim users, many productivity gains are possible by adding native IdeaVim commands that allow interfacing with continue.dev
Solution
Implement commands e.g.
:ContinueGenerate a function which
:'<,'>ContinueEdit refactor this code and document it

It's very important to ensure that it continues to work in recorded macros & keymaps. See the following IdeaVim plugins for inspiration on how it can be integrated. https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins

@oxysoft I like this. Are you interested in keymappings through IdeaVim to the existing actions (select code as context and focus the input box), in custom keymappings, decided by the user, or just a few more pre-decided shortcuts, like "comment code", "write docstring", etc...?

Hi, can you clarify? It's not entirely clear what you mean. In Vim, keymaps are simply sequences of inputs to play, so the commands I showed above can be mapped directly as mappings. These functionalities must be usable with and without the chat window. My preferred way to use it is no chat window of course. So if I map a ContinueGenerate command to a keymap, I would hit that key, wait a little bit, and the code is immediately inserted into the buffer. For refactoring, I would select some code, hit the keymap, and after a few moments the code is immediately updated. But it would be cool in some cases to use the chat window, so there should be equivalent functions which send it to the chat window instead, and also having commands we can map for the usual continue workflow, such as sending the selection to context and simply focusing the input box without sending.

Ok I totally see what you're saying! And I think this answered my question perfectly, which was basically just whether you were interested in shortcuts to slash commands in the chat window.
We're currently doing something similar in VS Code by adding right click dropdown menu options when code is highlighted, this is just the even faster version of that. So if anything I'll take that as a starting point. First few I think we'd add are "write comments", "write docstring", "fix", "edit from instructions".
Current plan is for them to use our existing diff UI, which opens a full screen side-by-side diff. This seems like a fairly orthogonal question, but do you have strong opinions on that vs. inline (vertical you might call it) edit display?

I was a little confused about the slash commands at first, but yes so basically in this post so far I am proposing the simplest use case of LLMs which I think we should be focusing on first even outside of Vim usage patterns. The slash commands I realize now are more than just reusable templates (I would have just implemented all the prompts I need myself with Vim mappings) but also can implement more complex behavior with python code, so definitely we should also be able to call them from Vim, perhaps like this :ContinueSlash name
I prefer having no diff UI at all, instead I rather that the edit is accepted by default and one undo is equivalent to declining the edit, that way it achieves one less user interaction some of the time and less UI flashing around.
I think even outside of Vim you should focus on having in all your supported IDEs a way to input a prompt at the caret location with minimal UI jumping around, your caret could become colored and then everything you type has a special background color to indicate and when you press enter bam it's deleted, the editor locks up for a few moments to let you know it's processing, and then the code is instantly summoned into the editor without any UI, fuss, etc. simply undo if you don't like it and activate prompt mode again. The prompt mode could have a history to navigate with up/down arrow keys, slash keys and context all work in here, etc. Basically like a one-shot version of your Chat window with zero UI! Potentially much less work to implement and for most users it would be the main tool they use! In Copilot this is what I always wished, instead I have to write comments into the code and half the time the LLM doesn't understand the code should resume and instead hallucinates a bunch more comments......

I appreciate all of this. Sounds like we can make IdeaVim integration happen.
Inline UI is something we would love to do - unfortunately, at least in VS Code and as far as I've found so far in JetBrains as well,  it's still an experimental API so we wouldn't be able to publish to the store. There may be workarounds though, and it's something we'll keep looking into.


Revert to releasing PVs in monitor thread

Closes #834
Reverts second bullet point of #715, introduced in #720
Running release_pvs in the monitor thread seems to avoid the issue described in #834.

Do you think an alternative could be just catching the problematic exception?
While it would not be so much of a "fix" as a patch to silence it, it's something that happens on short-running scripts or potentially on shutdown when we really don't care of PVs have been properly released.

The trouble is that the exception occurs outside of our code, so I don't think there's any way we can catch it. The full traceback output looks like this:
Traceback (most recent call last):
  File ".../python3.7/site-packages/pkg_resources/__init__.py", line 360, in get_provider
KeyError: 'epics.clibs'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ".../python3.7/site-packages/epics/ca.py", line 373, in initialize_libca
  File ".../python3.7/site-packages/epics/ca.py", line 330, in find_libca
  File ".../python3.7/site-packages/epics/ca.py", line 280, in _find_lib
  File ".../python3.7/site-packages/pkg_resources/__init__.py", line 1145, in resource_filename
  File ".../python3.7/site-packages/pkg_resources/__init__.py", line 362, in get_provider
ImportError: sys.meta_path is None, Python is likely shutting down

It looks to me like this is triggered by Python internally, as a consequence of clear_auto_monitor referencing ca.
The first exception is actually caught, and the second one occurs in the except clause, due to attempting to (re)import epics.clibs during teardown:
def get_provider(moduleOrReq):
    """Return an IResourceProvider for the named module or requirement"""
    if isinstance(moduleOrReq, Requirement):
        return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
    try:
        module = sys.modules[moduleOrReq]  # First exception
    except KeyError:
        __import__(moduleOrReq)  # Second exception
        module = sys.modules[moduleOrReq]
    loader = getattr(module, '__loader__', None)
    return _find_adapter(_provider_factories, loader)(module)

This is in pkg_resources, which is part of setuptools.

Do we ever need to care if clear_auto_monitor, or even any part of release_pvs, has been called during shutdown?
The simplest "solution" would be to just remove the call to clear_auto_monitor there. That would avoid needing to reintroduce threading, but I'm not sure if there would be any negative side-effects?
Alternatively, maybe there's a way to detect we're shutting down (as opposed to releasing PVs at runtime), and ignore calls to release_pvs in that case?
All of the options seem dirty in some way or another.

Thanks, @MikeHart85, for explaining. This should definitely eventually be fixed in pyepics.
It shouldn't matter for ophyd whether that cleanup gets called during shutdown.
I wonder what would happen if you monkey-patched epics._find_lib after a successful startup, ensuring it never tried reloading the library during shutdown?
For this PR, you might also consider: a try:/finally: block such that the event is always set, even if the code fails so it doesn't block the process from exiting.

Closing because #845 is a better solution to this.


acts_as_list_class.maximum(position_column) is causing the entire table to lock

def insert_at_position(position)
  return set_list_position(position) if new_record?
  with_lock do
    if in_list?
      old_position = send(position_column).to_i
      return if position == old_position
      # temporary move after bottom with gap, avoiding duplicate values
      # gap is required to leave room for position increments
      # positive number will be valid with unique not null check (>= 0) db constraint
      temporary_position = acts_as_list_class.maximum(position_column).to_i + 2
      set_list_position(temporary_position)
      shuffle_positions_on_intermediate_items(old_position, position, id)
    else
      increment_positions_on_lower_items(position)
    end
    set_list_position(position)
  end
end

This line  is causing to load/locking the entire table. It causes the following query:
SELECT MAX(`items`.`position`) FROM `items`

This a huge performance issue, if the table is large. We should either remove the temporary position setting or use scope which is attached to acts_as_list for that class.
Maybe we can also add acts_as_list_class.where(scope_condition) before calling maximum.

Updated original comment with slightly better formatting

@yatish27 Either @brendon or I will look into this shortly.

@swanandp @brendon Any updates on this one ?

Hi @yatish27, this original change came in through another contributor's PR.
Thanks for your patience on this. Let me know if the new PR works for you.

@yatish27, this should solve your problem. Let me know if not.


FATA[0000] host is not running on OSX

Several Docker machines were created a few days ago and the current state is:
wildfly> docker-machine ls
NAME            ACTIVE   DRIVER       STATE     URL                         SWARM
mydocker                 virtualbox   Running   tcp://<IP_ADDRESS>:2376
swarm-master             virtualbox   Stopped                               swarm-master (master)
swarm-node-01            virtualbox   Stopped                               swarm-master
swarm-node-02   *        virtualbox   Stopped                               swarm-master

Docker client is configured to connect to the host as eval $(docker-machine env mydocker). But docker-machine ip gives the error FATA[0000] host is not running.
Tried to start the machine as docker-machine start mydocker and got the error INFO[0000] VM not in restartable state.
Created a new machine as docker-machine create --driver virtualbox mydocker2and then docker-machine ip can be found correct (after eval $(docker-machine env mydocker2).

up

@arun-gupta could you try docker-machine kill swarm-master?

@arun-gupta Can you confirm this is still happening with 0.3.0?

@nathanleclaire @ehazlett heading back home tomorrow and will respond back later this week.

Hi @arun-gupta Can I close this ticket?

@dgageot cannot reproduce, so closing is fine. Will file if it happens again.


5 broken specs in master

New Regression Checklist

[x] Updated fastlane to the latest version
[x] I read the Contribution Guidelines
[x] I read docs.fastlane.tools
[x] I searched for existing GitHub issues

Regression Information

Breaking version: latest (2.162.0)
Last working version: I don't know, it's been broken for a couple weeks if not months

Regression Description
bundle exec fastlane test used to work, at some point in the past. But for the past couple weeks/months, it has been failing 5 specs somewhere in the Google Play Store.
Complete output when running fastlane, including the stack trace and command used
Command: bundle exec fastlane test --capture_output
Apparently (oddly), by adding the "capture output" argument, it doesn't print everything it should. It didn't run all the tests for sure. So I'll post the specs failures separately here:
5 Failing Specs
Click to Expand

Failures:

  1) Fastlane Fastlane::FastFile create_app_on_managed_play_store without :json_key or :json_key_data without :json_key or :json_key_data - could not find file
     Failure/Error:
       expect do
         Fastlane::FastFile.new.parse("lane :test do
           create_app_on_managed_play_store()
         end").runner.execute(:test)
       end.to raise_error(FastlaneCore::Interface::FastlaneError, /Could not find service account json file at path/)

       expected FastlaneCore::Interface::FastlaneError with message matching /Could not find service account json file at path/, got #<WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled. Unregistered request: POST ...econnect.apple.com\/testflight\/v2/")

       ============================================================> with backtrace:
         # ./supply/lib/supply/client.rb:53:in `initialize'
         # ./supply/lib/supply/client.rb:19:in `new'
         # ./supply/lib/supply/client.rb:19:in `make_from_config'
         # ./fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb:8:in `run'
         # ./fastlane/lib/fastlane/runner.rb:263:in `block (2 levels) in execute_action'
         # ./fastlane/lib/fastlane/actions/actions_helper.rb:69:in `execute_action'
         # ./fastlane/lib/fastlane/runner.rb:255:in `block in execute_action'
         # ./fastlane/lib/fastlane/runner.rb:229:in `chdir'
         # ./fastlane/lib/fastlane/runner.rb:229:in `execute_action'
         # ./fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name'
         # ./fastlane/lib/fastlane/fast_file.rb:159:in `method_missing'
         # (eval):2:in `block in parsing_binding'
         # ./fastlane/lib/fastlane/lane.rb:33:in `call'
         # ./fastlane/lib/fastlane/runner.rb:49:in `block in execute'
         # ./fastlane/lib/fastlane/runner.rb:45:in `chdir'
         # ./fastlane/lib/fastlane/runner.rb:45:in `execute'
         # ./fastlane/spec/actions_specs/create_app_on_managed_play_store_spec.rb:16:in `block (6 levels) in <top (required)>'
         # ./fastlane/spec/actions_specs/create_app_on_managed_play_store_spec.rb:13:in `block (5 levels) in <top (required)>'
     # ./fastlane/spec/actions_specs/create_app_on_managed_play_store_spec.rb:13:in `block (5 levels) in <top (required)>'

  2) Fastlane Fastlane::FastFile create_app_on_managed_play_store without :json_key or :json_key_data without :json_key or :json_key_data - crashes in a not an interactive place
     Failure/Error:
       expect do
         Fastlane::FastFile.new.parse("lane :test do
           create_app_on_managed_play_store()
         end").runner.execute(:test)
       end.to raise_error(FastlaneCore::Interface::FastlaneError, "Could not load Google authentication. Make sure it has been added as an environment variable in 'json_key' or 'json_key_data'")

       expected FastlaneCore::Interface::FastlaneError with "Could not load Google authentication. Make sure it has been added as an environment variable in 'json_key' or 'json_key_data'", got #<WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled. Unregistered request: POST ...econnect.apple.com\/testflight\/v2/")

       ============================================================> with backtrace:
         # ./supply/lib/supply/client.rb:53:in `initialize'
         # ./supply/lib/supply/client.rb:19:in `new'
         # ./supply/lib/supply/client.rb:19:in `make_from_config'
         # ./fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb:8:in `run'
         # ./fastlane/lib/fastlane/runner.rb:263:in `block (2 levels) in execute_action'
         # ./fastlane/lib/fastlane/actions/actions_helper.rb:69:in `execute_action'
         # ./fastlane/lib/fastlane/runner.rb:255:in `block in execute_action'
         # ./fastlane/lib/fastlane/runner.rb:229:in `chdir'
         # ./fastlane/lib/fastlane/runner.rb:229:in `execute_action'
         # ./fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name'
         # ./fastlane/lib/fastlane/fast_file.rb:159:in `method_missing'
         # (eval):2:in `block in parsing_binding'
         # ./fastlane/lib/fastlane/lane.rb:33:in `call'
         # ./fastlane/lib/fastlane/runner.rb:49:in `block in execute'
         # ./fastlane/lib/fastlane/runner.rb:45:in `chdir'
         # ./fastlane/lib/fastlane/runner.rb:45:in `execute'
         # ./fastlane/spec/actions_specs/create_app_on_managed_play_store_spec.rb:25:in `block (6 levels) in <top (required)>'
         # ./fastlane/spec/actions_specs/create_app_on_managed_play_store_spec.rb:22:in `block (5 levels) in <top (required)>'
     # ./fastlane/spec/actions_specs/create_app_on_managed_play_store_spec.rb:22:in `block (5 levels) in <top (required)>'

  3) Fastlane Fastlane::FastFile get_managed_play_store_publishing_rights without options could not find file
     Failure/Error:
       expect do
         Fastlane::FastFile.new.parse("lane :test do
           get_managed_play_store_publishing_rights()
         end").runner.execute(:test)
       end.to raise_error("boom")

       expected Exception with "boom", got #<RSpec::Mocks::MockExpectationError: #<FastlaneCore::UI (class)> received :important with unexpected...t.com&continueUrl=https%3A%2F%2Ffastlane.github.io%2Fmanaged_google_play-callback%2Fcallback.html")> with backtrace:
         # ./fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb:33:in `run'
         # ./fastlane/lib/fastlane/runner.rb:263:in `block (2 levels) in execute_action'
         # ./fastlane/lib/fastlane/actions/actions_helper.rb:69:in `execute_action'
         # ./fastlane/lib/fastlane/runner.rb:255:in `block in execute_action'
         # ./fastlane/lib/fastlane/runner.rb:229:in `chdir'
         # ./fastlane/lib/fastlane/runner.rb:229:in `execute_action'
         # ./fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name'
         # ./fastlane/lib/fastlane/fast_file.rb:159:in `method_missing'
         # (eval):2:in `block in parsing_binding'
         # ./fastlane/lib/fastlane/lane.rb:33:in `call'
         # ./fastlane/lib/fastlane/runner.rb:49:in `block in execute'
         # ./fastlane/lib/fastlane/runner.rb:45:in `chdir'
         # ./fastlane/lib/fastlane/runner.rb:45:in `execute'
         # ./fastlane/spec/actions_specs/get_managed_play_store_publishing_rights_spec.rb:17:in `block (6 levels) in <top (required)>'
         # ./fastlane/spec/actions_specs/get_managed_play_store_publishing_rights_spec.rb:14:in `block (5 levels) in <top (required)>'
     # ./fastlane/spec/actions_specs/get_managed_play_store_publishing_rights_spec.rb:14:in `block (5 levels) in <top (required)>'

  4) Fastlane Fastlane::FastFile get_managed_play_store_publishing_rights without options found file
     Failure/Error:
       Fastlane::FastFile.new.parse("lane :test do
         get_managed_play_store_publishing_rights()
       end").runner.execute(:test)

       #<FastlaneCore::UI (class)> received :important with unexpected arguments
         expected: ("To not be asked about this value, you can specify it using 'json_key'")
              got<EMAIL_ADDRESS>     # ./fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb:33:in `run'
     # ./fastlane/lib/fastlane/runner.rb:263:in `block (2 levels) in execute_action'
     # ./fastlane/lib/fastlane/actions/actions_helper.rb:69:in `execute_action'
     # ./fastlane/lib/fastlane/runner.rb:255:in `block in execute_action'
     # ./fastlane/lib/fastlane/runner.rb:229:in `chdir'
     # ./fastlane/lib/fastlane/runner.rb:229:in `execute_action'
     # ./fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name'
     # ./fastlane/lib/fastlane/fast_file.rb:159:in `method_missing'
     # (eval):2:in `block in parsing_binding'
     # ./fastlane/lib/fastlane/lane.rb:33:in `call'
     # ./fastlane/lib/fastlane/runner.rb:49:in `block in execute'
     # ./fastlane/lib/fastlane/runner.rb:45:in `chdir'
     # ./fastlane/lib/fastlane/runner.rb:45:in `execute'
     # ./fastlane/spec/actions_specs/get_managed_play_store_publishing_rights_spec.rb:28:in `block (5 levels) in <top (required)>'

  5) Fastlane Fastlane::FastFile get_managed_play_store_publishing_rights with options with :json_key_data
     Failure/Error:
       Fastlane::FastFile.new.parse("lane :test do
         get_managed_play_store_publishing_rights(
           json_key_data: '#{json_key_data}'
         )
       end").runner.execute(:test)

       #<FastlaneCore::UI (class)> received :important with unexpected arguments
         expected<EMAIL_ADDRESS>              got<EMAIL_ADDRESS>     # ./fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb:33:in `run'
     # ./fastlane/lib/fastlane/runner.rb:263:in `block (2 levels) in execute_action'
     # ./fastlane/lib/fastlane/actions/actions_helper.rb:69:in `execute_action'
     # ./fastlane/lib/fastlane/runner.rb:255:in `block in execute_action'
     # ./fastlane/lib/fastlane/runner.rb:229:in `chdir'
     # ./fastlane/lib/fastlane/runner.rb:229:in `execute_action'
     # ./fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name'
     # ./fastlane/lib/fastlane/fast_file.rb:159:in `method_missing'
     # (eval):2:in `block in parsing_binding'
     # ./fastlane/lib/fastlane/lane.rb:33:in `call'
     # ./fastlane/lib/fastlane/runner.rb:49:in `block in execute'
     # ./fastlane/lib/fastlane/runner.rb:45:in `chdir'
     # ./fastlane/lib/fastlane/runner.rb:45:in `execute'
     # ./fastlane/spec/actions_specs/get_managed_play_store_publishing_rights_spec.rb:50:in `block (5 levels) in <top (required)>'

Finished in 8 minutes 12 seconds (files took 4.81 seconds to load)
6436 examples, 5 failures

Failed examples:

rspec ./fastlane/spec/actions_specs/create_app_on_managed_play_store_spec.rb:9 # Fastlane Fastlane::FastFile create_app_on_managed_play_store without :json_key or :json_key_data without :json_key or :json_key_data - could not find file
rspec ./fastlane/spec/actions_specs/create_app_on_managed_play_store_spec.rb:20 # Fastlane Fastlane::FastFile create_app_on_managed_play_store without :json_key or :json_key_data without :json_key or :json_key_data - crashes in a not an interactive place
rspec ./fastlane/spec/actions_specs/get_managed_play_store_publishing_rights_spec.rb:9 # Fastlane Fastlane::FastFile get_managed_play_store_publishing_rights without options could not find file
rspec ./fastlane/spec/actions_specs/get_managed_play_store_publishing_rights_spec.rb:21 # Fastlane Fastlane::FastFile get_managed_play_store_publishing_rights without options found file
rspec ./fastlane/spec/actions_specs/get_managed_play_store_publishing_rights_spec.rb:43 # Fastlane Fastlane::FastFile get_managed_play_store_publishing_rights with options with :json_key_data

Captured Output
Command Used: test --capture_output
Output/Log

INFO [2020-10-06 12:15:43.88]: Successfully loaded custom action '/Users/rogerluan/Documents/Projects/fastlane/fastlane/actions/plugin_scores.rb'.
INFO [2020-10-06 12:15:43.88]: Successfully loaded custom action '/Users/rogerluan/Documents/Projects/fastlane/fastlane/actions/test_sample_code.rb'.
DEBUG [2020-10-06 12:15:43.88]: Checking if there are any plugins that should be loaded...
DEBUG [2020-10-06 12:15:43.88]: Loading 'fastlane-plugin-ruby' plugin
INFO [2020-10-06 12:15:43.88]: gem 'fastlane-plugin-ruby' is already installed
DEBUG [2020-10-06 12:15:43.88]: Loading 'fastlane-plugin-clubmate' plugin
INFO [2020-10-06 12:15:43.89]: gem 'fastlane-plugin-clubmate' is already installed
DEBUG [2020-10-06 12:15:43.89]: Loading 'fastlane-plugin-slack_train' plugin
INFO [2020-10-06 12:15:43.89]: gem 'fastlane-plugin-slack_train' is already installed

✅ fastlane environment ✅
Stack

Key
Value

OS
10.15.6

Ruby
2.6.5

Bundler?
true

Git
git version 2.24.3 (Apple Git-128)

Installation Source
~/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin/fastlane

Host
Mac OS X 10.15.6 (19G2021)

Ruby Lib Dir
~/.rbenv/versions/2.6.5/lib

OpenSSL Version
OpenSSL 1.1.1d  10 Sep 2019

Is contained
false

Is homebrew
false

Is installed via Fabric.app
false

Xcode Path
/Applications/Xcode.app/Contents/Developer/

Xcode Version
12.0

System Locale

Variable
Value

LANG
en_US.UTF-8
✅

LC_ALL
en_US.UTF-8
✅

LANGUAGE

fastlane files:
`./fastlane/Fastfile`
require 'fileutils'
fastlane_require 'xcodeproj'

skip_docs # Do not create fastlane/README.txt

# Test and Validate

desc "Runs the unit tests and other verifications for the fastlane repo"
lane :test do |options|
  validate_repo
end

desc "Verifies all tests pass and the current state of the repo is valid"
lane :validate_repo do
  lint_source
  execute_tests
  validate_docs
  ensure_tool_name_formatting
  ensure_code_samples
  ensure_special_docs_code_samples
  ensure_code_snippets
  ensure_actions_config_items_formatting
end

desc "Verifies source code is in a good state"
lane :lint_source do
  # Verifying that no debug code is in the code base
  #
  exclude_dirs = ["\.bundle", "*/vendor/bundle"]
  ensure_no_debug_code(text: "binding.pry", extension: ".rb", exclude: "playground.rb", exclude_dirs: exclude_dirs) # debugging code
  ensure_no_debug_code(text: "# TODO", extension: ".rb", exclude_dirs: exclude_dirs) # TODOs
  ensure_no_debug_code(text: "now: ", extension: ".rb", exclude_dirs: exclude_dirs) # rspec focus
  ensure_no_debug_code(text: "<<<<<<<", extension: ".rb", exclude_dirs: exclude_dirs) # Merge conflict

  # spaceship and credentials_manager don't have access to fastlane_core
  ensure_no_debug_code(text: " UI\\.", path: "spaceship/lib", extension: ".rb", exclude_dirs: exclude_dirs)
  ensure_no_debug_code(text: " UI\\.", path: "credentials_manager/lib", extension: ".rb", exclude_dirs: exclude_dirs)

  rubocop(step_name: 'policekeeping_the_code_with_rubocop')

  Dir.chdir("..") do
    # Verify shell code style
    if FastlaneCore::Helper.mac?
      sh('find -E . -regex ".*\.(sh|bash)" -not -name "Pods-*" -name ".bundle" -exec shellcheck {} +')
    elsif !FastlaneCore::Helper.windows?
      sh('find . -regextype posix-egrep -regex ".*\.(sh|bash)" -not -name "Pods-*" -name ".bundle" -exec shellcheck {} +')
    end
  end
end

desc "Measure the execution time of the --help command"
lane :benchmark_help_command do
  Dir.chdir("..") do
    # install gnomon if not installed yet
    Actions.sh("echo foo | gnomon", log: true, error_callback: lambda { |result|
      if Helper.windows? || Helper.mac?
        sh('npm install -g gnomon')
      else
        sh('sudo npm install -g gnomon')
      end
    })
    cmd = Helper.windows? ? "cd bin && fastlane --help | gnomon" : "bin/fastlane --help | gnomon"
    3.times do
      content = sh(cmd, log: false)
      content.each_line do |line|
        UI.message("🏎 '#{line.strip}'") if ["Total", "real", "user", "sys"].any? { |word| line.include?(word) }
      end
    end
  end
end

desc "Runs the tests"
lane :execute_tests do
  version = local_version # has to be outside of the `Dir.chdir`

  # Verifying the --help command
  Dir.chdir("..") do
    cmd = Helper.windows? ? "cd bin && fastlane --help" : "PAGER=cat bin/fastlane --help"
    content = sh(cmd)
    ["--version", "https://fastlane.tools", "fastlane"].each do |current|
      UI.user_error!("--help missing information: '#{current}'") unless content.include?(current)
    end
  end

  benchmark_help_command

  Dir.chdir("..") do
    # Install the bundle and the actual gem
    sh("bundle check || bundle install")
    sh("rake install")

    # Ensure the file size of the fastlane gem is below 1 MB
    size_in_mb = File.size("pkg/fastlane-#{version}.gem").to_f / (1024 * 1024)
    UI.user_error!("fastlane gem is above 1 MB, make sure no additional resources are included by mistake") if size_in_mb > 1

    # Run the tests
    #
    sh("bundle exec rake test_all")
  end
end

# Release Management

desc "Increment the version number of this gem, after generating new Swift API"
lane :bump do |options|
  verify_env_variables
  ensure_git_branch(branch: "master")
  ensure_git_status_clean

  github_api_token = ENV["FL_GITHUB_RELEASE_API_TOKEN"]
  UI.user_error!("Please provide a GitHub API token using `FL_GITHUB_RELEASE_API_TOKEN`") if github_api_token.to_s.length == 0
  paths_for_commit = []

  version_file_path = "./fastlane/lib/fastlane/version.rb"

  # Verify everything is in a consistent state
  latest_version = current_version
  local_version = version_get_podspec(path: version_file_path, require_variable_prefix: false)
  UI.user_error!("Version on RubyGems doesn't match local repo: #{latest_version} != #{local_version}") if latest_version != local_version

  changelog_text = show_changelog

  bump_type ||= 'minor' if prompt(text: "New feature, method or API?", boolean: true)
  bump_type ||= 'patch'

  slug = "fastlane/fastlane"
  new_version = version_bump_podspec(path: version_file_path, bump_type: bump_type, require_variable_prefix: false)

  # Everything looks good, let's generate the Swift API
  generated_files = generate_swift_api(fastlane_version: new_version)

  # Alright, now let's update our FastlaneSwiftRunner manifest
  generated_files << generate_fastlane_swift_runner_manifest

  # Add all changed files to the version bump commit
  paths_for_commit += generated_files

  # Add version file path to change set
  paths_for_commit << version_file_path

  sh("bundle exec rake generate_team_table")
  paths_for_commit << "README.md"

  sh("bundle exec rake update_gem_spec_authors")
  paths_for_commit << "fastlane.gemspec"

  sh("git checkout -b 'version-bump-#{new_version}'")
  commit_message = "Version bump to #{new_version}"

  git_commit(path: paths_for_commit,
             message: commit_message)
  push_to_git_remote

  pr_body = ["Auto-generated by fastlane 🤖"]
  pr_body << "**Changes since release '#{latest_version}':**"
  pr_body << changelog_text
  pr_url = create_pull_request(
    api_token: github_api_token,
    repo: slug,
    title: commit_message,
    body: pr_body.join("\n\n")
  )

  if ENV['SLACK_URL']
    slack(
      channel: "action",
      default_payloads: [],
      message: "Version bump: #{pr_url} ✨",
      payload: {}
    )
  end

  # Revert to master branch
  sh("git checkout master")
end

desc "Generate the Swift api and test it"
lane :generate_swift_api do |options|
  Fastlane::VERSION = options[:fastlane_version] if options[:fastlane_version]

  require "../fastlane/lib/fastlane/swift_fastlane_api_generator.rb"
  swift_generator = Fastlane::SwiftFastlaneAPIGenerator.new
  generated_files = swift_generator.generate_swift
  Dir.chdir("swift/formatting") do
    sh("rake")
    UI.success("Done formatting fastlane.swift API")
  end
  UI.success("Done generating fastlane.swift API, ensuring it builds")
  gym(
    project: File.expand_path("swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj"),
    skip_package_ipa: true
  )
  sh("swift build")
  sh("rm -r ../.build")
  sh("rm ../FastlaneRunner")
  generated_files
end

desc "Generate the FastlaneSwiftRunner project manifest"
lane :generate_fastlane_swift_runner_manifest do |options|
  # Don't attempt to upgrade config files, like Fastfile.swift, Deliverfile.swift, etc...
  non_upgrade_set = TOOL_CONFIG_FILES.map { |tool_name| "#{tool_name}.swift" }.to_set

  swift_folder = File.expand_path("swift")
  runner_project_path = File.expand_path(File.join(swift_folder, "/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj"))
  project = Xcodeproj::Project.open(runner_project_path)

  swift_files = project.files
                       .reject { |file| file.name.nil? }
                       .reject { |file| non_upgrade_set.include?(file.name) }
                       .select { |file| file.name.end_with?(".swift") }

  # It is assumed that all Swift files we're including are contained in the root group, or 1 group deep
  swift_filenames_to_group_name = swift_files.each_with_object({}) { |file, object| object[file.name] = file.parent.name }

  manifest_path = File.expand_path(File.join(swift_folder, "/upgrade_manifest.json"))
  File.write(manifest_path, swift_filenames_to_group_name.to_json)

  UI.success("Done generating FastlaneSwiftRunner project manifest")
  manifest_path
end

desc "Does everything that's needed for a release"
desc "This includes running tests and verifying the GitHub release"
lane :release do
  verify_env_variables
  slack_train_start(distance: 2,
                       train: "🚀",
           reverse_direction: true,
                        rail: "✨")

  update_fastlane
  slack_train

  # Git verification
  #
  ensure_git_status_clean
  ensure_git_branch(branch: 'master')
  git_pull

  validate_repo

  # Verifying RubyGems version
  #
  version = local_version
  old_version = current_version
  puts("Deploying #{version}")
  if Gem::Version.new(version) <= Gem::Version.new(old_version)
    UI.user_error!("Version number #{version} was already deployed")
  end

  # Then push to git remote
  #
  push_to_git_remote

  # Preparing GitHub Release
  #
  github_release = get_github_release(url: "fastlane/fastlane", version: version)
  if (github_release || {}).fetch('body', '').length == 0
    show_changelog(old_version: old_version)

    title = prompt(text: 'Title: ')
    description = prompt(text: "Please enter a changelog (make sure to rephrase changes to make it easy to understand, and remove non-important changes that don't affect the end-user): ",
                         multi_line_end_keyword: "END")

    github_release = set_github_release(
      repository_name: "fastlane/fastlane",
      name: [version, title].join(" "),
      tag_name: version,
      description: description,
      is_draft: false
    )

    # Actual release of the gem
    # Using IO.popen because `gem push` will prompt for 2FA if enabled
    #
    command = "gem push ../pkg/fastlane-#{version}.gem"
    IO.popen(command) do |io|
      io.each do |line|
        puts(line)
      end
    end

    release_url = github_release['html_url']

    message = [title, description, release_url].join("\n\n")
    add_fastlane_git_tag(tag: "fastlane/#{version}", message: message)
  end

  # After publishing
  #
  if ENV['SLACK_URL']
    release_notes = github_release['body']
    # markup - turn github references into links
    release_notes.gsub!(/\(#([0-9]+)\)/, '(<https://github.com/fastlane/fastlane/issues/\1|#\1>)')
    slack_message = "Successfully released [fastlane #{version}](#{release_url}) :rocket:"
    slack(
      channel: "releases",
      default_payloads: [],
      message: slack_message,
      payload: {
        "New" => release_notes
      }
    )
    slack(channel: "action", default_payloads: [], message: slack_message)
  end

  clubmate

  puts("You can now tweet:".green)
  releases_url = "https://github.com/fastlane/fastlane/releases/tag/#{version}"
  puts("[fastlane] #{github_release['name']} #{releases_url}")

  send_mac_app_ci_reminder

  update_docs(version: version)
  slack_train
end

desc "Notifies Fabric Slack to run CI Job for Mac App"
private_lane :send_mac_app_ci_reminder do
  if ENV['FABRIC_SLACK_URL']
    slack(
      slack_url: ENV['FABRIC_SLACK_URL'],
      channel: 'deployment-tools',
      default_payloads: [],
      message: "Please run the Fastlane Mac App Package CI job in TeamCity\n#{ENV['FABRIC_MAC_APP_CI_JOB_URL']}"
    )
  end
end

desc "Print out the changelog since the last tagged release and open the GitHub page with the changes"
lane :show_changelog do |options|
  old_version = options[:old_version] || current_version

  changes = sh("git log --pretty='* %s via %aN' #{old_version}...HEAD --no-merges ..", log: $verbose).gsub("\n\n", "\n")
  changes.gsub!("[WIP]", "") # sometimes a [WIP] is merged

  github_diff_url = "https://github.com/fastlane/fastlane/compare/#{old_version}...master"
  sh("open #{github_diff_url}")

  puts("Changes since release #{old_version}:\n\n#{changes.cyan}")
  changes # return the text without the modified colors
end

desc "Add a git tag in the fastlane repo for this release"
private_lane :add_fastlane_git_tag do |options|
  `git tag -am #{options[:message].shellescape} #{options[:tag].shellescape}`
  push_git_tags
end

# Docs

desc "Validates the docs still are good"
lane :validate_docs do
  # Validate docs content
  ensure_tool_name_formatting
  ensure_code_samples
  ensure_special_docs_code_samples
  ensure_code_snippets
  # (Validate action documentation)
  ensure_actions_config_items_formatting

  # Test if generating the docs is successful
  clone_docs do
    generate_markdown_docs(target_path: ".")
  end

  # Verify docs are still working
  verify_docs
end

desc "Makes sure the tests on https://docs.fastlane.tools still work with the latest version"
lane :verify_docs do
  clone_docs do
    Bundler.with_clean_env do
      puts(`sed -i -e "s/activate_bin_path/bin_path/g" $(which bundle)`) # workaround for bundler https://github.com/bundler/bundler/issues/4602#issuecomment-233619696
      sh("bundle install")
      sh("bundle exec fastlane test skip_building:true") # skip_building since we don't have a proper python environment set up
    end
  end
end

desc "Update the actions.md on https://docs.fastlane.tools"
desc "This will also automatically submit a pull request to fastlane/docs"
lane :update_docs do |options|
  debug = options[:debug]
  version = options[:version]

  unless debug
    verify_env_variables
    ensure_actions_config_items_formatting
  end

  template_path = File.expand_path("./assets/render_plugin.md.erb")
  clone_docs(debug: debug) do
    plugin_scores_cache_path = File.expand_path("./plugin_scores_cache.yml")
    docs_path = generate_markdown_docs(target_path: ".")
    yml_path = File.expand_path("./mkdocs.yml")
    actions_md_path = File.expand_path(File.join(docs_path, "docs/actions.md"))
    action_docs = Dir[File.join(docs_path, "docs", "actions", "*")].collect do |current|
      File.expand_path(current) # to make sure we commit the change
    end

    # Copy over the custom assets
    custom_action_docs_path = "lib/fastlane/actions/docs/"
    custom_assets = Dir[File.join(Fastlane::ROOT, custom_action_docs_path, "assets", "*")].collect do |current_asset_path|
      current_output_path = File.join("docs/img/actions", File.basename(current_asset_path))
      FileUtils.cp(current_asset_path, current_output_path)

      File.expand_path(current_output_path) # to make sure we commit the change
    end

    unless options[:skip_bundle_update]
      Bundler.with_clean_env do
        sh("bundle update")
      end
    end

    if `git status --porcelain`.length == 0
      UI.success("No changes in the actions.md ✅")
    else
      # Create a new branch
      sh("git checkout -b 'update-actions-md-#{Time.now.to_i}'") unless debug
      plugins_path = "docs/plugins/available-plugins.md"
      unless options[:skip_plugin_scores]
        plugin_scores(template_path: template_path,
                        output_path: plugins_path,
                         cache_path: plugin_scores_cache_path)
      end

      next if debug

      Dir.chdir("fastlane") do # this is an assumption of fastlane, that we have to .. when shelling out
        # Commit the changes
        changes_to_commit = [plugin_scores_cache_path, actions_md_path, "Gemfile.lock", plugins_path, yml_path] + action_docs + custom_assets
        git_add(path: changes_to_commit)
        git_commit(path: changes_to_commit,
                message: "Update docs for latest fastlane release #{version} (actions.md, available-plugins.md) 🚀")
        # Push them to the git remote
        push_to_git_remote

        # Submit the pull request
        pr_url = create_pull_request(
          api_token: ENV["FL_GITHUB_RELEASE_API_TOKEN"],
          repo: "fastlane/docs",
          title: "[Bot] Update docs for latest fastlane release #{version} (actions.md, available-plugins.md) 🚀",
          body: "Auto-generated by _fastlane_ bot 🤖"
        )
        UI.success("Successfully submitted a pull request to fastlane/docs: #{pr_url} 🚀")
      end
    end
  end
end

def clone_docs(debug: false)
  if debug
    clone_url = ENV['FASTLANE_DOCS_CLONE_URL'] || "../../docs"

    Dir.chdir(clone_url) do
      yield
    end
  else
    require 'tmpdir'
    git_url = ENV['FASTLANE_DOCS_GIT_URL'] || "https://github.com/fastlane/docs"

    Dir.mktmpdir("fl_clone") do |tmp_dir|
      Dir.chdir(tmp_dir) do
        sh("git clone #{git_url} --depth=1")
        Dir.chdir("docs") do
          yield
        end
      end
    end
  end
end

def generate_markdown_docs(target_path: nil)
  require 'fastlane/documentation/markdown_docs_generator'
  Fastlane::MarkdownDocsGenerator.new.generate!(target_path: File.expand_path(target_path))
  return target_path
end

# Exception Handling

error do |lane, exception|
  if ENV['SLACK_URL']
    slack(channel: "testing", message: exception.to_s, success: false)
  end
  slack_train_crash
end

# Helper

desc "Ensure all the requirement environment variables are provided"
desc "this way the deployment script will fail early (and often)"
private_lane :verify_env_variables do
  ensure_env_vars(env_vars: ['GITHUB_USER_NAME', 'GITHUB_API_TOKEN'])

  UI.user_error!("You're not logged in RubyGems. Log in using `gem push` if using RubyGems < 2.7.0 or `gem signin` if using RubyGems >=2.7.0") unless File.file?(File.expand_path("~/.gem/credentials"))
end

desc "Get the local version number per version.rb"
private_lane :local_version do
  require_relative "../fastlane/lib/fastlane/version.rb"

  Fastlane::VERSION
end

desc "Get the version number of the last release"
private_lane :current_version do
  puts("Checking the latest version on RubyGems")
  download(url: "https://rubygems.org/api/v1/gems/fastlane.json")["version"]
end

desc "Ensure the correct formatting for the fastlane tools"
private_lane :ensure_tool_name_formatting do
  UI.message("🕗  Verifying tool name formatting...")
  require 'fastlane/tools'
  errors = []
  Dir.chdir("..") do
    Dir["**/*.md"].each do |path|
      content = File.read(path)
      Fastlane::TOOLS.each do |tool|
        errors << "Use _#{tool}_ instead of `#{tool}` to mention a tool in the docs in '#{path}'" if content.include?("`#{tool}`")
        errors << "Use _#{tool}_ instead of `_#{tool}_` to mention a tool in the docs in '#{path}'" if content.include?("`_#{tool}_`")
        errors << "Use [_#{tool}_] instead of [#{tool}] to mention a tool in the docs in '#{path}'" if content.include?("[#{tool}]")
        errors << "Use <em>#{tool}<em> instead of <code>#{tool}</code> to mention a tool in the docs in '#{path}'" if content.include?("<code>#{tool}</code>")
        if content.include?("_#{tool.to_s.capitalize}_") || content.include?("`#{tool.to_s.capitalize}`")
          errors << "fastlane tools have to be formatted in lower case: #{tool} in '#{path}'"
        end
      end
    end
  end
  errors.each { |a| UI.error(a) }
  UI.user_error!("Invalid formatting of one of the fastlane tools") unless errors.empty?
  UI.success("✅  fastlane tools formatting is correct")
end

# Run the code samples, yo
private_lane :ensure_code_samples do
  UI.message("🕗  Verifying all action code samples work with the current fastlane release")
  all_content = ""
  count_actions = 0
  ActionsList.all_actions do |action|
    all_content += "```ruby\n"
    all_content += action.example_code.map { |code| code.gsub(/^\s+/, '') }.join("\n") if action.example_code
    all_content += "\n```"
    count_actions += 1
  end
  test_sample_code(content: all_content) # to not have to call the action 200 times
  UI.success("✅  All fastlane action code samples (from #{count_actions} actions) work as expected")
end

# Run the other code samples, yo
private_lane :ensure_special_docs_code_samples do
  UI.message("🕗  Verifying all action special docs (`fastlane/lib/fastlane/actions/docs`) code samples work with the latest fastlane release")
  all_content = ""
  files = Dir["../fastlane/lib/fastlane/actions/docs/*.md"]
  files.each do |special_docs_page_path|
    all_content += File.read(special_docs_page_path)
  end
  test_sample_code(content: all_content) # to not have to call the action 200 times
  UI.success("✅  All fastlane action special docs code samples (from #{files.length} files) work as expected")
end

private_lane :ensure_code_snippets do
  UI.message("🕗  Verifying all code snippets are correctly formatted")

  shell_commands_start = '((bundle|fastlane)[ ]|[A-Z_]+=)'
  errors = []

  require 'fastlane/documentation/markdown_docs_generator'

  Fastlane::MarkdownDocsGenerator.new.actions_md_contents.each do |action_name, content|
    errors << "Use '```no-highlight ↵ <code snippet> ↵ ```' instead of '```<language> ↵ <code snippet> ↵ ```' for code snippets for action '#{action_name}'" if content =~ /```(?<!no-higlight)\w+\s*#{shell_commands_start}/
    errors << "Use '```no-highlight ↵ <code snippet> ↵ ```' instead of '    <code snippet>' for code snippets for action '#{action_name}'" if content =~ /^[ ]{4}#{shell_commands_start}/
  end

  errors.each { |a| UI.error(a) }

  UI.user_error!("Invalid formatting of one of the code snippets") unless errors.empty?
  UI.success("✅  All code snippets are formatted as expected")
end

private_lane :ensure_actions_config_items_formatting do
  UI.message("🕗  Verifying actions' config items formatting...")

  errors = []

  require 'fastlane_core/configuration/config_item'

  ActionsList.all_actions do |action|
    next if action.available_options.nil?

    action.available_options.each do |option|
      next unless option.kind_of?(FastlaneCore::ConfigItem)

      errors << "Remove the '\\n' from the config item ':#{option.key}' of the action '#{action.action_name}'" if option.description && option.description =~ /\n|\\n/
    end
  end

  errors.each { |a| UI.error(a) }

  UI.user_error!("Invalid formatting of one of the actions' config items") unless errors.empty?

This is still an issue and it's starting to get on the way, I just realized: https://github.com/fastlane/fastlane/pull/17738#issuecomment-739296837

I wanna to resolve it .

Finally figured it out! 🎉


Column Badge Documentation

Summary of Changes
Added examples of how to use API for column badge
Documentation
Relevant to: amundsen-io/amundsenmetadatalibrary#273

@feng-tao could you help me with merging non-related changes 😭

@alldoami could you rebase your local branch with the upstream master? lots of commits have been merged already which just lack in your local fork.

@feng-tao i think I rebased correctly, but I need to sign now. I only want to sign the two commits that aren't signed but it goes back 78 in the instructions from DCO.

this rebase didn't work -- there are still other merge commits present.

@dorianj I do not see the files changed anymore though...

there is a unknown file ( amundsen-kube-helm/templates/helm/charts/elasticsearch-1.32.5.tgz) added to the pr.

@alldoami do you think you could open a new pr ? The long list of past commit concerns me a bit. Also you could sign the just one commit for the new pr. Sorry for the inconvenience.

@feng-tao I could, but the same thing might happen as this is the "new" PR that I tried opening after https://github.com/amundsen-io/amundsen/pull/945 went awry.


Chore/daef 553 get test reset working for etc

This PR introduces a new api.etc.testReset method which deletes all wallets … and refactors the createWallet and restoreWallet endpoints to use the new importWallet that works for private keys.

Great @nikolaglumac, will merge this now!


Re-introduce RedisSet with latest RedisNIO implementation and better comments

This depends on #8

Yes - but I wouldn't hold the Alpha up on this. It's going to be a few days before I can get to unit tests...

Closing this in favor of an updated implementation due to changes from RediStack.


jfrog logs info on stderr

Describe the bug
Running a Buildscan jfrog cli returns info logs on the stderr while there is no error.
Current behavior
Current behaviour - the following is printed to stderr when we run a jf build-scan
10:50:17 [🔵Info] Scan of build BUILDNAME is in progress
10:50:17 [🔵Info] Waiting for Build Scan to complete...
10:50:17 [🔵Info] The scan data is available at: URLTOBUILD
Reproduction steps
Run a scan on any existing builds like
jf build-scan BUILDNAME 123
Expected behavior
Log infos to stdout.
We currently run execute jfrog cli via npm with execSync and the infos get swallowed because there are logs on stderr even though there is no error.
JFrog CLI version
2.34.6
Operating system type and version
ubuntu 20.04
JFrog Artifactory version
7.41.13
JFrog Xray version
3.59.7

Same goes for debug logs! Please don't missuse stderr.

This behavior is expected @joergsesterhenn.
All of jfrog-cli's log messages are added to stderr. This is a common practice among CLI utilities, and it is done to allow having the command output only added to stdout.

Well in this case consider adding the link to the scan result as output.
We need that link and having to fish for it in the stderr is no fun.
I still think it is weird to write infos to an error stream. Could you point to any other cli tools that do this?
If I want to filter I can easily do this by setting the log level...

Does this contain the link to the online result in Xray? That's what we need.

Yes, xray_data_url is one of the parameters inside the JSON response.


«found character '%' that cannot start any token» when using {created.strftime('%Y-%m-%d')}

Hi!
Just upgraded and was fixing my config, when I stumbled upon this error.
I was replacing the old:
{created.year}-{created.month:02}-{created.day:02}/{created.year}-{created.month:02}-{created.day:02}.{extension.lower}

with
{created.strftime('%Y-%m-%d')}/{created.strftime('%Y-%m-%d')}.{extension.lower}

This is the error:
ScannerError: while scanning for the next token
found character '%' that cannot start any token
  in "<unicode string>", line 20, column 82:
     ... oogle Photos/{created.strftime('%Y-%m-%d')}/{created.strftime('% ...

Not sure what I am doing wrong.
This is the piece of config:
  - locations: '/Users/user/Pictures/album/Google Photos'
    subfolders: false
    enabled: true
    filters:
      - created
      - extension:
          - jpg
          - png
    actions:
      - shell: |
#         some shell actions here
#         some shell actions here
#         some shell actions here
      - move: # and rename
          dest: '/Users/user/Pictures/album/Google Photos/{created.strftime('%Y-%m-%d')}/{created.strftime('%Y-%m-%d')}.{extension.lower}'
          on_conflict: rename_new
          rename_template: "{name}_{counter}{extension}"

Can you try "" for dest?

Sure.
Tried:
dest: "/Users/user/Pictures/album/Google Photos/{created.strftime('%Y-%m-%d')}/{created.strftime('%Y-%m-%d')}.{extension.lower}"

and same issue:
ScannerError: while scanning for the next token
found character '%' that cannot start any token
  in "<unicode string>", line 164, column 63:
     ... bum/§ sshots/{created.strftime('%Y-%m-%d')}_{path.stem}.jpg'

At the moment I can’t see anything wrong, but I’m just on mobile at the moment. I’ll look into it tomorrow. Another thing you can try is {extension.lower()}. And please post the output of organize check —debug

Silly me, it was actually the double quotation marks! The last error I posted was for the next of such errors in the config file (was a different line). That's some coding repairing abilities on a phone :) Thanks so much!


Revisions for Ecosphere submission

These commits reflect changes made for the revised manuscript submission to Ecosphere. The manuscript contains the WEST-Inc repo as the repo of record. So these need to be merged in so reviewers can peruse if they like.

@atredennick Merged this branch. I think it worked, but this is actually my first time merging in GitHub, so let me know if anything is amiss.


[Bug] docker build project fail fixed

What problem does this PR solve?
Issue Number: close #1714
Problem Summary:
What is changed and how it works?
Proposal: xxx
Feel free to ping committers for the review!
Contribution Checklist

Make sure that the pull request corresponds to a GITHUB issue.

Name the pull request in the form "[Feature] [component] Title of the pull request", where Feature can be replaced by Hotfix, Bug, etc.

Minor fixes should be named following this pattern: [hotfix] [docs] Fix typo in README.md doc.

Purpose of this pull request

cc @MonsterChenzhuo If you are free, please check this pr

There are still a lot of problems inside, and if you have the conditions, you can explore how docker compose can control the type of database
https://streampark.apache.org/zh-CN/docs/user-guide/docker-deployment
Here is the official documentation, I think you can check it out and fix the documentation accordingly

If you feel that you can't solve the problem I'm talking about for a while, you can also raise it, and I'll merge the content you submit when you start first.

@MonsterChenzhuo Sure, I will try this holiday. But I think you need to merge first, because building failure is a bug, and multiple datasouce is a feature.
By the way, I added a command in Chinese documentation in doc repo.


Support source maps

https://github.com/60frames/react-boilerplate/issues/41

https://github.com/60frames/webpack-hot-server-middleware/pull/2


[BUG] - JupyterLab image fetches latest Codeserver while code assumes 4.5.0

OS system and architecture in which you are running QHub
CI
Expected behavior
JupyterLab image fetch a fix code-server version
Actual behavior
JupyterLab image fetches latest Codeserver
How to Reproduce the problem?
Build the Jupyterlab image from main, here is a CI failure example:
https://github.com/Quansight/qhub/runs/7520855746?check_suite_focus=true
Command output
No response
Versions and dependencies used.
No response
Compute environment
No response
Integrations
No response
Anything else?
Problem is here:
https://github.com/Quansight/qhub/blob/4467325be7ca5ce86e8ecdd8b6de03667dc61e39/qhub/template/image/scripts/install-code-server.sh#L9-L11
This Fetches latest code server version and the following line assumes 4.5.0
https://github.com/Quansight/qhub/blob/4467325be7ca5ce86e8ecdd8b6de03667dc61e39/qhub/template/image/scripts/install-code-server.sh#L20

This is an important issue as the CI would not pass, without this being fixed.


ESLint "no-unresolved" rule

When using ESLint for javascript the "no-unresolved" rule will throw an error in autolint while neomake says it is fine. Neomake is correct, the code works.
The eslint "no-unresolved" rule ensures that imported modules can be resolved to a module on the local filesystem.
https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
This isn't particularly important, but if you guys have an idea as to why this is happening I might try to find a work around for it.

@whossname Sorry for the late response, I've been a little preoccupied lately. I have a suspicion is this an example of Neomake Autolint not referencing your .eslintrc.  See this comment for a suggestion on how to fix the issue.

I have no idea what this is even about anymore. Might as well close it.

I've got an idea of how I resolved this now. The explanation of eslint in this readme helped a lot https://github.com/jaxbot/syntastic-react


[Proposal] Space.seed should be reproducible for Space.seed

Proposal
Space.seed will return a list of seeds, i.e., Discrete(3).seed(None) -> [1234]
However, we can't do Discrete(3).seed([1234]) to generate the same RNG
My proposal is the work code should work for all gymnasium spaces
seeding_values = space.seed(None)
samples = [space.sample() for _ in range(3)]

space.seed(seeding_values)
new_samples = [space.sample() for _ in range(3)]

assert samples == new_samples

Motivation
One of the aims of Gymnasium is reproducibility, for space seed, a user must have a known seed for this to be possible currently as space.seed(None) does not guarantee that you get back all the information to recreate the space (particularly subspaces)
Pitch
Modify the necessary space.seed functions to enable this feature
Alternatives
This has worked in the past and no-one has asked for it yet
Additional context
No response
Checklist

[X] I have checked that there is no similar issue in the repo

Implemented within #1033


look into FREERTOS

https://github.com/va3wam/hexBot/blob/b14a6327b650fce4c8ffc3d2039137bf4c722253/src/main.cpp#L44-L44

pre-emptive multitasking would remove a lot of the constraints on how we structure and call routines. There would no longer be a need to "stay out of the way" of the 20 millisecond leg movement task, because it would simply pre-empt what ever else might happen to be running.

Going to drop this issue for now. If we change our minds we can create a new issue.


Attaching file / website using "#" command does not work anymore

Installation Method
Pip
Environment

Open WebUI Version: v.0.4.7

Ollama (if applicable): v.0.4.6

Operating System: Windows 11

Browser (if applicable): Firefox

Confirmation:

[x] I have read and followed all the instructions provided in the README.md.
[x] I am on the latest version of both Open WebUI and Ollama.
[x] I have provided the exact steps to reproduce the bug in the "Steps to Reproduce" section below.

Expected Behavior:
When the attach file keyword/shortcut is used in the textarea, a popup will appear which will let the website link pasted to be used for providing additional context in the chat.
Actual Behavior:
When the attach file keyword/shortcut is used in the textarea, a popup will appears for a second and the link pasted is just the title of the website / url.
Description
Bug Summary:
When the attach file keyword/shortcut is used in the textarea, a popup will appears for a second and the link pasted is just the title of the website / url. This seems to have been broken in v0.4.6, as it was working in the prior versions for me. Have also tried on Edge browser, same issue.
Reproduction Details
Steps to Reproduce:
Try adding a website link using the "#" keyword / shortcut.
Please let me know if any additional information is required. Thanks.

Reinstalled using pip, its working now.


Octomap: octomap not cleared between flights

If obstacles are moved of drone is hand carried between missions the old octomap gives incorrect information and drone may start inside no-go zone or tries to avoid nonexistent obstacles.
Would be good to have configuration to choose whether octomap is:

cleared automatically in every arming/takeoff
or
kept untouched and reset only by manual service call

This feature is included in this PR https://github.com/tiiuae/control_interface/pull/9

Merged

Verified


Terminal transforms characters

VS Code Version: 1.53.2
OS Version: Windows 10

Steps to Reproduce:

Print something with tabs to terminal
The \t character will be replaced with spaces, which makes it impossible to copy&paste the results into an excel (or google sheets) sheet.

Does this issue occur when all extensions are disabled?: Yes

I can't reproduce this issue. Can you pls attach a gif of this happening?

Is a screenshot ok? It shows that printing "test\tabc" looks like it's correct in the console, but the "\t" character actually gets printed as 4 spaces instead. When you copy&paste the result into notepad++, you can see that one of the spaces is selected. Because of that, i can't paste some debug output from the console into a google sheets document.

thanks -  I can reproduce this. this is as designed. we might do something to fix it upstream in xterm.js in the future. sorry it's causing you an inconvenience.

Duplicate of #117760


Added Bug reporting template

Fixes #35
Added Bug reporting template

I have merged this but it requires some minor fixes which I will push soon. Thanks for your contribution.