Update TransactionReceipt members (breaking change)

Replace address with svm-data field

To add slightly more context here for posterity, this follows from a conversation we all had a couple of days ago where we discussed the abstraction boundaries around SVM tx/receipt/app data. We decided that we'll include an encoded blob of SVM data in the tx receipt, to be decoded by the client using the svm-codec wasm module (see https://github.com/spacemeshos/svm/tree/master/crates/svm-codec). This is similar to what the client needs to do today with a tx before submitting it using TxService.SubmitTransaction.


Fix misspelling of html in layout.html.haml

or it will be malformed in HTML email.

Whoops. Thanks for the patch!

For the benefit of searchers in the future, the misspelling was hmtl instead of html.


[Proposal] Project structure change

I think that the current monolithic structure of the project will not scale well in the future. I think there are a few structural changes that should be made while the project is still fairly small.

Move to a github orginization
Break out modular packages from the monolith
Move to a monorepo or multi-repo structure

This will make it much easier for people to work on certain portions of the project, rather than having to reason about how all the pieces integrate together.

Thank you so much for your suggestion.

@JakeAdler Thank you so much for your suggestion.


u-root fails to build LinuxBoot variants full and debug

U-root is not able to include stboot together with all core packages:
[stboot:u-root] 2022/02/01 14:25:38 Disabling CGO for u-root...
[stboot:u-root] 2022/02/01 14:25:38 Build environment: GOARCH=amd64 GOOS=linux GOROOT=/usr/lib/go-1.17 GOPATH=/home/sylv/git/system-transparency/cache/go CGO_ENABLED=0
[stboot:u-root] 2022/02/01 14:25:38 WARNING: You are not using one of the recommended Go versions (have = go1.17, recommended = [go1.13 go1.14 go1.15 go1.16]).
[stboot:u-root]                         Some packages may not compile.
[stboot:u-root]                         Go to https://golang.org/doc/install to find out how to install a newer version of Go,
[stboot:u-root]                         or use https://godoc.org/golang.org/dl/go1.13 to install an additional version of Go.
[stboot:u-root] 2022/02/01 14:25:38 Skipping package "/home/sylv/git/system-transparency/cache/go/src/github.com/u-root/u-root/cmds/core/bind": no buildable Go source files in /home/sylv/git/system-transparency/cache/go/src/github.com/u-root/u-root/cmds/core/bind
[stboot:u-root] 2022/02/01 14:25:53 error building: error building go package in "/home/sylv/git/system-transparency/cache/go/src/github.com/u-root/u-root/bb": # github.com/u-root/u-root/bb
[stboot:u-root] 2022/02/01 14:25:53 duplicated definition of symbol boot, from github.com/system-transparency/stboot/vendor/github.com/u-root/u-root/pkg/boot/multiboot/internal/trampoline and github.com/u-root/u-root/pkg/boot/multiboot/internal/trampoline
[stboot:u-root] , exit status 2
task: Failed to run task "stboot:initramfs-full": task: Failed to run task "stboot:u-root": exit status 1

Fixed since #159
see tasks/stboot.yml  line 6


CSS Styling for JFoenix Autocomplete on ComboBox

Is there a way to use CSS to style the drop down list background color of the Combo Box? I am using ComboBox (not JFXComboBox) & trying JFoenix Autocompletion, but the CSS styling not working.
I tried with below code as shown in #644 (comment)
.autocomplete-popup .autocomplete-list {
-fx-background-color: yellow;
}
Code used for AutoComplete as shown in https://github.com/jfoenixadmin/JFoenix/issues/220#issuecomment-369017248
Hope the issue faced is clear.

Hi,
do you want to style the ComboBox or the AutoCompletePopup?
Anyway it doesn't matter because they using the same classes from ListView.
So if you want to change the background color add a CSS file to your scene like:
...
    Scene scene = new Scene(root, 300, 275);
    scene.getStylesheets().add(Main.class.getResource("/main-app.css").toExternalForm());
...

In the CSS file you have to define the following:
...
/*Change selected cells of autocomplete popup*/
.jfx-autocomplete-popup .list-cell:filled:selected {
    -fx-background-color: #64ffe6;
}
/*Change cells of autocomplete popup*/
.jfx-autocomplete-popup .list-cell {
    -fx-background-color: #5f68ff;
}
/*Change cells of combobox*/
.combo-box .list-cell {
    -fx-background-color: #ff92b8;
}
...

.list-cell has also some other pseudo classes.
That should produce the following:

Greetings

@schlegel11 those items set though, lol. Maybe I should use better naming in demos :p

Don't worry :wink:
I think it isn't from an official demo. I just used the code from the referenced issue https://github.com/jfoenixadmin/JFoenix/issues/220#issuecomment-369017248

@schlegel11 unfortunately it is not working at my end even after trying the CSS styling you have mentioned (Screenshot attached). I am using ComboBox not JFXComboBox, & trying the AutoComplete feature only as per the code referenced in my initial message (is it necessary to use JFxComboBox only to get the CSS styling working?)
Any ideas how to fix it?

Hi,
I used the same code from the issue which you included in your issue so with the default combo box.
Full code example is:
package sample;

import com.jfoenix.controls.JFXAutoCompletePopup;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class Main extends Application {

  @Override
  public void start(Stage primaryStage) {
    primaryStage.setTitle("Combo");

    ComboBox<String> comboBox = new ComboBox<>();
    Pane root = new Pane(comboBox);

    comboBox.setEditable(true);
    comboBox.getItems().addAll("HELLO", "TROLL", "WFEWEF", "WEF");

    JFXAutoCompletePopup<String> autoCompletePopup = new JFXAutoCompletePopup<>();
    autoCompletePopup.getSuggestions().addAll(comboBox.getItems());

    // SelectionHandler sets the value of the comboBox
    autoCompletePopup.setSelectionHandler(
        event -> {
          comboBox.setValue(event.getObject());
        });

    TextField editor = comboBox.getEditor();
    editor
        .textProperty()
        .addListener(
            observable -> {
              // The filter method uses the Predicate to filter the Suggestions defined above
              // I choose to use the contains method while ignoring cases
              autoCompletePopup.filter(
                  item -> item.toLowerCase().contains(editor.getText().toLowerCase()));
              // Hide the autocomplete popup if the filtered suggestions is empty or when the box's
              // original popup is open
              if (autoCompletePopup.getFilteredSuggestions().isEmpty()
                  || comboBox.showingProperty().get()) {
                autoCompletePopup.hide();
              } else {
                autoCompletePopup.show(editor);
              }
            });

    Scene scene = new Scene(root, 300, 275);
    scene.getStylesheets().add(Main.class.getResource("/main-app.css").toExternalForm());
    primaryStage.setScene(scene);
    primaryStage.show();
  }

  public static void main(String[] args) {
    launch(args);
  }
}

Where main-app.css is located in a resources dir.
Hope it will work.
Greetings

@schlegel11 a little perplexed. If I run just this sample code it works, but the same does not in my application. Is it something to do with JDK11 as I am using that. Also if I run this code using JDK11 I get an error as posted by someone here - Link
So to test this code I had to switch the JDK to JDK10 & it worked. Also my view is maintained in a FXML file. Could JDK11 & FXML have any bearing on how JFoenix autocompletion CSS behaves ?

Hmm ok.
I'm not really involved into JavaFX with Java11.
I could try it in the next days but for now I'm not sure how you could fix it. Sorry
Greetings

Thank you very much for your time. If I manage 2 find something will post it here or if JFoenix developers have a look at it & point out would help. Thanks once again.

Hello @iCoderJ
you can fix the cell truncation by changing the list view fixed cell size.
Regarding Java11, not sure if it might help but try using the latest version of JavaFX
Regards,


Migrated to f32::total_cmp() function in FloatOrd::cmp()

Objective
Fixes #5152
Solution
Use total_cmp() function from f32 in cmp() function on FloatOrd

Code change looks good to me. @DJMcNab, advice on the hash concern you raised?

This should be benchmarked too 👍

I don't think the hash concern is relevant here, since the only thing that matters is hash in relation to PartialEq
However, I think the clippy lint we ignore is making a good point - we should also implement PartialOrd in terms of this Ord impl.

Saying that, I'm not convinced PartialEq doesn't have requirements related to the PartialOrd implementation
Basically, we need to check the documentation for all four traits, which I can't right at this moment.

* convert the only usage of this impl (in `FontAtlasSet`) to use `BTreeMap`. I suspect for this workload, that would even be faster. This is the path I'd recommend taking

Why would BTreeMap be faster? It would still be a binary search versus a hash and direct lookup, right?

Based on the using with_capacity(1), I assume that the majority of the cases have very few items.
Additionally, the keys are small, so a binary search should be very fast.

The same approach taken in #10558 should be used here

I'm going to close this out. Looks like this is wanted, but work has stalled out and the approach needs to be changed. Feel free to re-open.


[actions][external runner] Change command to a string slice

I was unable to parse arguments in a script while using this action.
I modified the entrypoint to something like this for debugging porpuses:
#!/usr/bin/env sh
set -e
set -x

echo "Called with these arguments: $*";
echo "Argument 1: $1";
echo "Argument 2: $2";
echo "Argument 3: $3";

while true; do
  case "$1" in
    -v | --verbose ) set -x; echo "Called with these arguments: $*"; shift ;;
    -g | --repository ) REPO="$2"; shift 2 ;;
    -r | --ref | --commit ) REF="$2"; shift 2 ;;
    -h | --help ) help ;;
    -- ) shift; break ;;
    * ) break ;;
  esac
done

So, now in the logs I was able to see why the argument parser was not working:
2022/08/16 10:42:33 Waiting for task to run...
2022/08/16 10:43:46 Task is running!
+ echo 'Called with these arguments: --verbose --repository https://github.com/newrelic/nri-oracledb --ref external-runner-test -- provision'
+ echo 'Argument 1: --verbose --repository https://github.com/newrelic/nri-oracledb --ref external-runner-test -- provision'
+ echo 'Argument 2: '
+ echo 'Argument 3: '
+ true
+ case "$1" in
+ break
+ echo 'Cloning repository '\'''\'''
+ git clone --progress --no-checkout -- '' working-directory
Called with these arguments: --verbose --repository https://github.com/newrelic/nri-oracledb --ref external-runner-test -- provision TERRAFORM_WORKSPACE=ghrun-pr-108
Argument 1: --verbose --repository https://github.com/newrelic/nri-oracledb --ref external-runner-test -- provision TERRAFORM_WORKSPACE=ghrun-pr-108
Argument 2:
Argument 3:
Cloning repository ''
fatal: repository '' does not exist

Ignore the mess of cloudwatch that does not sort the log lines correctly between stdout and stderr because it is not your fault:

But the arguments should now be split correctly.
Tell me if there is anything else you need from me before merging this PR :)

This approach is working, I needed to keep testing and I tested it using the branch I pushed: https://github.com/newrelic/nri-oracledb/blob/ebfacc73ad2f7849073b58253bf3d8f075fbf1a1/.github/workflows/push_pr.yml#L58-L74
- name: Provision an Oracle Instance
  uses: newrelic/infrastructure-agent/.github/actions/external_runner@fix/action/external-runner/command-as-slice
  with:
    aws_region: us-east-1
    ecs_cluster_name: github-task-runner
    task_definition_name: github-task--oracledb-e2e-tester
    cloud_watch_logs_group_name: /ecs/github-task-runner
    cloud_watch_logs_stream_name: ecs/provisioner
    aws_vpc_subnet: subnet-07e919557ceb6ebeb
    log_filters: ".*"
    container_make_target: >-
      --verbose
      --repository https://github.com/${{ github.repository }}
      --ref ${{ github.head_ref }}
      --
      provision
        TERRAFORM_WORKSPACE=ghrun-pr-${{ github.event.pull_request.number }}

And it worked!

If you need proof of that, here you have the logs (until GitHub rotates the logs): https://github.com/newrelic/nri-oracledb/runs/7858981012?check_suite_focus=true
The action failed because of an issue with my Makefile, nothing to do with the action itself.


add monorepo support for blazor pilets

This adds a monorepo option.
If enabled the following things are done:

the depenmdencies are not installed
the app shells version will be read from the package inside the monorepo and will be placed inside the pilets dependencies
the appdir is updated inside blazor.codegen

I tested this with a rush repo. can't tell if it'll work with lerna, but i think it will at least benefit lerna as well.

The documentation for this will be added here:
https://github.com/smapiot/piral/pull/479


Update axe-webdriverjs, to also get newer version of axe-core

I'd like to propose updating the axe-webdriverjs dependency to the latest version of 2.0.1. This will also pull in the latest version of axe-core which has a variety of new rules, features and fixes. I also removed the listed dependency on axe-core as it doesn't do anything - the report is generated with rules from the version of axe-core that axe-webdriverjs depends on.

Thanks for your contribution!

Hi Jesse,
Thanks for accepting my PR! Is the package republished in NPM automatically?
On Mon, 5 Nov 2018, 5:14 am Jesse Clark<EMAIL_ADDRESS>wrote:

Merged #8
https://github.com/gearsandcode/protractor-axe-html-report-plugin/pull/8
into master.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/gearsandcode/protractor-axe-html-report-plugin/pull/8#event-1945329081,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ACS2LutJ1WKPst9QElhkWy-dsr951HCZks5ur8kugaJpZM4YM7Kl
.

@brendan-donegan - Not automatically, no. However I did a version bump and an NPM publish. Your changes are available on version 0.1.0. See: https://www.npmjs.com/package/protractor-axe-html-report-plugin

That's awesome, thanks! Just updating our infrastructure to use the newer
version
On Mon, 5 Nov 2018, 7:10 pm Jesse Clark<EMAIL_ADDRESS>wrote:

@brendan-donegan https://github.com/brendan-donegan - Not
automatically, no. However I did a version bump and an NPM publish. Your
changes are available on version 0.1.0. See:
https://www.npmjs.com/package/protractor-axe-html-report-plugin
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/gearsandcode/protractor-axe-html-report-plugin/pull/8#issuecomment-435997770,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ACS2Lk3OaT-W_Z4Ya1kvTX33tRL2Tm4Oks5usI0YgaJpZM4YM7Kl
.

I'll be releasing 1.1.1 later today I hope. It just adds some missing typings and gets the versioning back in line with the Github release.


Defining the values but inferring the keys of an object

This doesn't throw any errors:
type Message = {
  title: string,
  body?: string
};

const foo: {[key: *]: Message} = {
  'foo.bar': {title: 'string'}
}

function getValue(id: $Keys<typeof foo>) {
  return foo[id];
}

getValue('baz')

The existential type in the definition of foo should allow flow to keep its own key inference, but it is lost somewhere.

is inferred as string, so this seems fine

Right, but I want it to be inferred as 'foo.bar'; is there any way to do that?

I don't think so, for the same reason this doesn't works:
const xx: * = 'foo';
const yy: typeof xx = 'bar';

Flow doesn't infer string literals, it infers string with known value, which is subsequently ignored by typeof


Python: New Feature: Function calling in Ollama

With the introduction of Llama 3.1, it's now possible to have function calling on Ollama. We should add function calling to the Ollama connector.
https://ollama.com/blog/tool-support

We will hold off this feature until Ollama adds support for tool calls in streaming and support for tool_choice.


Cache invalidation for Queued transactions

Investigate https://github.com/gnosis/safe-android/issues/835

Could not reproduce with the provided steps neither in production (rinkeby) nor staging (rinkeby).


[BUG] useDrawerForm's submit, form, and defaultFormValues props are not working.

Describe the bug
useDrawerForm and defaultFormValues does not work
Steps To Reproduce
https://codesandbox.io/p/devbox/pedantic-bhabha-jqdy0y?embed=1&file=%2Fsrc%2Fpages%2Fposts%2Flist.tsx%3A47%2C28
Expected behavior
defaultFormValues is work
Packages
{
    "@refinedev/antd": "^5.37.4",
    "@refinedev/cli": "^2.16.26",
    "@refinedev/core": "^4.47.2",
    "@refinedev/react-router-v6": "^4.5.5",
    "@refinedev/simple-rest": "^5.0.2",
    "antd": "^5.0.5",
    "react": "^18.0.0",
    "react-dom": "^18.0.0",
    "react-router-dom": "^6.8.1",
    "typescript": "^4.7.4"
}

Additional Context
No response

Hello @zxdstyle, Thanks for the issue. defaultFormValues should not be available as a prop. We will fix this in the next release.
You can give default values directly from <Form.Item>
  <Form.Item
    label="Title"
    name="title"
    initialValue="default title"
    rules={[
      {
        required: true,
      },
    ]}
  >

Hello again @zxdstyle,
I previously said that defaultFormValues should be removed, but after discussing with the core team, we decided that form hooks should keep the defaultFormValues prop and support this feature.
Thanks for the issue. My PR is under review. If you have any suggestions, please let me know.

That's great, thanks for your work. @alicanerdurmaz


roaming profile

my desktop and documents folder are on a remote server the program doesn't find any repos i have in those folders

I don't understand ...


Steps are not skipped correctly

I have a use case where I have multiple steps (minimum 3).
Say you have this example. Step 1 should not be skipped. Step 2 will be skipped.
The flow in this case skips straight to Step 3 because Step 2 is set to get skipped. The flow marks the original Step 1 which should not be skipped.. as to be skipped. This is just wrong.
The following PR fixes this issue.
https://github.com/craue/CraueFormFlowBundle/pull/203

new PR https://github.com/craue/CraueFormFlowBundle/pull/243

It would still be nice to see a test that fails with a flow containing the original refineCurrentStepNumber method, also to avoid future regressions. So if you're able to prove that it's either a bug or not, let me know.


Update to LibreOffice 6.3 to improve document conversion fidelity

Expected Behavior
Some documents (with floating images) are correctly converted to pdf.
Current Behavior
Some documents (with floating images) are NOT correctly converted to pdf.
Possible Solution
Migrate to libreoffice 6.3 solved this problem.
Context
I've done a migration in my fork using buster-backports.
https://github.com/tiago-soczek/gotenberg/commit/b7dff92050666a41273fc6c516817e8888e8f137
I don't have much expertise with linux, so I don't know if this is the best way.

Hello @tiago-soczek
Thank you for the details. I’ll check it out!


Idea: Consider using Roadie

How does it compare to Juice?
https://github.com/mange/roadie

Not answering your question here, but avoiding ruby dependencies is pry a good move to keep this project more accessible. Roadie is ruby-centric.

Good point. Don't want to go back in that direction.

While Roadie looks interesting, it re-introduces ruby dep.

While Roadie looks interesting, it re-introduces ruby dep.


smithay-clipboard crashes when resizing GUI with the mouse on WSL

Describe the bug
When resizing any examples with the mouse, the app simply crashes.
This is the error that we get:
Io error: Broken pipe (os error 32)
thread 'smithay-clipboard' panicked at 'called `Result::unwrap()` on an `Err` value: OtherError(IoError(Os { code: 32, kind: BrokenPipe, message: "Broken pipe" }))', /home/brandon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/smithay-clipboard-0.7.0/src/worker.rs:98:47
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Aborted

To Reproduce
Steps to reproduce the behavior:

git clone repo
terminal navigate to examples/hello_world
cargo run in terminal
resize gui with mouse
error occurs in terminal and app disappears (see above for error)

Expected behavior
GUI should resize without crashing.
Desktop

OS: WSL2
Version: Ubuntu 22.04

relevant issues / projects:
https://github.com/slint-ui/slint/issues/4089
https://github.com/Smithay/smithay-clipboard/issues/52

@Brandontam29 does this fix it for you:
--- a/crates/egui-winit/Cargo.toml
+++ b/crates/egui-winit/Cargo.toml
@@ -76,7 +76,7 @@ serde = { version = "1.0", optional = true, features = ["derive"] }
 webbrowser = { version = "0.8.3", optional = true }

 [target.'cfg(any(target_os="linux", target_os="dragonfly", target_os="freebsd", target_os="netbsd", target_os="openbsd"))'.dependencies]
-smithay-clipboard = { version = "0.7.0", optional = true }
+smithay-clipboard = { version = "0.6.0", optional = true }

 [target.'cfg(not(target_os = "android"))'.dependencies]
 arboard = { version = "3.2", optional = true, default-features = false }

?

I am having a similar issue (failed unwrap at the same location in smithay-clipboard), except it isn't happening on window resize, and it isn't happening with the demo app, but is happening with a partial copy of the demo app I'm trying to integrate with an existing project.
It would be triggered when I moused-over the app window. Sometimes it would trigger immediately on startup, but not sure if there were maybe input events on the first frame. Otherwise it would wait until I hovered the app (including window border).
curiously, the window borders are different (and resize behavior is a bit different). I haven't been able to figure out what causes that.

The fix mentioned in the above linked issues (copying something to the clipboard after starting the app) fixes it.
Another fix for it is starting the demo app first, then starting my app.
If I trigger the crash for my app while the demo app is open, both crash in the same way.
Both produce the log entry [2024-01-23T03:43:11Z WARN  egui_winit::clipboard] Failed to initialize arboard clipboard: Unknown error while interacting with the clipboard: Connection refused (os error 111) on start
I tried setting smithay-clipboard = { version = "0.6.0", optional = true } earlier, but it didn't help
I went to replicate the issue by copying the demo app from my larger project into it's own directory, and somewhere between taking the above screenshot and running this 3rd app, I lost the ability to replicate the bug (but could do so reliably before).

@Brandontam29 does this fix it for you:
--- a/crates/egui-winit/Cargo.toml
+++ b/crates/egui-winit/Cargo.toml
@@ -76,7 +76,7 @@ serde = { version = "1.0", optional = true, features = ["derive"] }
 webbrowser = { version = "0.8.3", optional = true }

 [target.'cfg(any(target_os="linux", target_os="dragonfly", target_os="freebsd", target_os="netbsd", target_os="openbsd"))'.dependencies]
-smithay-clipboard = { version = "0.7.0", optional = true }
+smithay-clipboard = { version = "0.6.0", optional = true }

 [target.'cfg(not(target_os = "android"))'.dependencies]
 arboard = { version = "3.2", optional = true, default-features = false }

?

It does not help. I'm getting the following error (Debian on WSL2):
Io error: Broken pipe (os error 32)
warning: queue 0x7f28ac000de0 destroyed while proxies still attached:
  wl_data_offer@4278190081 still attached
  wl_data_device@38 still attached
  wl_seat@34 still attached
  wl_data_device_manager@35 still attached
  wl_registry@36 still attached
[2024-01-24T12:29:49Z ERROR arboard::platform::linux::x11] Worker thread errored with: Unknown error while interacting with the clipboard: Connection reset by peer (os error 104)
[2024-01-24T12:29:49Z ERROR arboard::platform::linux::x11] Could not hand the clipboard data over to the clipboard manager: Unknown error while interacting with the clipboard: The X11 server closed the connection
[2024-01-24T12:29:49Z ERROR arboard::platform::linux::x11] Failed to flush the clipboard window. Error: Broken pipe (os error 32)
Io error: Broken pipe (os error 32)
Error: WinitEventLoop(ExitFailure(1))

Also version 0.5.0 crashes. Version 0.4.0 does not compile with the current head, so didn't check that version.

The problems are the unwraps here:
https://github.com/Smithay/smithay-clipboard/blob/858419b586c679dedd46f5347c26b19a7e00c56b/src/worker.rs#L95-L98
Make a PR to smithay-clipboard to replace those unwraps, and replace them with state.reply_tx.send(Err(err)) or a log line.
Any takers?

I found a workaround: you can run it as x11 and not wayland by explicitly including x11 and disabling default features for eframe:
eframe = { version = "0.26.1", features = ["wgpu", "x11"], default-features = false }


Fixed broken links

The link-checking CI job, while useful, is unfortunately holding up several other PRs (as it checks the whole repo, not just the files touched by each PR). This PR temporarily mitigates this by fixing the broken links mentioned in the latest CI run.

/lgtm
/approve

/approve


Add a requirements.txt

List all project's dependencies.
Closes #101
Some points to discuss:

If a wheel is available for PyQt/PySide it installs it, otherwise it does not install PyQt/PySide. Do we want that?
Alternative 1: Do not put pyqt/pyside in requirements.txt and add a requirements-qt.txt for this.
Alternative 2: Choose one e.g., PyQt5 and enforces it (in requirements.txt only)
if h5py is not installed and no wheel is available, it will not be installed

I think it needs discussion. I see advantages and disadvantages in all cases. I guess the problem behind is that pip is not a real packaging tool. Basically the options are:

If a wheel is available for PyQt/PySide it installs it, otherwise it does not install PyQt/PySide.
Do not put pyqt/pyside in requirements.txt
Install PySide because it does not impose anything to the user

Concerning h5py, I guess what will not be installed is h5py (not silx)

Updated:

Add qt_console
Ask for PyQt5 except on Windows with Python 2.7 where it asks for PyQt4
Qt binding and h5py are only installed from wheels not from source.


2021-06-20 10:02:31,629 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Category.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Category.php.
2021-06-20 10:02:31,629 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ProjectBillingInfo.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ProjectBillingInfo.php.
2021-06-20 10:02:31,629 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/UpdateBillingAccountRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/UpdateBillingAccountRequest.php.
2021-06-20 10:02:31,629 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListSkusResponse.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListSkusResponse.php.
2021-06-20 10:02:31,629 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/BillingAccount.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/BillingAccount.php.
2021-06-20 10:02:31,630 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression.php.
2021-06-20 10:02:31,630 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/CreateBillingAccountRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/CreateBillingAccountRequest.php.
2021-06-20 10:02:31,630 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/AggregationInfo.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/AggregationInfo.php.
2021-06-20 10:02:31,630 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListProjectBillingInfoResponse.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListProjectBillingInfoResponse.php.
2021-06-20 10:02:31,631 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListProjectBillingInfoRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListProjectBillingInfoRequest.php.
2021-06-20 10:02:31,631 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/GetProjectBillingInfoRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/GetProjectBillingInfoRequest.php.
2021-06-20 10:02:31,631 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/UpdateProjectBillingInfoRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/UpdateProjectBillingInfoRequest.php.
2021-06-20 10:02:31,632 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression/TierRate.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression/TierRate.php.
2021-06-20 10:02:31,636 synthtool [WARNING] > No replacements made in src/**/V*/**/*.php for pattern final class, maybe replacement is no longer needed?
WARNING:synthtool:No replacements made in src/**/V*/**/*.php for pattern final class, maybe replacement is no longer needed?
2021-06-20 10:02:31,639 synthtool [WARNING] > No replacements made in src/**/V*/**/*.php for pattern public function ([s|g]\w{3,})Unwrapped, maybe replacement is no longer needed?
WARNING:synthtool:No replacements made in src/**/V*/**/*.php for pattern public function ([s|g]\w{3,})Unwrapped, maybe replacement is no longer needed?
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/workspace/synthtool/__main__.py", line 102, in <module>
    main()
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "/workspace/synthtool/__main__.py", line 94, in main
    spec.loader.exec_module(synth_module)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/h/.cache/synthtool/google-cloud-php/Billing/synth.py", line 108, in <module>
    subprocess.run([
  File "/usr/local/lib/python3.8/subprocess.py", line 493, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/local/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/local/lib/python3.8/subprocess.py", line 1704, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'npm'
2021-06-20 10:02:31,683 autosynth [ERROR] > Synthesis failed
2021-06-20 10:02:31,683 autosynth [DEBUG] > Running: git reset --hard HEAD
HEAD is now at 0486bd2d chore: release 0.159.1 (#4134)
2021-06-20 10:02:31,733 autosynth [DEBUG] > Running: git checkout autosynth-billing
Switched to branch 'autosynth-billing'
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/workspace/autosynth/synth.py", line 356, in <module>
    main()
  File "/workspace/autosynth/synth.py", line 191, in main
    return _inner_main(temp_dir)
  File "/workspace/autosynth/synth.py", line 336, in _inner_main
    commit_count = synthesize_loop(x, multiple_prs, change_pusher, synthesizer)
  File "/workspace/autosynth/synth.py", line 68, in synthesize_loop
    has_changes = toolbox.synthesize_version_in_new_branch(synthesizer, youngest)
  File "/workspace/autosynth/synth_toolbox.py", line 259, in synthesize_version_in_new_branch
    synthesizer.synthesize(synth_log_path, self.environ)
  File "/workspace/autosynth/synthesizer.py", line 120, in synthesize
    synth_proc.check_returncode()  # Raise an exception.
  File "/usr/local/lib/python3.8/subprocess.py", line 448, in check_returncode
    raise CalledProcessError(self.returncode, self.args, self.stdout,
subprocess.CalledProcessError: Command '['/workspace/env/bin/python3', '-m', 'synthtool', '--metadata', 'synth.metadata', 'synth.py', '--']' returned non-zero exit status 1.

Google internal developers can see the full log here.

Autosynth is still having trouble generating billing. :sob:
Please investigate and fix this issue within 5 business days.  While it remains broken,
this library cannot be updated with changes to the billing API, and the library grows
stale.
See https://github.com/googleapis/synthtool/blob/master/autosynth/TroubleShooting.md
for trouble shooting tips.
Here's the output from running synth.py:
om protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingInfo.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingInfo.php.
2021-06-21 10:02:12,941 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Category.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Category.php.
2021-06-21 10:02:12,941 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListServicesRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListServicesRequest.php.
2021-06-21 10:02:12,942 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListSkusResponse.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListSkusResponse.php.
2021-06-21 10:02:12,942 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/GetProjectBillingInfoRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/GetProjectBillingInfoRequest.php.
2021-06-21 10:02:12,942 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListProjectBillingInfoRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListProjectBillingInfoRequest.php.
2021-06-21 10:02:12,942 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListSkusRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListSkusRequest.php.
2021-06-21 10:02:12,942 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/GetBillingAccountRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/GetBillingAccountRequest.php.
2021-06-21 10:02:12,943 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/CreateBillingAccountRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/CreateBillingAccountRequest.php.
2021-06-21 10:02:12,943 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListServicesResponse.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListServicesResponse.php.
2021-06-21 10:02:12,943 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListBillingAccountsResponse.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListBillingAccountsResponse.php.
2021-06-21 10:02:12,943 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ProjectBillingInfo.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ProjectBillingInfo.php.
2021-06-21 10:02:12,944 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/UpdateBillingAccountRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/UpdateBillingAccountRequest.php.
2021-06-21 10:02:12,944 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/AggregationInfo.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/AggregationInfo.php.
2021-06-21 10:02:12,944 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListBillingAccountsRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListBillingAccountsRequest.php.
2021-06-21 10:02:12,944 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListProjectBillingInfoResponse.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListProjectBillingInfoResponse.php.
2021-06-21 10:02:12,945 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression.php.
2021-06-21 10:02:12,945 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/BillingAccount.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/BillingAccount.php.
2021-06-21 10:02:12,945 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Sku.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Sku.php.
2021-06-21 10:02:12,945 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression/TierRate.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression/TierRate.php.
2021-06-21 10:02:12,950 synthtool [WARNING] > No replacements made in src/**/V*/**/*.php for pattern final class, maybe replacement is no longer needed?
WARNING:synthtool:No replacements made in src/**/V*/**/*.php for pattern final class, maybe replacement is no longer needed?
2021-06-21 10:02:12,954 synthtool [WARNING] > No replacements made in src/**/V*/**/*.php for pattern public function ([s|g]\w{3,})Unwrapped, maybe replacement is no longer needed?
WARNING:synthtool:No replacements made in src/**/V*/**/*.php for pattern public function ([s|g]\w{3,})Unwrapped, maybe replacement is no longer needed?
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/workspace/synthtool/__main__.py", line 102, in <module>
    main()
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "/workspace/synthtool/__main__.py", line 94, in main
    spec.loader.exec_module(synth_module)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/h/.cache/synthtool/google-cloud-php/Billing/synth.py", line 108, in <module>
    subprocess.run([
  File "/usr/local/lib/python3.8/subprocess.py", line 493, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/local/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/local/lib/python3.8/subprocess.py", line 1704, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'npm'
2021-06-21 10:02:13,003 autosynth [ERROR] > Synthesis failed
2021-06-21 10:02:13,004 autosynth [DEBUG] > Running: git reset --hard HEAD
HEAD is now at 0486bd2d chore: release 0.159.1 (#4134)
2021-06-21 10:02:13,054 autosynth [DEBUG] > Running: git checkout autosynth-billing
Switched to branch 'autosynth-billing'
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/workspace/autosynth/synth.py", line 356, in <module>
    main()
  File "/workspace/autosynth/synth.py", line 191, in main
    return _inner_main(temp_dir)
  File "/workspace/autosynth/synth.py", line 336, in _inner_main
    commit_count = synthesize_loop(x, multiple_prs, change_pusher, synthesizer)
  File "/workspace/autosynth/synth.py", line 68, in synthesize_loop
    has_changes = toolbox.synthesize_version_in_new_branch(synthesizer, youngest)
  File "/workspace/autosynth/synth_toolbox.py", line 259, in synthesize_version_in_new_branch
    synthesizer.synthesize(synth_log_path, self.environ)
  File "/workspace/autosynth/synthesizer.py", line 120, in synthesize
    synth_proc.check_returncode()  # Raise an exception.
  File "/usr/local/lib/python3.8/subprocess.py", line 448, in check_returncode
    raise CalledProcessError(self.returncode, self.args, self.stdout,
subprocess.CalledProcessError: Command '['/workspace/env/bin/python3', '-m', 'synthtool', '--metadata', 'synth.metadata', 'synth.py', '--']' returned non-zero exit status 1.

Google internal developers can see the full log here.

Autosynth is still having trouble generating billing. :sob:
Please investigate and fix this issue within 5 business days.  While it remains broken,
this library cannot be updated with changes to the billing API, and the library grows
stale.
See https://github.com/googleapis/synthtool/blob/master/autosynth/TroubleShooting.md
for trouble shooting tips.
Here's the output from running synth.py:
 > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListServicesResponse.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListServicesResponse.php.
2021-06-22 10:02:02,770 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/BillingAccount.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/BillingAccount.php.
2021-06-22 10:02:02,770 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Category.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Category.php.
2021-06-22 10:02:02,770 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/GetProjectBillingInfoRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/GetProjectBillingInfoRequest.php.
2021-06-22 10:02:02,770 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ProjectBillingInfo.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ProjectBillingInfo.php.
2021-06-22 10:02:02,771 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListSkusResponse.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListSkusResponse.php.
2021-06-22 10:02:02,771 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/CreateBillingAccountRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/CreateBillingAccountRequest.php.
2021-06-22 10:02:02,771 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingInfo.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingInfo.php.
2021-06-22 10:02:02,771 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListServicesRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListServicesRequest.php.
2021-06-22 10:02:02,771 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListBillingAccountsRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListBillingAccountsRequest.php.
2021-06-22 10:02:02,772 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Service.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Service.php.
2021-06-22 10:02:02,772 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListBillingAccountsResponse.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListBillingAccountsResponse.php.
2021-06-22 10:02:02,772 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListSkusRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListSkusRequest.php.
2021-06-22 10:02:02,772 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Sku.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/Sku.php.
2021-06-22 10:02:02,772 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/UpdateBillingAccountRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/UpdateBillingAccountRequest.php.
2021-06-22 10:02:02,773 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/GetBillingAccountRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/GetBillingAccountRequest.php.
2021-06-22 10:02:02,773 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression.php.
2021-06-22 10:02:02,773 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/AggregationInfo.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/AggregationInfo.php.
2021-06-22 10:02:02,773 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListProjectBillingInfoRequest.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/ListProjectBillingInfoRequest.php.
2021-06-22 10:02:02,774 synthtool [INFO] > Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression/TierRate.php.
INFO:synthtool:Replaced 'Generated from protobuf field ([^\\n]{0,})\\n\\s{5}\\*/\\n\\s{4}protected \\$' in src/V1/PricingExpression/TierRate.php.
2021-06-22 10:02:02,778 synthtool [WARNING] > No replacements made in src/**/V*/**/*.php for pattern final class, maybe replacement is no longer needed?
WARNING:synthtool:No replacements made in src/**/V*/**/*.php for pattern final class, maybe replacement is no longer needed?
2021-06-22 10:02:02,782 synthtool [WARNING] > No replacements made in src/**/V*/**/*.php for pattern public function ([s|g]\w{3,})Unwrapped, maybe replacement is no longer needed?
WARNING:synthtool:No replacements made in src/**/V*/**/*.php for pattern public function ([s|g]\w{3,})Unwrapped, maybe replacement is no longer needed?
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/workspace/synthtool/__main__.py", line 102, in <module>
    main()
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/workspace/env/lib/python3.8/site-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "/workspace/synthtool/__main__.py", line 94, in main
    spec.loader.exec_module(synth_module)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/h/.cache/synthtool/google-cloud-php/Billing/synth.py", line 108, in <module>
    subprocess.run([
  File "/usr/local/lib/python3.8/subprocess.py", line 493, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/local/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/local/lib/python3.8/subprocess.py", line 1704, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'npm'
2021-06-22 10:02:02,830 autosynth [ERROR] > Synthesis failed
2021-06-22 10:02:02,830 autosynth [DEBUG] > Running: git reset --hard HEAD
HEAD is now at 9a2c84a6 feat(spanner): add support for RPC Priority (#4018)
2021-06-22 10:02:02,878 autosynth [DEBUG] > Running: git checkout autosynth-billing
Switched to branch 'autosynth-billing'
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/workspace/autosynth/synth.py", line 356, in <module>
    main()
  File "/workspace/autosynth/synth.py", line 191, in main
    return _inner_main(temp_dir)
  File "/workspace/autosynth/synth.py", line 336, in _inner_main
    commit_count = synthesize_loop(x, multiple_prs, change_pusher, synthesizer)
  File "/workspace/autosynth/synth.py", line 68, in synthesize_loop
    has_changes = toolbox.synthesize_version_in_new_branch(synthesizer, youngest)
  File "/workspace/autosynth/synth_toolbox.py", line 259, in synthesize_version_in_new_branch
    synthesizer.synthesize(synth_log_path, self.environ)
  File "/workspace/autosynth/synthesizer.py", line 120, in synthesize
    synth_proc.check_returncode()  # Raise an exception.
  File "/usr/local/lib/python3.8/subprocess.py", line 448, in check_returncode
    raise CalledProcessError(self.returncode, self.args, self.stdout,
subprocess.CalledProcessError: Command '['/workspace/env/bin/python3', '-m', 'synthtool', '--metadata', 'synth.metadata', 'synth.py', '--']' returned non-zero exit status 1.

Google internal developers can see the full log here.

Autosynth passed, closing! :green_heart:


Try to identify when two versions of bicep are installed on the system

Based off of discussion for resolving https://github.com/Azure/bicep/issues/5057#issuecomment-957899059
It would be great if we can try to look for a second install of bicep as that more than likely will only cause problems if you call the wrong/older version by accident

Btw, it's perfectly ok to for us only check in common install locations and miss some custom locations.

👍🏻  to this, perhaps CLI could check if the bicep is installed on the path and determine the version using? if it's there - use it.
For checking if user has the latest version - if the check fails, cli could suggest upgrading by pointing user to aka.ms link with install instructions.
If there is no bicep on the path - just install in the .azure/bin folder.


No way to diagnose 'Unusable' cluster node

I have been trying to create a cluster with the azure cli and a JSON config file. The resulting cluster has the node as 'Unusable'.
I can understand this happens, but my question relates to a method of diagnosing why? There doesn't seem to be any log/reason in the portal and no way to get further details from the CLI other than az batchai cluster list -o table listing it as 1 unusable node.
My process of setup is predominately following Working with models for machine learning and Azure Batch AI - BRK4034. My config and cli usage is:
nc6config.json
{
    "location": "westus2",
    "properties": {
        "vmSize": "STANDARD_NC6",
        "scaleSettings": {
            "manual": {
                "targetNodeCount": 1
            }
        },
        "virtualMachineConfiguration": {
            "imageReference": {
                "offer": "linux-data-science-vm-ubuntu",
                "publisher": "microsoft-ads",
                "sku": "linuxdsvmubuntu",
                "version": "latest"
            }
        },
        "nodeSetup": {
            "mountVolumes": {
                "azureFileShares": [
                    {
                        "accountName": "__AZURE_STORAGE_ACCOUNT__",
                        "azureFileUrl": "https://__AZURE_STORAGE_ACCOUNT__.file.core.windows.net/data",
                        "credentialsInfo": {
                            "accountKey": "__AZURE_STORAGE_KEY__"
                        },
                        "relativeMountPath": "azfiles"
                    }
                ]
            }
        },
        "userAccountSettings": {
            "adminUserName": "damien",
            "adminUserSshPublicKey": "<my-public-key>"
        }
    }
}

CLI
RG_NAME=batch-rg
LOCATION=westus2
export AZURE_BATCHAI_STORAGE_ACCOUNT=pontifexml

az group create \
    -l $LOCATION \
    -n $RG_NAME

az storage account create \
    -g $RG_NAME \
    -n $AZURE_BATCHAI_STORAGE_ACCOUNT \
    --access-tier StandardLRS \
    -l $LOCATION

export AZURE_BATCHAI_STORAGE_KEY=$(az storage account keys list --account-name $AZURE_BATCHAI_STORAGE_ACCOUNT --resource-group $RG_NAME | head -n1 | awk '{print $3}')

az batchai cluster create \
    -g $RG_NAME \
    -n dsvm \
    -c nc6config.json

Hello Damien,
Thank you for reporting the issue. The video you used was created based on private preview version of Batch AI. During release we had to make our CLI extension consistent with others, and changed the way placeholders are defined. If you really need to use them (there are simpler ways to mount AFS and blobs now) specify:
"accountName": "<AZURE_BATCHAI_STORAGE_ACCOUNT>",
"azureFileUrl": "https://<AZURE_BATCHAI_STORAGE_ACCOUNT>.file.core.windows.net/share",
"credentialsInfo": {
"accountKey": "<AZURE_BATCHAI_STORAGE_KEY>"
},
(take a look for example https://github.com/Azure/azure-cli/blob/dev/src/command_modules/azure-cli-batchai/azure/cli/command_modules/batchai/tests/data/cluster_with_azure_files.json).
In your case cluster creation is very simple and doesn't require configuration file at all (please take a look at our recipes, e.g. https://github.com/Azure/BatchAI/blob/master/recipes/TensorFlow/TensorFlow-GPU-Distributed/cli-instructions.md):
$ az batchai cluster create -l eastus -g batch-rg -s Standard_NC6 -i UbuntuDSVM --min 1 --max 1 --storage-account-name pontifexml --afs-name share-u $USER -k ~/.ssh/id_rsa.pub
Returning the main question. Unfortunately, we do not have a simple way to debug such issues in public preview. We will definitely fix it before GA. The only way to debug is to get startup task failure code directly from the node:

get the ssh information for the cluster:
$ az batchai cluster list-nodes -g  -n

get the error.json
$ ssh -p   cat /mnt/batch/tasks/startup/error.json
In your case it should be something like:

{"Code":"AZFMountError","Message":"unable to mount Azure File","Category":"UserError","ExitCode":1,"Details":[{"Key":"azureFileURL","Value":"//AZURE_STORAGE_ACCOUNT.file.core.windows.net/one"}]}

you can take a look at complete startup logs on the node:
$ ssh -p   cat /mnt/batch/tasks/startup/stderr.txt

Thanks,
Alex

Thanks @AlexanderYukhanov that was everything I needed.
One thing I seem to be missing from the CLI vs config files is the vmPriority property. Is it possible to configure the cluster as low priority VMs with the CLI? Or should I create an issue on the az cli repo be more appropriate for this?

It's possible right now, just create a simple cluster.json with the following content:
{
"vmPriority": "lowpriority"
}
and create cluster with the following command line:
$az batchai cluster create -l eastus -g batch-rg -s Standard_NC6 -i UbuntuDSVM --min 1 --max 1 --storage-account-name pontifexml --afs-name share-u $USER -k ~/.ssh/id_rsa.pub -c cluster.json
We will add --low-priority attribute into command line as well in the next release (about 2 weeks).

Yep, this is the same conclusion I came to. Good to see it'll be making its way into the CLI without a config file.
Thanks


Merge compatible to rampup (30 jan 2024)

Simple merge of compatible to rampup, no conflicts happened when merging.
Checklist:

[x] Dependency versions are unchanged

Notify Velocity team if dependencies must change in CI

[x] Modified the current draft of release notes with details on what is completed or incomplete within this project
[x] Document code purpose, how to use it

Mention expected invariants, implicit constraints

[x] Tests were added for the new behavior

Document test purpose, significance of failures
Test names should reflect their purpose

[x] All tests pass (CI will check this if you didn't)
[x] Serialized types are in stable-versioned modules
[x] Does this close issues? None

!ci-build-me

!approved-for-mainnet


FirebaseInstanceIdService is obsolete

It looks like there's some outdated information on this page. The section Implement the Firebase Instance ID Service is outdated and reference obsolete code. The token registration logic should now be within the object inhiriting FirebaseMessagingService.

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

ID: 8d9bfb2a-2e5d-d505-337f-919251a85de3
Version Independent ID: 695bff64-ae87-8c0f-5616-20b67893fdf0
Content: Remote Notifications with Firebase Cloud Messaging - Xamarin
Content Source: docs/android/data-cloud/google-messaging/remote-notifications-with-fcm.md
Product: xamarin
Technology: xamarin-android
GitHub Login: @davidortinau
Microsoft Alias: daortin

Thanks for submitting an issue and we apologize for the delayed response. The requested updates haven't been made since the creation of the issue, and the timeline for resolution may vary based on resourcing, so the issue is being moved to an internal repo to better track it.


[AKS] list available k8s versions, add tab completers, refactor code

Note that this is a breaking change since it renames a command--see the second and third bullet points below. But AKS is still in preview, and since az aks get-versions actually returned only upgrades available, I think this change is warranted. Feedback is more than welcome.
cc: @sauryadas @slack

Use azure-mgmt-containerservice 3.0.1 package with fixed listOrchestrators endpoint (see Azure/azure-rest-api-specs#2327 and Azure/azure-sdk-for-python#1832)
Rename az aks get-versions to az aks get-upgrades, because that's what it did
Reimplement az aks get-versions to return Kubernetes versions available for creating a cluster (using the aforementioned listOrchestrators endpoint)
Add tab-completion for the --kubernetes-version argument to az aks create
Add tab-completion for the --kubernetes-version argument to az aks upgrade
Rewrite formatters to use JMESPath queries
Refer to current, preferred Kubernetes versions 1.7.12 and 1.8.7 consistently
Update help message to refer to correct service principal cache file for AKS
Add new commands to AKS scenario tests and re-record them all

Closes #5461

This checklist is used to make sure that common guidelines for a pull request are followed.
General Guidelines

[X] The PR has modified HISTORY.rst describing any customer-facing, functional changes. Note that this does not include changes only to help content. (see Modifying change log).

Command Guidelines

[X] Each command and parameter has a meaningful description.
[X] Each new command has a test.

(see Authoring Command Modules)

View a preview at https://prompt.ws/r/Azure/azure-cli/5475
This is an experimental preview for @microsoft users.

@brendandburns and the rest of the AKS team thought it was reasonable to make this breaking change at this point, if the CLI team is ok with it. It's unlikely anyone has built scripting around the az aks get-versions command yet, and this will be more coherent going forward.

I think its okay to break while we are in preview. Unfortunately , using az aks get-versions to list versions available for upgrade is kind of misleading and fixing it is better now.

The deprecation info is going to be super useful .. thanks both!!
Best
Saurya
From: Matt Boersma<EMAIL_ADDRESS>Sent: Tuesday, February 6, 2018 11:42 AM
To: Azure/azure-cli<EMAIL_ADDRESS>Cc: Saurya Das<EMAIL_ADDRESS>Mention<EMAIL_ADDRESS>Subject: Re: [Azure/azure-cli] [AKS] list available k8s versions, add tab completers, refactor code (#5475)
@mboersma commented on this pull request.

In src/command_modules/azure-cli-acs/azure/cli/command_modules/acs/commands.pyhttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FAzure%2Fazure-cli%2Fpull%2F5475%23discussion_r166420584&data=02|01|saudas%40microsoft.com|566704c36abb40ece25c08d56d99a09f|ee3303d7fb734b0c8589bcd847f1c277|1|0|636535428951283777&sdata=pgGITLk%2Fnx8DWYrPSETj4y%2Bt1h%2FlCk7syaPI%2FKIlFhw%3D&reserved=0:

@@ -57,7 +58,7 @@ def load_command_table(self, _):

     g.custom_command('create', 'aks_create', no_wait_param='no_wait')

     g.command('delete', 'delete', no_wait_param='raw', confirmation=True)

     g.custom_command('get-credentials', 'aks_get_credentials')

   g.command('get-versions', 'get_upgrade_profile', table_transformer=aks_get_versions_table_format)

That's great 👍, I wasn't aware of the deprecation feature. I'll add that later today.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FAzure%2Fazure-cli%2Fpull%2F5475%23discussion_r166420584&data=02|01|saudas%40microsoft.com|566704c36abb40ece25c08d56d99a09f|ee3303d7fb734b0c8589bcd847f1c277|1|0|636535428951283777&sdata=pgGITLk%2Fnx8DWYrPSETj4y%2Bt1h%2FlCk7syaPI%2FKIlFhw%3D&reserved=0, or mute the threadhttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAOrMbyLsKHY2DNEhbaSe72T-3yYynUlKks5tSKrtgaJpZM4R4x0q&data=02|01|saudas%40microsoft.com|566704c36abb40ece25c08d56d99a09f|ee3303d7fb734b0c8589bcd847f1c277|1|0|636535428951283777&sdata=Kqtb2jCQPWPNey%2BMTmoff6IINKgACGu9eDsarK%2BBclA%3D&reserved=0.

Since I just hit this issue, you split get-versions and get-upgrades so that people can access basically the same information but before and after creating the cluster, correct?
If so, why does get-versions also returns upgrade paths?

why does get-versions also return upgrade paths?

Because that's considered useful associated information, but more specifically because the raw JSON response for both commands is basically the same. The real difference is get-versions returns versions and upgrades available in general, while get-upgrades returns only the upgrade versions available to a specific cluster.


Missing pre-reqs

There should be a pre-req session with the tools and products needed to go thru the lab. Such as the git command.

thank you @LennartFr - let me update it

@LennartFr  - i updated the readme along with adding some fixes. let me know if you there is anything missing.


chore(deps): update module golang.org/x/sys to v0.24.0

This PR contains the following updates:

Package
Type
Update
Change

golang.org/x/sys
indirect
minor
v0.22.0 -> v0.24.0

Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.

[ ] If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

⚠ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

any of the package files in this branch needs updating, or
the branch becomes conflicted, or
you click the rebase/retry checkbox if found above, or
you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:
File name: go.sum
Command failed: install-tool golang 1.22.6

⚠ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

any of the package files in this branch needs updating, or
the branch becomes conflicted, or
you click the rebase/retry checkbox if found above, or
you rename this PR's title to start with "rebase!"  You will get a PR once a newer version is released. To ignore this dependency forever, add it to the ignoreDeps array of your Renovate config.
If you accidentally closed this PR, or if you changed your mind: rename this PR to get a fresh replacement PR.


Toggling between More and Less in your Featured Speakers section

Great job with your project, however.

Consider calling createSpeakers function without an argument. This is because you created it without parameters.

Ok, thank you for the recommendation.
I will look into it.


GVR_VK_CHECK: replace the use of assert

GearVRf-DCO-1.0-Signed-off-by: Mihail Marinov<EMAIL_ADDRESS>

Planning to merge on Monday.
assert is noop in release builds which doesn't look appropriate to me for GVR_VK_CHECK.


Update the nuspec and readme files.

This has been published to nuget.

Thanks @devinmartin :smiley:


SignalR input binding interaction

What version of .NET does your existing project use?
.NET 6
What version of .NET are you attempting to target?
.NET 8
Description
Prerequisites:

Azure Function Isolated worker model, .NET 8.0
Function has:

HttpTrigger
One SignalR input binding to obtain connection info on Negotiation - URL and access token

I have slightly complex logic to define UserId parameter for SignalR input binding. So, I can't use binding expression semantic:
[SignalRConnectionInfoInput(HubName = "{headers.hub}", ConnectionStringSetting = "SignalRConnection", UserId = "{headers.userId")]`

Is it possible to:

Make an impact to the SignalR binding somehow? Handler to configure its options or interceptor to affect its execution at runtime etc...
or
Have an access to request before input binding occurrence, to put calculation logic there and operate through binding expression (headers, queries) further? I have tried middleware, but unfortunately, input binding occurs before the middleware processing.

Any other ideas?
Class-based model approach is not suitable for me, as there is need to have one function for many hubs.
Project configuration and dependencies

Link to a repository that reproduces the issue
No response

Hi @agerasko , as far as I know, currently it's no delayed binding solution (Please correct me if am wrong). I'd suggest you using management SDK to generate the client access token instead of SignalR input binding.
As the latest SignalR worker extensions package already relies on SignalR management SDK, you don't need to refer to it by yourself.
Here is a code snippet to generate client access token:
#pragma warning disable CS0618 // Type or member is obsolete
var serviceManager = new ServiceManagerBuilder()
    .WithOptions(o =>
    {
        o.ConnectionString = "<connection-string>";
    })
    .Build(); // serviceManager instance can be a global one.
var token = serviceManager.GenerateClientAccessToken(hubName, user);
var clientEndpoint = serviceManager.GetClientEndpoint(hubName);
return  new
            {
                url = endpoint,
                accessToken = token
            };

The ServiceManagerBuilder.Build method is obsolete but we don't have plans to remove it, so it's safe to use and more suitable for you if you have many hubs. Here is the management SDK doc for most users who only have a fixed number of hubs: https://learn.microsoft.com/en-us/azure/azure-signalr/signalr-howto-use-management-sdk#negotiation


Quest 2 Compatibility

Would you expect this to work on a Quest 2 also?

This should work with a Quest 2, but you may not see the same performance as a Quest 3 / 3S. The recommended headset for this application is the Quest 3S.

Could you link the 3D print or whatever you were using to hold it?

I'm working on designing a mount that's printable using an FDM printer. I should have something to share in a few days!

I will still try the quest 2 later
Here is the 3D Print it worked well:
https://www.asurion.com/connect/tech-tips/how-to-factory-reset-meta-quest-3/


Giving errors while installing on UBUNTU 18.04 LTS.

Error:
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in
from pip import main
ImportError: cannot import name main
While using pip install -r requirements.txt

Its also giving error while executing the script on Ubuntu 18.04 lts:
Traceback (most recent call last):
File "instagram.py", line 8, in
from lib.bruter import Bruter
File "/home/anonymous/Documents/Ethical Hacking/Instagram/lib/bruter.py", line 6, in
from .spyder import Spyder
File "/home/anonymous/Documents/Ethical Hacking/Instagram/lib/spyder.py", line 5, in
from .src.atom import Atom
File "/home/anonymous/Documents/Ethical Hacking/Instagram/lib/src/atom.py", line 5, in
from lib.wrap import Wrapper
ModuleNotFoundError: No module named 'lib.wrap'

I'll fix it

Cool

ERROR:
Traceback (most recent call last):
File "instagram.py", line 6, in
from lib.bruter import Bruter
File "/home/rama/Downloads/Instagram-master/lib/bruter.py", line 8, in
from .display import Display
File "/home/rama/Downloads/Instagram-master/lib/display.py", line 8, in
from colorama import Fore
ImportError: No module named colorama


init process with Emissary executor

Summary
The emissary executor runs as PID 1, which means that the subprocess runs cannot. This is a problem for people using tools like tiny and dumb-init as their init process. They loose features like zombie process reaping.
tests-jobs-minutely-1637595840: [WARN  tini (22)] Tini is not running as PID 1 and isn't registered as a child subreaper.
tests-jobs-minutely-1637595840: Zombie processes will not be re-parented to Tini, so zombie reaping won't work.

Options

Do nothing. The Emissary already forwards kill signals correctly. It does not reap zombies.
Make the Emissary take on init duties, specifically the reaping of Zombies. This is a clear improvement over other executors. example
Put an init binary into the argoexec image (like we do in Dataflow) and wrap the emissary in that process. Easy and robust, but damages security posture.

Key lines of code
https://github.com/argoproj/argo-workflows/blob/0ea85547984583d4919b8139ffd0dc3d2bdaf05e/cmd/argoexec/commands/emissary.go#L66
https://github.com/argoproj/argo-workflows/blob/0ea85547984583d4919b8139ffd0dc3d2bdaf05e/cmd/argoexec/commands/emissary.go#L112
https://github.com/pablo-ruth/go-init/blob/30e47fe6f58c0e7fb5dfd12525b583639c7bda92/main.go#L152

Message from the maintainers:
Love this enhancement proposal? Give it a 👍. We prioritise the proposals with the most 👍.

diff --git a/examples/hello-world.yaml b/examples/hello-world.yaml
index 0141da684..879a8c014 100644
--- a/examples/hello-world.yaml
+++ b/examples/hello-world.yaml
@@ -2,17 +2,13 @@ apiVersion: argoproj.io/v1alpha1
 kind: Workflow
 metadata:
   generateName: hello-world-
-  labels:
-    workflows.argoproj.io/archive-strategy: "false"
-  annotations:
-    workflows.argoproj.io/description: |
-      This is a simple hello world example.
-      You can also run it in Python: https://couler-proj.github.io/couler/examples/#hello-world
 spec:
   entrypoint: whalesay
   templates:
-  - name: whalesay
-    container:
-      image: docker/whalesay:latest
-      command: [cowsay]
-      args: ["hello world"]
+    - name: whalesay
+      container:
+        image: docker/whalesay:latest
+        command: [ sh, -c ]
+        args:
+          - |
+            sleep 15s
diff --git a/test/e2e/testdata/zombie-workflow.yaml b/test/e2e/testdata/zombie-workflow.yaml
index e69de29bb..c1b2b28e5 100644
--- a/test/e2e/testdata/zombie-workflow.yaml
+++ b/test/e2e/testdata/zombie-workflow.yaml
@@ -0,0 +1,34 @@
+apiVersion: argoproj.io/v1alpha1
+kind: Workflow
+metadata:
+  generateName: zombie-
+spec:
+  entrypoint: main
+  templates:
+    - name: main
+      container:
+        image: argoproj/argosay:v2
+        command:
+          - bash
+          - -c
+        args:
+          - |
+            set -ex
+            cat > zombie.c <<EOF
+            #include <stdlib.h>
+            #include <sys/types.h>
+            #include <unistd.h>
+            int main () {
+              pid_t child_pid;child_pid = fork ();
+              if (child_pid > 0) {
+                sleep (60);
+              } else {
+                exit (0);
+              }
+              return 0;
+            }
+            EOF
+            sudo apt-get update
+            sudo apt-get install -y build-essential
+            cc zombie.c -o zombie
+            ./zombie
\ No newline at end of file
diff --git a/workflow/executor/os-specific/signal_darwin.go b/workflow/executor/os-specific/signal_darwin.go
index 2c51e082d..69b7fe1af 100644
--- a/workflow/executor/os-specific/signal_darwin.go
+++ b/workflow/executor/os-specific/signal_darwin.go
@@ -3,6 +3,7 @@ package os_specific
 import (
 	"os"
 	"syscall"
+	"time"
 )

 func IsSIGCHLD(s os.Signal) bool { return s == syscall.SIGCHLD }
@@ -18,3 +19,28 @@ func Kill(pid int, s syscall.Signal) error {
 func Setpgid(a *syscall.SysProcAttr) {
 	a.Setpgid = true
 }
+
+func ReapZombies(stopCn chan struct{}) {
+	for {
+		select {
+		case <-stopCn:
+			return
+		default:
+			var status syscall.WaitStatus
+
+			// Wait for orphaned zombie process
+			pid, _ := syscall.Wait4(-1, &status, syscall.WNOHANG, nil)
+
+			if pid <= 0 {
+				// PID is 0 or -1 if no child waiting
+				// so we wait for 1 second for next check
+				time.Sleep(1 * time.Second)
+			} else {
+				// PID is > 0 if a child was reaped
+				// we immediately check if another one
+				// is waiting
+				continue
+			}
+		}
+	}
+}
diff --git a/workflow/executor/os-specific/signal_linux.go b/workflow/executor/os-specific/signal_linux.go
index 2c51e082d..69b7fe1af 100644
--- a/workflow/executor/os-specific/signal_linux.go
+++ b/workflow/executor/os-specific/signal_linux.go
@@ -3,6 +3,7 @@ package os_specific
 import (
 	"os"
 	"syscall"
+	"time"
 )

 func IsSIGCHLD(s os.Signal) bool { return s == syscall.SIGCHLD }
@@ -18,3 +19,28 @@ func Kill(pid int, s syscall.Signal) error {
 func Setpgid(a *syscall.SysProcAttr) {
 	a.Setpgid = true
 }
+
+func ReapZombies(stopCn chan struct{}) {
+	for {
+		select {
+		case <-stopCn:
+			return
+		default:
+			var status syscall.WaitStatus
+
+			// Wait for orphaned zombie process
+			pid, _ := syscall.Wait4(-1, &status, syscall.WNOHANG, nil)
+
+			if pid <= 0 {
+				// PID is 0 or -1 if no child waiting
+				// so we wait for 1 second for next check
+				time.Sleep(1 * time.Second)
+			} else {
+				// PID is > 0 if a child was reaped
+				// we immediately check if another one
+				// is waiting
+				continue
+			}
+		}
+	}
+}
diff --git a/workflow/executor/os-specific/signal_windows.go b/workflow/executor/os-specific/signal_windows.go
index 27c295d4d..9ff290b8a 100644
--- a/workflow/executor/os-specific/signal_windows.go
+++ b/workflow/executor/os-specific/signal_windows.go
@@ -23,3 +23,7 @@ func Kill(pid int, s syscall.Signal) error {
 func Setpgid(a *syscall.SysProcAttr) {
 	// this does not exist on windows
 }
+
+func ReapZombies(stopCn chan struct{}) {
+	// not supported
+}

I've made a few attempts to reproduce this issue, but I think we are probably dealing with orphans zombie processes correctly.
We should probably mention in the docs you do not need dumb-init with the Emissary.

FYI, I'm experiencing something that looks very much like this.
argoexec: v3.3.0
  BuildDate: 2022-03-14T21:39:34Z
  GitCommit: c6f1e4a0ece96f774f75699eba741dc85af18f31
  GitTreeState: clean
  GitTag: v3.3.0
  GoVersion: go1.17.8
  Compiler: gc
  Platform: linux/amd64

ps ax in the pod:
    PID TTY      STAT   TIME COMMAND
      1 ?        Ssl    0:00 /var/run/argo/argoexec emissary -- /src/ci/run
    197 ?        S      0:00 bash /src/ci/run-npm
   5361 pts/0    Ss     0:00 bash -l
   8010 ?        S      0:00 sleep 1
   8011 pts/0    R+     0:00 ps ax

ReapZombies

Hi alexec,  why ReapZombies cannot be found in the v3.3.8 ?

@alexec

After some work, someone could try this solution for v3.3.8:
--- a/workflow/executor/os-specific/signal_linux.go
+++ b/workflow/executor/os-specific/signal_linux.go
@@ -2,7 +2,11 @@ package os_specific
import (
"os"

  "os/signal"
  "syscall"

  "github.com/argoproj/argo-workflows/v3/util/errors"

  "golang.org/x/sys/unix"

)
func IsSIGCHLD(s os.Signal) bool { return s == syscall.SIGCHLD }
@@ -18,3 +22,67 @@ func Kill(pid int, s syscall.Signal) error {
func Setpgid(a *syscall.SysProcAttr) {
a.Setpgid = true
}
+
+func Wait(process *os.Process) error {

  // We must copy the behaviour of Kubernetes in how we handle sub-processes.

  // Kubernetes only waits on PID 1, not on any sub-process that process might fork.

  // The only way for those forked processes to run in the background is to background the

  // sub-process by calling Process.Release.

  // Background processes always become zombies when they exit.

  // Because the sub-process is now running in the background it will become a zombie,

  // so we must wait for it.

  // Because we run the process in the background, we cannot Process.Wait for it to get the exit code.

  // Instead, we can reap it to get the exit code

  pid := process.Pid

  if err := process.Release(); err != nil {

          return err

  }

  c := make(chan os.Signal, 1)

  signal.Notify(c, unix.SIGCHLD)

  for {

          // Block for an incoming signal that a child has exited.

          // Attempt to reap all abandoned child processes

  POLL:

          // Try to reap children until there aren't any more.  Any

          // stragglers should get reaped the next time we see a

          // signal, so we won't leak in the long run.

          var status unix.WaitStatus

          wpid, err := unix.Wait4(-1, &status, unix.WNOHANG, nil)

          if wpid == pid {

                  return errors.NewExitErr(status.ExitStatus())

          }

          switch err {

          case nil:

                  // Got a child, clean this up and poll again.

                  if pid > 0 {

                          goto POLL

                  }

                  return err

          case unix.ECHILD:

                  // No more children, we are done.

                  return nil

          case unix.EINTR:

                  // We got interrupted, try again. This likely

                  // can't happen since we are calling Wait4 in a

                  // non-blocking fashion, but it's good to be

                  // complete and handle this case rather than

                  // fail.

                  goto POLL

          default:

                  // We got some other error we didn't expect.

                  // Wait for another SIGCHLD so we don't

                  // potentially spam in here and chew up CPU.

                  return err

          }

  }

+}


Automated cherry pick of #6936

Cherry pick of #6936 on release-5.29.
/cc  @srkgupta

Will try to auto merge this PR once all tests and checks are passing. This might take up to an hour.

Trying to auto merge this PR.

Pull Request successfully merged
SHA: 99e70ba4c8bbe4f31164427897bec303a9086fc2


Running test with --code-coverage fail with @angular-devkit/build-angular 14.0.3

🐞 Bug report
Command (mark with an x)
ng test --code-coverage

[ ] new
[ ] build
[ ] serve
[x] test
[ ] e2e
[ ] generate
[ ] add
[ ] update
[ ] lint
[ ] extract-i18n
[ ] run
[ ] config
[ ] help
[ ] version
[ ] doc

Is this a regression?
Yes. @angular-devkit/build-angular 14.0.2 works as expected.
Description
An error is thrown when running tests.
🔬 Minimal Reproduction
Just run test with code coverage
🔥 Exception or Error
⠋ Generating browser application bundles (phase: setup)...An unhandled exception occurred: EACCES: permission denied, scandir '/boot/efi'
And the angular log contain :
[error] Error: EACCES: permission denied, scandir '/boot/efi'
at Object.readdirSync (node:fs:1405:3)
at GlobSync._readdir (/home/damob/projects/pm2/frontend/node_modules/@angular-devkit/build-angular/node_modules/glob/sync.js:288:46)
at GlobSync._readdirInGlobStar (/home/damob/projects/pm2/frontend/node_modules/@angular-devkit/build-angular/node_modules/glob/sync.js:267:20)
at GlobSync._readdir (/home/damob/projects/pm2/frontend/node_modules/@angular-devkit/build-angular/node_modules/glob/sync.js:276:17)
at GlobSync._processReaddir (/home/damob/projects/pm2/frontend/node_modules/@angular-devkit/build-angular/node_modules/glob/sync.js:137:22)
at GlobSync._process (/home/damob/projects/pm2/frontend/node_modules/@angular-devkit/build-angular/node_modules/glob/sync.js:132:10)
at GlobSync._processGlobStar (/home/damob/projects/pm2/frontend/node_modules/@angular-devkit/build-angular/node_modules/glob/sync.js:380:10)
at GlobSync._process (/home/damob/projects/pm2/frontend/node_modules/@angular-devkit/build-angular/node_modules/glob/sync.js:130:10)
at GlobSync._processGlobStar (/home/damob/projects/pm2/frontend/node_modules/@angular-devkit/build-angular/node_modules/glob/sync.js:383:10)
at GlobSync._process (/home/damob/projects/pm2/frontend/node_modules/@angular-devkit/build-angular/node_modules/glob/sync.js:130:10)
🌍 Your Environment

Angular CLI: 14.0.3
Node: 16.15.0
Package Manager: yarn 3.2.1
OS: linux x64

Angular: 14.0.3
... animations, cdk, cli, common, compiler, compiler-cli, core
... forms, material, material-moment-adapter, platform-browser
... platform-browser-dynamic, router

Package                         Version
---------------------------------------------------------
@angular-devkit/architect       0.1400.3
@angular-devkit/build-angular   14.0.3
@angular-devkit/core            14.0.3
@angular-devkit/schematics      14.0.3
@angular/flex-layout            13.0.0-beta.38
@schematics/angular             14.0.3
ng-packagr                      14.0.2
rxjs                            7.5.5
typescript                      4.7.4

Can you share the test section of your angular.json?

Sure. That being said, test run correctly without --code-coverage

                "test": {
                    "configurations": {
                        "ci": {
                            "karmaConfig": "projects/investors/karma.conf.ci.js"
                        }
                    },
                    "builder": "@angular-devkit/build-angular:karma",
                    "options": {
                        "main": "projects/investors/src/test.ts",
                        "polyfills": "projects/investors/src/polyfills.ts",
                        "tsConfig": "projects/investors/tsconfig.spec.json",
                        "karmaConfig": "projects/investors/karma.conf.js",
                        "codeCoverageExclude": [
                            "/**/*.module.ts",
                            "/**/providers.ts"
                        ]
                    }
                },

In general we don’t expect paths to start with a forward slash.
As a workaround you could remove the leading / from the codeCoverageExclude paths.

You think it's only that ? I'll try

You think it's only that ? I'll try

Yes

I does fix the problem, thank you really much!


Reduce amount of db calls while check permissions

The current issue with isNotAuthorizedUser is that it goes each time to db
the idea of this optimization especially for the code like that
if (!commonUtilsService.isNotAuthorizedUser(
            getPrincipal(), PermissionType.SYNC_BACK_SUBSCRIPTIONS)
        || !commonUtilsService.isNotAuthorizedUser(getPrincipal(), PermissionType.SYNC_TOPICS)
        || !commonUtilsService.isNotAuthorizedUser(
            getPrincipal(), PermissionType.SYNC_SUBSCRIPTIONS)
        || !commonUtilsService.isNotAuthorizedUser(
            getPrincipal(), PermissionType.SYNC_BACK_TOPICS)) {
...

retrieve permisions for current pricipal and then check against them instead of going to db for each check

@aindriu-aiven could you please have a look once more since there were conflicts which I haad to resolve
as a result GHA wants another approval after that


Fix toast severity for RBAC updating failure

What this PR does / why we need it:
Which issue(s) this PR fixes:
Fixes #
Does this PR introduce a user-facing change?:

Fix toast severity for RBAC updating failure

/approve
Thanks 🙏


[SMALLFIX] Fixed Javadoc in BlockLockManagerTest

Fixed Javadoc in the BlockLockManagerTest class.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/9981/
Test PASSed.

LGTM, just left a minor comment

@aaudiber Thanks for the comment. I updated the PR accordingly.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/10020/
Test PASSed.

Merged build finished. Test PASSed.

Thanks, LGTM


NetStandard.Library 2.1 required, latest version is 2.0.3

When I try to install this package through NuGet, it fails with the complaint that it's not compatible with NetStandard.Library 2.0 and that I need 2.1
The only issue is that there's no 2.1 NetStandard.Library available to me.
I'm on the latest release of that package and that's 2.0.3
Here's a screen showing that I can't update my version any higher
https://drive.google.com/open?id=15WOeztPKYt-MfhZPLIhBc_3YUrGJekkZ
and here's the package requiring 2.1
https://drive.google.com/open?id=1UVytQ7jorgePWdn54E7qyS-v8Jl4ZqpI
and I'm using Visual Studio Community 2017 on Windows 10 Pro
Is there anything I have to do to be able to get NetStandard.Library 2.1?

Is there anything I have to do to be able to get NetStandard.Library 2.1?
You can fork this repository and downgrade to NetStandart 2.0, but it's better to wait until I add support of both versions. Will add it soon.

Is there anything I have to do to be able to get NetStandard.Library 2.1?
You need Net Core 3.0 to use Net Standard 2.1, and it looks like it is not supported for VS 2017.
You can fork this repository and downgrade to NetStandart 2.0, but it's better to wait until I add support of both 2.0 and 2.1 versions. I will add it soon.

Hi.
ColorPicker is supporting Net Standard 2.0 and 2.1, so you can use it in your project without upgrade to 2.1


add moby-cli and moby-engine to containerd vhd, no longer build docker vhds

What type of PR is this?

What this PR does / why we need it:
This PR brings in changes to the VHD build process. We're now installing moby-cli and moby-engine when building containerd VHDs so we no longer need to build independent docker-based VHDs, which are no longer being built also as a part of these changes.
Requirements:

[ ] uses conventional commit messages

[ ] includes documentation
[ ] adds unit tests
[ ] tested upgrade from previous version

Special notes for your reviewer:
Release note:
none

should update this bit to force both? https://github.com/Azure/AgentBaker/blob/0b9d929a71b540a72040e69534bbf6503cf99f96/parts/linux/cloud-init/artifacts/cse_main.sh#L181-L185

should update this bit to force both?
https://github.com/Azure/AgentBaker/blob/0b9d929a71b540a72040e69534bbf6503cf99f96/parts/linux/cloud-init/artifacts/cse_main.sh#L181-L185

I figured these two would clash if they both ran, I guess that's not the case?

right now they disable each other, I think we can just merge the logic.
as-is, when we boot up the containerd vhd, dockerd will get disabled, so we can't share the vhd :D

as-is, when we boot up the containerd vhd, dockerd will get disabled, so we can't share the vhd :D

I guess that's not true since it will come from RP, so maybe this is fine...let me marinate on that

so...installStandaloneContainerd will install it, but then ensureContainerd would remove it for docker vhd...
ensure docker would remove containerd tho...actually not even sure how that works right now? I suppose docker might be running its own containerd daemon, not a separate unit.
I think if we actually want to use the containerd unit we install, we should always manually be installing both containerd and docker like in installStandaloneContainerd, and ensureDocker/ensureContainerd should not remove their counterparts?
but then it might make sense to merge a bit more code...


Rewrite first paragraph

The first paragraph is critical for open source tool promotion. We spend few days in rewriting main thee first sentence in PostCSS docs.
The current first paragraph is good, but we can do it better:

Explain what is a difference. Most styled-components users don’t know how it works inside.
Use simple English since most of the developers are not English native speakers.
Talk to users of non-CSS-in-JS solutions

My first draft (it definitely should be changes, at least English should be fixed):

astroturf is zero-runtime CSS-in-JS. In contrast to styled-components it doesn’t compile CSS in brower. astroturf use Babel to compile styled to static CSS once on deploy for better perfomance. It’s just works with CSS, PostCSS, Less, Sass, or any other css preprocessor, and plays nicely with existing style tooling like mini-css-extract-plugin.
[code example]
astroturf allows you to write CSS in JS files, so have the whole component in the single file. Like CSS Modules it has built-in CSS isolation for better code maintainability.

thanks for bringing this up, the heading leaves much to be desired 👍
How about something like:

co-locate styles and JS with component scoped isolation and zero-runtime. Unlike other libraries astroturf extracts inline CSS at build time so there is no runtime performance overhead compared to plain css. astroturf leverages css-modules and is the perfect companion to Sass, Less, PostCSS, or whatever other css tooling you already use.

Cool, everything in one paragraph.
But should we use “CSS-in-JS” word somewhere at the beginning for people who will just scan text for trend words (most of the people need some trends to find a reason even a read a description of the library)?
Words “co-locale” and “leverages” and now very popular, it is hard to understand when you do not sure about how the project is important for you.

yeah it's a bit tough, I tend to see this project having two main audiences.

People who are familiar with emotion/SC but want something less runtime dependent
Folks who are wary of css-in-js and want the benefits without opting into a new ecosystem

I think you are probably coming from the first one and I tend to think more like the second. I think we do need to find a good middle ground that quickly exposes both audiences to the info they are interested in.

Yeap, tricky case. I think:

We can cover both audiences in 2 paragraphs.
The CSS-in-JS audience could be more important (because they are more like to switch technologies) so we can put a description for them in the first paragraph. And in the second describe benefits for CSS-out-JS audience.

astroturf
astroturf lets you write CSS in your JavaScript files without adding any runtime layer, and with your existing CSS processing pipeline. Using astroturf, you can write CSS in a template literal, then use it as if it were in a separate file. astroturf gives many of the same benefits as CSS-in-JS, but without the loss of flexibility in requiring framework-specific CSS processing, and while keeping all of the emitted CSS fully static. With astroturf, you can keep using your existing tools – Sass, PostCSS, Less – but still write your style definitions in your JavaScript files.
astroturf transforms:

We may want to use a screenshot here with a two-column layout to reduce the amount of vertical space used.

Widget.js
import { css } from 'astroturf';
import React from 'react';

const styles = css`
  .widget {
    color: red;
  }
`;

export default function Widget() {
  return
Widget
;
}

into:
Widget.css
.widget {
  color: red;
}

Widget.js
import React from 'react';

import './Widget.css';

export default function Widget() {
  return
Widget
;
}

astroturf also provides a simple styled-components-style API to make it easy to style presentational components, while still keeping all of your styling static:
import styled from 'astroturf';

const Widget = styled('div')`
  color: red;
`;

export default Widget;

Or perhaps:

astroturf lets you write CSS in your JavaScript files without adding any runtime layer, and with your existing CSS processing pipeline. astroturf lets you:

Write CSS in a template literal, then use it as if it were in a separate file
Get many of the same benefits as CSS-in-JS, but without the loss of flexibility in requiring framework-specific CSS processing, and while keeping all of the emitted CSS fully static
Use your existing tools – Sass, PostCSS, Less – but still write your style definitions in your JavaScript files

I like the list. It is easy to overview the idea before reading when text has good structure.
What if we even highlight the main ideas:
With astroturf, you can:

Zero runtime CSS-in-JS. Get many of the same benefits as CSS-in-JS, but without the loss of flexibility in requiring framework-specific CSS processing, and while keeping all of the emitted CSS fully static
Use your existing tools – Sass, PostCSS, Less – but still write your style definitions in your JavaScript files
Whole component in the single file. Write CSS in a template literal, then use it as if it were in a separate file

I like that.