chromium: added patch for declarative extension installation

Description of changes

Added a patch to chromium and ungoogled-chromium that makes the browser search for extension definitions using an environment variable CHROMIUM_EXTENSION_DIRECTORY instead of /usr/share/chromium/extensions This would also allow for fixes to the following home-manager issues: #2216 #2585
Not checking the "Fits CONTRIBUTING.md" yet, as this is my first PR. Let me know if anything is formatted incorrectly.
Linked issue here
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

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

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

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

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

[ ] Fits CONTRIBUTING.md.

Wonder why OfBorg didn't poke maintainers.

@primeos Here is the source: https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/patches/ungoogled-chromium-extension-search-path.patch (its a GUIX thing)
I also think it is probably good to point out that the home-manager issues I'm trying to fix are only related to ungoogled chromium. I don't know but I imagine ungoogled is a little more stable in terms of number of potentially breaking releases.
I could update this PR so that the patch only applies to ungoogled chromium.
I'm not familiar with the chromium codebase so I might not be the best person for the job, but if it makes your life easier I would totally be willing to maintain this patch. Although if we're lucky then the guix guys will keep it up to date for us.

FWIW, I've been managing extensions for ungoogled using home-manager for more than a year without the need to patch the browser. Works perfectly, although I agree I had to learn about crx3 to get it working :)
The main advantage of your patch is that you can install extensions globally and without home-manager. I guess chromium upstream will reject the patch, but maybe the ungoogled project could be convinced? Although I could understand if they don't want to maintain yet another patch.

@michaeladler your approach sounds very interesting. Maybe it could be added to home-manager (if there are some missing abstractions that would be helpful).
Regarding @the-argus' comment:

I don't know but I imagine ungoogled is a little more stable in terms of number of potentially breaking releases.

Not really, I fear. It's basically just Chromium + some extra patches and code stripping.

I could update this PR so that the patch only applies to ungoogled chromium.

Thanks for the offer. It's better if we keep our changes between the two to a minimum though.

* We need more feedback/input from people that want to declaratively install extensions (how common is this use case, are there other/better alternatives, does the design fit, etc.)

I really just made this patch for myself, based on the discussion so far I think I didn't properly consider the maintenance consequences. I'm going to look into michealadler's home manager configs, and see if this existing solution works for me. If so, I think moving it into a flake or a PR to home-manager would be better.

* `CHROMIUM_EXTENSION_DIRECTORY` definitely needs to be documented (currently it's just a source-code change for insiders)
* The NixOS module should support it via the Chromium (etc.) wrapper.

I am can provide both of these. Not going to until I've decided whether or not this PR is even necessary, though.

* We already have `programs.chromium.extensions`. I've never used it though and didn't look at the implementation (but from a very brief glance it only seems to instruct Chromium to install extensions via the web store - based on their IDs and without the possibility of specifying a specific version). Can't we use that for ungoogled-chromium as well? And if not, what are the limitations? Is this change only required for ungoogled-chromium?

No, ungoogled chromium cannot install extensions through the google web store interface, see (the ungoogled chromium faq)[https://ungoogled-software.github.io/ungoogled-chromium-wiki/faq#can-i-install-extensions-or-themes-from-the-chrome-webstore]. Basically what this means, as far as I could tell with my efforts, that it is very tedious to maintain the packaging of extensions.

* We need someone to commit to maintaining that patch to ensure that we can keep it in Nixkpgs (not sure how fast Chromium ist updated in Guix and if they package beta and dev versions) - web browsers are super security critical so we certainly don't want to delay updates by waiting for updates to extra patches (I was already too slow for the last update due to other build issues).

I would like to commit to this, but judging by my ten day late response, I might not be the best fit for the job.
@michaeladler Could you show me your home manager configurations? I am very curious how you've managed it.

Hi @the-argus ,
here is an excerpt from my home-manager config:
programs.chromium = with pkgs; {
      enable = true;
      extensions = [
        # Use 'Chrome extension source viewer' to download crx files from Chrome Store;
        # see https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin
        # this is necessary because ungoogled-chromium refuses to fetch extensions from the Chrome Store
        # Notice:
        # * only crx3 is accepted
        # * only ungoogled-chromium accepts self-signed crx files; chrome requires a signature by Google (with their private key)
        #   see https://github.com/ahwayakchih/crx3#crx_required_proof_missing-chrome-and-chromium

        # to calculate the extension id, see https://github.com/Rob--W/crxviewer/issues/82
        # the extension id is calculated from the *public* key which is embedded inside the crx file
        # tl;dr: go to https://robwu.nl/crxviewer/, load the extension and check the console
        # this needs to be done *once* or whenever the private key used to sign the extension changes
        # ... or just go to https://crx-checker.appspot.com/
        #
        {
          id = "egmgbplmglbpoelpbehhpdknjkpcolah";
          crxPath = "${chromium-ublock-origin}/share/chromium-ublock-origin/chromium-ublock-origin.crx";
          version = chromium-ublock-origin.version;
        }
      ];
    };

If the extension you wanna use provides a crx3 file as part of its release (e.g. Github assets), then you are done. Otherwise you have to build the crx3 file yourself. For this, you need to generate a private key. I have the private key stored in my git dotfiles repo and build the crx3 using go-crx3 inside a nix derivation. This is fully automated, but unfortunately it requires to store the key in the repo (which is okay locally but less ideal for CI builds).

@the-argus FYI I've made some progress on this. I'm now able to build an extension (crx3) without having to check in a secret key; instead, the secret key is automatically generated on each build and I'm extracting the extension id during the build. This is better than before since it no longer requires any secrets and thus could be upstreamed somewhere, e.g. home-manager. However, generating the private key on demand breaks reproducibility since the public key is stored in the artifacts. This is certainly not desirable for nixpkgs, but maybe for home-manager it's acceptable. I don't know.

Well, assuming it's for local use, is there harm in just storing a static private key and using it for all builds -- does that introduce an potential attack vector, or no because you'd have to modify the store path?

@winterqt I would say that's it fine for local use (and I'm doing that for most of my extensions actually, I only switched on to a dynamically generated key, sort of as a PoC). On second thought, while I'm a proponent of reproducible builds, I guess it might be okay in this situation - even for nixpkgs, I don't see much of a problem. Even caching still works fine. My next step is to publish an example in my overlay. Then I will try to get some feedback and see what people think.

@michaeladler Friendly poke about any movement on your solution?

Related to the chromium patch, it looks clear to me it would seldom need to change:

theory: the contents are quite minimal and use low level APIs that seem unlikely to break
practice: it's never needed to be updated in Guix since it was added >2.5 years ago (git log)

What about merging it and just dropping it at the first sign of trouble? I recon it'd have a good run as is.

Hi @ThinkChaos,
I've published a couple of extensions in my overlay, e.g. vimium. This is how I use them in home-manager:
xdg.configFile =
      let
        extensionJson = extensionPkg:
          let
            allFiles = builtins.readDir "${extensionPkg}/share/${extensionPkg.pname}";
            fname = with builtins; head (attrNames (lib.filterAttrs (k: v: lib.hasSuffix "json" k) allFiles));
          in
          {
            name = "chromium/External Extensions/${fname}";
            value.source = "${extensionPkg}/share/${extensionPkg.pname}/${fname}";
          };

        myExtensions = with pkgs; [
          chromium-vimium
          chromium-floccus
        ];
      in
      listToAttrs (map extensionJson myExtensions);

That's good enough for me and zero maintenance since I wrote auto-update scripts for the extensions I use.

Thanks for the pointers! I got your config to work and then simplified it as best I could.
Here's what I came up with:
xdg.configFile =
  let
    # curl -Lo /dev/null -w '%{url_effective}\n' 'https://clients2.google.com/service/update2/crx?response=redirect&prodversion=49.0&acceptformat=crx3&x=id%3D''EXT_ID_GOES_HERE''%26installsource%3Dondemand%26uc'
    extensions = {
      ublock-origin = {
        id = "cjpalhdlnbpafiamejdnhcphjbkeiagm";
        version = "1.50.0";
        crx = builtins.fetchurl {
          url = "https://clients2.googleusercontent.com/crx/blobs/Acy1k0bji9dmQ6mf2st7m_vSeFPVme-ZMA2RKhRDCN25JxWdYu9f1PoKp7IAjGGq6IVdaUTLSrGU2ZZLDsNmCISWEMJzbUwe0dCxzeXpE9G12GJtHFSw4ADGUprlFB9UVmwhW9yM9Y1cBWPP3Dcmkak/extension_1_50_0_0.crx";
          sha256 = "sha256:08hq8blbmqz3kfs0mbhfpy8hkdwp0rvqi7aj8pgln76pmzfrd4q6";
        };
      };
    };

    mkExtensionConfig = name: { id, version, crx }: lib.nameValuePair "chromium/External Extensions/${id}.json" {
      text = builtins.toJSON {
        external_crx = crx;
        external_version = version;
      };
    };
  in lib.mapAttrs' mkExtensionConfig extensions;

Not sure how long lived the blob URLs are, but it doesn't matter much to me since it'll be cached in the Nix store.

@michaeladler's config inlined so it's copy-pastable
xdg.configFile = with lib;
  let
      go-crx3 = pkgs.callPackage go-crx3-drv {};
      go-crx3-drv = { buildGo119Module, fetchFromGitHub, lib }:
      buildGo119Module {
        pname = "go-crx3";
        version = "unstable-2022-11-14";

        src = fetchFromGitHub {
          owner = "mmadfox";
          repo = "go-crx3";
          rev = "b26a1a153fb1cf57d4758cd34855558a246e204d";
          sha256 = "056jk8l8457siwgh9q2zxllpzivx2fbz1jfjyy38zbcb6brcjg0a";
        };

        vendorSha256 = "sha256-uJFELBJy5lLmwvZizcIpgo6HcugX4jMIGN4d9NrAsVA=";

        doCheck = false;

        meta = with lib; {
          homepage = "https://github.com/mmadfox/go-crx3";
          description = "Chrome browser extension tools. Provides a set of tools packing, unpacking, zip, unzip, download, etc.";
          platforms = platforms.all;
          license = licenses.asl20;
        };
      };

    chromium-vimium = pkgs.callPackage chromium-vimium-drv {};
    chromium-vimium-drv = { stdenv, lib, fetchurl, pkgs }:
      stdenv.mkDerivation rec {
        pname = "chromium-vimium";
        version = "1.67.6";

        src = fetchurl {
          url = "https://github.com/philc/vimium/archive/refs/tags/v${version}.zip";
          sha256 = "1av4qcfw6shz3pbl4s625avbrynwpli3hbrlmf6jylndy98jkmwg";
        };

        nativeBuildInputs = with pkgs; [ unzip go-crx3 ];

        phases = [ "unpackPhase" "buildPhase" "installPhase" ];

        unpackPhase = ''
          unzip $src
        '';

        buildPhase = ''
          mv vimium-* vimium
          rm -rf "vimium/tests" "vimium/test_harnesses"
          crx3 pack vimium -o ${pname}.crx
        '';

        installPhase = ''
          mkdir -p $out/share/${pname}
          CRX_TARGET=$out/share/${pname}/${pname}.crx
          cp *.crx $CRX_TARGET
          cat <<EOF > $out/share/${pname}/$(crx3 id $CRX_TARGET).json
          {
            "external_crx": "$CRX_TARGET",
            "external_version": "${version}"
          }
          EOF
        '';

        meta = with lib; {
          homepage = "https://github.com/philc/vimium";
          description = "The hacker's browser";
          platforms = platforms.all;
          license = licenses.mit;
        };
      };

    extensionJson = extensionPkg:
      let
        allFiles = builtins.readDir "${extensionPkg}/share/${extensionPkg.pname}";
        fname = with builtins; head (attrNames (lib.filterAttrs (k: v: lib.hasSuffix "json" k) allFiles));
      in
      {
        name = "chromium/External Extensions/${fname}";
        value.source = "${extensionPkg}/share/${extensionPkg.pname}/${fname}";
      };

    myExtensions = with pkgs; [
      chromium-vimium
    ];
  in
  listToAttrs (map extensionJson myExtensions);

@ThinkChaos Yeah I've been playing around with something similar but there's no need to store the blobs url, i.e. you can just use the service/update2 URL directly. It'd be nice to have the extensions in the nixpkgs repo, maybe similarly to the structure of pkgs/development/node-packages.

For integrating in nixpkgs I think the main challenge is where to source the extensions from. Here's the options I thought of, in order of preference:

fetch the signed crx directly from the project: doesn't seem possible as most projects don't publish the signed extension in their releases. Some do sign the Firefox ones, so maybe they'd be open to signing the Chrome ones.
fetch the signed crx from Google: requires use of the blob URLs since the main URL redirects to the latest version and thus isn't a permalink like we need for fetchers. So would work only if blob URLs are permalinky enough.
pack the crx and sign it with a random key like you do with go-crx3: should always work, but downsides are each extension needs a custom derivation, the resulting crx has a different ID than the official one, and the signature is pretty useless (and not reproducible) given it's a random key, Not sure the signed crx from Google are much better as IDK how to verify them, didn't find docs on that, and the docs on publishing an extension don't mention signing at all. But at least they won't change with every derivation build.

Personally I don't want to invest time into packaging these, ungoogled-chromium is just my backup browser so I'm fine with having a couple fetchurl calls in my config.
Especially since I realized I can use HM's programs.chromium.extensions just fine with ungoogled-chromium (had misread the HM module code) and don't need any of the custom file generation:
programs.chromium.extensions = [
  # uBlock Origin
  {
    id = "cjpalhdlnbpafiamejdnhcphjbkeiagm";
    version = "1.50.0";
    crxPath = builtins.fetchurl {
      url = "https://clients2.googleusercontent.com/crx/blobs/Acy1k0bji9dmQ6mf2st7m_vSeFPVme-ZMA2RKhRDCN25JxWdYu9f1PoKp7IAjGGq6IVdaUTLSrGU2ZZLDsNmCISWEMJzbUwe0dCxzeXpE9G12GJtHFSw4ADGUprlFB9UVmwhW9yM9Y1cBWPP3Dcmkak/extension_1_50_0_0.crx";
      sha256 = "sha256:08hq8blbmqz3kfs0mbhfpy8hkdwp0rvqi7aj8pgln76pmzfrd4q6";
    };
  }
];

This is such a nice change. What remains for merging?

cc/ @primeos et al. -- let me know if I can help.

The main advantage of your patch is that you can install extensions globally and without home-manager. I guess chromium upstream will reject the patch, but maybe the ungoogled project could be convinced? Although I could understand if they don't want to maintain yet another patch.

The patch is simple enough to be maintained by nixpkgs or ungoogled-chromium (with my ungoogled-chromium maintainer hat on I'm not sure it fits the project goals though).
I don't really see the advantage of having support for extension management in the nixos module though, I think this belong in home-manager and home-manager only. We can still package extensions here for it of course, similar to how chromium hunspell dictionaries are already.

Personally I don't want to invest time into packaging these, ungoogled-chromium is just my backup browser so I'm fine with having a couple fetchurl calls in my config. Especially since I realized I can use HM's programs.chromium.extensions just fine with ungoogled-chromium (had misread the HM module code) and don't need any of the custom file generation:
programs.chromium.extensions = [
  # uBlock Origin
  {
    id = "cjpalhdlnbpafiamejdnhcphjbkeiagm";
    version = "1.50.0";
    crxPath = builtins.fetchurl {
      url = "https://clients2.googleusercontent.com/crx/blobs/Acy1k0bji9dmQ6mf2st7m_vSeFPVme-ZMA2RKhRDCN25JxWdYu9f1PoKp7IAjGGq6IVdaUTLSrGU2ZZLDsNmCISWEMJzbUwe0dCxzeXpE9G12GJtHFSw4ADGUprlFB9UVmwhW9yM9Y1cBWPP3Dcmkak/extension_1_50_0_0.crx";
      sha256 = "sha256:08hq8blbmqz3kfs0mbhfpy8hkdwp0rvqi7aj8pgln76pmzfrd4q6";
    };
  }
];

This url gave me a 404, so I've found a solution for me:

Go to https://crxextractor.com/ , paste the url of the desired package, e.g. https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm
Open the dev tools network tab and start the download to get the correct crx url
In the nix config, add a name property to the builtins.fetchurl set, e.g. I added name = "chromium-ublockorigin"; above the url; this additional name field is needed because the current crx url includes & and nix doesn't like that

Shameless plug: I wrote my own tool (https://github.com/michaeladler/extension-downloader) to manage browser extensions. It's not exactly the "nix way" of doing things (reproducible, pinned versions) but I realized that the "latest greatest" approach is usually what I want with browser extensions. Another benefit is that my solution isn't tied to the nix package manager which comes in handy if you also (have to) work with non-Nix systems.

@miku86 see my other comment for getting a .crx URL just using curl.

I don't really see the advantage of having support for extension management in the nixos module

The point is that the enterprise policy (an out-of-the-box feature of chromium) could actually work properly. As is, you cannot install extensions via ExtensionInstallForceList, nor can you install extensions that are present in that list manually (via downloading + drag-and-drop). In regular chromium, the update URL in ExtensionInstallForceList will get read properly and used; in ungoogled-chromium it is apparently ignored.
Whether this particular PR's solution to the problem is appropriate is another topic of course. But HM is irrelevant here, this is not a user-level policy, so user-level config is firmly off-topic.

As I said here: https://github.com/ungoogled-software/ungoogled-chromium/issues/2932#issuecomment-2217556022
I think we definitely want to allow system-wide extensions for chromium.
They usually are in /usr/share/chromium/extensions - a path that we may not use in NixOS, so we're effectively missing a chromium feature, compared to other distros.
When looking at GUIX' approach, before aquiring the (proposed in this PR) extension search path, it seems like they were just substituting /usr/share/chromium/extensions with /run/current-system/profile/share/chromium/extensions: https://issues.guix.gnu.org/44335#1-lineno55
Do we know the reason, they migrated away from that (arguably simpler) approach, in favor of the search path patch?
Do we know if their reasoning applies to us?
Do you think taking that simpler approach clould be a reasonable compromise @networkException?

where to source extensions from
signed crx

In case of NoScript the only sensible option seems to be to build it from source, which is also the sane default...
AFAIU ExtensionInstallForcelist only works with the crx's, although I see that ~/.config/chromium/Default/Preferences json features the extensions.<id>.path attribute, which points directly at the unpacked extension's directory. I wish we could somehow "install" unpacked extensions using policies

AFAIU ExtensionInstallForcelist only works with the crx's

We have to distinguish forced installs (by extension id, from chrome store), and installing self-built (or unpacked extensions). Forced installs are solved by the mentioned policy.
When looking at installing self-built/unpacked extensions, we have to distinguish again between per-user installation to the ~/.config/chromium/Default/Extensions and system-wide extensions. Per-user installations are solved by home-manager or similar.
Self-built and system-wide extensions are what's missing from chromium on NixOS right now because NixOS doesn't support the /usr/share/chromium/extensions directory.
As @networkException explained on the ungoogled-chromium tracker, the most likely course for solving this would be to change the corresponding directory from /usr/share/chromium/extensions to something that NixOS supports. I'd suggest /run/current-system/sw/share/chromium.

Self-built and system-wide extensions are what's missing from chromium on NixOS right now because NixOS doesn't support the /usr/share/chromium/extensions directory.

Do you have any references for the format of the directory? Prior to my previous post I've tried allocating a symlink containing noscript (unpacked and the zip) at /usr/.../extensions using systemd.tmpfiles.settings (which a niche NixOS module could do as well, however ugly and conventional that might be) but chromium didn't pick that up

Do you have any references for the layout of the directory?

https://developer.chrome.com/docs/extensions/how-to/distribute/install-extensions#preference-linux


Illegal instruction raised when running on ARM

Hello. I am trying to integrate your code inside my tests. On Linux amd64  everything works fine with -O0 and -fno-inline flags
I am using C++17
On the other hand, on ARM, I receive Illegal Instruction
CMAKE_C_FLAGS_INIT            -march=armv8-a -mtune=cortex-a73.cortex-a53 -fPIC -fmessage-length=0 -Wall  -Wno-deprecated-declarations -Wno-parentheses -Wno-misleading-indentation     -Werror=missing-include-dirs -O3 -ftree-vectorize -ffast-math -fopenmp
I am running the ARM binaries using QEMU
Compiler version:
gcc (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
As a first guess it seems the memory is messed up and it tries to execute some operation that doesn't exist

I met the same issue on aarch64 platform. It seems the mock does not work and the unit test run into the origin logic.

Please try this branch : fix_debugging_option (https://github.com/jonah512/jomock/tree/fix_debugging_option)
You need set debugging option.

Example code is working with debugging option.
You guys need to check it on your code.

New branch was tested only for ARM64 and just merged.
It is working with "ARM64_SUPPORT" definition added in CMakeFiles.txt.


Show Fancyzones on right click not working

Microsoft PowerToys version
0.45
Running as admin

[X] Yes

Area(s) with issue?
FancyZones
Steps to reproduce
Hello,
with Windows 10, to activate the fancy zones I had to move a sale and right click.
Now, with Windows 11 the fancy zones are activated when I am moving a window and deactivated with right click.
✔ Expected Behavior
I prefer the old model, to activate them only with right click. How is it possible to go back? In the settings I only see the function but with the SHIFT key on the keyboard.
❌ Actual Behavior
Now, with Windows 11 the fancy zones are activated when I am moving a window and deactivated with right click.
Other Software
Windows 11

Hi @jmginer, can you please verify in the FancyZones settings which options are turned on?
When both Shift and non-primary mouse button activation options are turned on, there would be the behavior exactly you described. When you start dragging a window zones won't be activated immediately. They will be activated with a click or when Shift is pressed.


Package.json - library & utils dependencies

Just cloned the repo and ran npm run generate and terminal is throwing errors. I tried to update the dependencies and got this error -
npm ERR! code ENOLOCAL npm ERR! Could not install from "../library" as it does not contain a package.json file.
I also ran npm outdated and it says the library package & utils packages are missing.
Package                         Current          Wanted  Latest  Location
library                         MISSING          linked  linked  app
utils                           MISSING          linked  linked  app

Not sure what's going on with the package.json, or how to get around this. Any Ideas?

Hi @kieranmansfield ,
thanks to notify the issue.
I forgot to clean the boilerplate but now I you should be able to install the packages.
Use npm i --legacy-peer-deps  for peer dependencies.
Let me know!
Thanks in advance and kind regards,
Davide

All sorted, the only thing is there's a lot of security vulnerabilities and they need to be manually reviewed. :/
found 253 vulnerabilities (1 low, 238 moderate, 14 high)

Hi,
in this starter kit I included more than we need.
You can get rid of all the clutter!
Have a nice day and kind regards,
Davide


MINOR: MemoryRecordsBuilder.sizeInBytes should consider initial position

cc @ijuma Trivial bug I noticed when working on that message conversion patch.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/kafka-pr-jdk7-scala2.11/5483/
Test PASSed (JDK 7 and Scala 2.11).

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/kafka-pr-jdk8-scala2.12/5468/
Test FAILed (JDK 8 and Scala 2.12).

The test failure is almost definitely unrelated. I will open a separate JIRA if we don't have one already.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/kafka-pr-jdk8-scala2.12/5496/
Test PASSed (JDK 8 and Scala 2.12).

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/kafka-pr-jdk7-scala2.11/5511/
Test PASSed (JDK 7 and Scala 2.11).

Merging to trunk.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/kafka-pr-jdk8-scala2.12/5506/
Test PASSed (JDK 8 and Scala 2.12).

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/kafka-pr-jdk7-scala2.11/5521/
Test PASSed (JDK 7 and Scala 2.11).


refactor: 重构 on 和 emit 类型

👀 PR includes

✨ Feature

[ ] New feature

🎨 Enhance

[ ] Code style optimization
[ ] Refactoring
[ ] Change the UI
[ ] Improve the performance
[ ] Type optimization

🐛 Bugfix

[ ] Solve the issue and close #0

🔧 Chore

[ ] Test case
[ ] Docs / demos update
[ ] CI / workflow
[ ] Release version
[ ] Other ()

📝 Description

🖼 Screenshot

Before
After

❌
✅

🔗 Related issue link

🔍 Self-Check before the merge

[ ] Add or update relevant docs.
[ ] Add or update relevant demos.
[ ] Add or update test case.
[ ] Add or update relevant TypeScript definitions.

Codecov Report
Attention: Patch coverage is 66.66667% with 3 lines in your changes are missing coverage. Please review.

Project coverage is 79.03%. Comparing base (ecdc9c8) to head (4c38a5d).
Report is 293 commits behind head on next.

Files
Patch %
Lines

packages/s2-core/src/sheet-type/spread-sheet.ts
66.66%
0 Missing and 3 partials :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##             next    #2628      +/-   ##
==========================================
+ Coverage   75.77%   79.03%   +3.26%
==========================================
  Files         257      274      +17
  Lines       11994    12390     +396
  Branches     2464     2529      +65
==========================================
+ Hits         9088     9792     +704
+ Misses       1398     1061     -337
- Partials     1508     1537      +29

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

:tada: This PR is included in version @antv/s2-v2.0.0-next.17 :tada:
The release is available on:

npm package (@next dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Created script for secret santa pair generation.

Generates random secret Santa pairs, and sends mail to participants with info on who they are giving a gift to. Takes event id as argument.

Good!
However, I see some PEP8 errors and the imports are not correctly ordered. The way you generate random pairs is also kind of difficult to understand. I would appreciate some comments as to what generate_random_list and check_random_list actually does. The former has a informative, but the latter is not.
I was also wondering is your script takes into account odd number participants and makes sure not to select one user multiple times and/or select one person as their own Santa?

Trikom does not want this email since we want to participate like all others. But if it is possible a file of who gets who should exsist, so we can look at that if something goes wrong.

BUMP, Secret Santa
2016-11-23 20:48 GMT+01:00 MrHanSan<EMAIL_ADDRESS>
Merged #1773 https://github.com/dotKom/onlineweb4/pull/1773.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/dotKom/onlineweb4/pull/1773#event-870223936, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AM3uEmVlxBJGJ3PT6HExrXVceBysFQoQks5rBJiJgaJpZM4Kz7iy
.

--
Mvh
Martin Bjerke
(+47) 959 98 212

@kattn If the bump comment was regarding the issue you brought up in https://github.com/dotKom/onlineweb4/pull/1773#issuecomment-262497333, please open it as a separate issue.


Is this free?

Pro usually indicates paid. It's worthwhile to clear this out in the README.

Also, will this be always free for open source?

knapsack_pro gem is open source but relies on closed Knapsack Pro API.  I'd like to get feedback from people trying knapsack pro for free and I'd like to work closely with them to validate if the solution I'm building provide a value for the users. Switching to paid plan is a good way to validate that and a way to get support from happy users.
Currently, there is no hard limit when the free trial is ending. I'm more interested in getting feedback from users in order to improve the tool. As I saw in the past people want to support the project and are asking for paid plan.

Also, will this be always free for open source?

Good question. This might be a good idea to keep Knapsack Pro free for open source projects. Maybe thanks to that knapsack pro can be promoted. The owner of the open source project could add the link to Knapsack Pro website in the readme as a way to say thanks.
Do you have any open source project where you would like to use knapsack_pro? I'm happy to help.

We're looking into it for the company I work for.
But if it will be free for open source projects I can recommend it to other people.

I updated the readme https://github.com/KnapsackPro/knapsack_pro-ruby#is-knapsack_pro-gem-free
It's free for open source.
Thanks for the good question. Feel free to contact me via email when you need help with the set up of the gem.


ansible_ssh_user is undefined error message

I'm getting the same error message as https://github.com/geerlingguy/drupal-vm/issues/602. It happens with vagrant_box: geerlingguy/centos6.
Is there a fix or work-around?

@ColumbiaBlooms - Is it possible for you to test with centos7? Or run vagrant provision again a couple times and make sure it's the exact same error message again?
Finally, can you copy out the entire error message with context so I can see which task(s) are failing?

I'm running your latest version of DrupalVM along with VirtualBox 5.1.2 and Vagrant 1.8.5 on Windows 10.
Updated config.yml vagrant_box to geerlingguy/centos6.
Ran vagrant destroy.
Ran vagrant up and got
TASK [geerlingguy.composer : Update Composer to latest version (if configured).] ***
skipping: [drupalvm]
TASK [geerlingguy.composer : Ensure composer directory exists.] ****************
fatal: [drupalvm]: FAILED! => {"failed": true, "msg": "{{ drupalvm_user }}: {{ ansible_ssh_user | default(ansible_env.SUDO_USER, true) | default(ansible_env.USER, true) | default(ansible_user_id) }}: 'ansible_ssh_user' is undefined"}
NO MORE HOSTS LEFT *************************************************************
RUNNING HANDLER [geerlingguy.firewall : restart firewall] **********************
RUNNING HANDLER [geerlingguy.apache : restart apache] **************************
Ran vagrant provision --debug and got
INFO interface: info: skipping: [drupalvm]
skipping: [drupalvm]
DEBUG ssh: stdout:
TASK [geerlingguy.composer : Ensure composer directory exists.] ****************
INFO interface: info:
TASK [geerlingguy.composer : Ensure composer directory exists.] ****************
TASK [geerlingguy.composer : Ensure composer directory exists.] ****************
DEBUG ssh: stdout: fatal: [drupalvm]: FAILED! => {"failed": true, "msg": "{{ drupalvm_user }}: {{ ansible_ssh_user | default(ansible_env.SUDO_USER, true) | default(ansible_env.USER, true) | default(ansible_user_id) }}: 'ansible_ssh_user' is undefined"}
INFO interface: info: fatal: [drupalvm]: FAILED! => {"failed": true, "msg": "{{ drupalvm_user }}: {{ ansible_ssh_user | default(ansible_env.SUDO_USER, true) | default(ansible_env.USER, true) | default(ansible_user_id) }}: 'ansible_ssh_user' is undefined"}
fatal: [drupalvm]: FAILED! => {"failed": true, "msg": "{{ drupalvm_user }}: {{ ansible_ssh_user | default(ansible_env.SUDO_USER, true) | default(ansible_env.USER, true) | default(ansible_user_id) }}: 'ansible_ssh_user' is undefined"}
DEBUG ssh: stdout:
NO MORE HOSTS LEFT *************************************************************
INFO interface: info:
NO MORE HOSTS LEFT *************************************************************
NO MORE HOSTS LEFT *************************************************************
DEBUG ssh: Sending SSH keep-alive...
DEBUG ssh: stdout:      to retry, use: --limit @/vagrant/provisioning/playbook.retry
INFO interface: info:  to retry, use: --limit @/vagrant/provisioning/playbook.retry
    to retry, use: --limit @/vagrant/provisioning/playbook.retry

DEBUG ssh: stdout:
PLAY RECAP *********************************************************************
INFO interface: info:
PLAY RECAP *********************************************************************
PLAY RECAP *********************************************************************
DEBUG ssh: stdout: drupalvm                   : ok=96   changed=0    unreachable=0    failed=1
INFO interface: info: drupalvm                   : ok=96   changed=0    unreachable=0    failed=1
drupalvm                   : ok=96   changed=0    unreachable=0    failed=1
DEBUG ssh: stdout:
INFO interface: info:
DEBUG ssh: Exit status: 2
ERROR warden: Error occurred: Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
ERROR warden: Error occurred: Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
ERROR warden: Error occurred: Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
ERROR warden: Error occurred: Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
INFO warden: Beginning recovery process...
INFO warden: Calling recover: #Vagrant::Action::Builtin::Call:0x4881e70
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
INFO warden: Recovery complete.
ERROR warden: Error occurred: Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
ERROR warden: Error occurred: Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
INFO warden: Beginning recovery process...
INFO warden: Calling recover: #Vagrant::Action::Builtin::Call:0x455b758
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
INFO warden: Recovery complete.
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
INFO warden: Beginning recovery process...
INFO warden: Recovery complete.
INFO environment: Released process lock: machine-action-ebe11103b1fe542c7427f4cc626cc5ab
INFO environment: Running hook: environment_unload
INFO runner: Preparing hooks for middleware sequence...
INFO runner: 2 hooks defined.
INFO runner: Running action: environment_unload #Vagrant::Action::Builder:0x4870908
ERROR vagrant: Vagrant experienced an error! Details:
ERROR vagrant: #<VagrantPlugins::Ansible::Errors::AnsibleCommandFailed: Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.>
ERROR vagrant: Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
ERROR vagrant: C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/provisioners/ansible/provisioner/guest.rb:98:in execute_ansible_command_on_guest' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/provisioners/ansible/provisioner/guest.rb:89:in execute_ansible_playbook_on_guest'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/provisioners/ansible/provisioner/guest.rb:20:in provision' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builtin/provision.rb:133:in run_provisioner'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:95:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:95:in block in finalize_action'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builder.rb:116:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/runner.rb:66:in block in run'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/util/busy.rb:19:in busy' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/runner.rb:66:in run'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/environment.rb:473:in hook' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builtin/provision.rb:121:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builtin/provision.rb:121:in block in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builtin/provision.rb:103:in each'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builtin/provision.rb:103:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call'
C:/Users/samst/.vagrant.d/gems/gems/vagrant-hostsupdater-1.0.2/lib/vagrant-hostsupdater/Action/UpdateHosts.rb:18:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/providers/virtualbox/action/check_accessible.rb:18:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:95:in block in finalize_action' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builder.rb:116:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/runner.rb:66:in block in run' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/util/busy.rb:19:in busy'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/runner.rb:66:in run' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builtin/call.rb:53:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:95:in block in finalize_action'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builder.rb:116:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/runner.rb:66:in block in run'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/util/busy.rb:19:in busy' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/runner.rb:66:in run'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builtin/call.rb:53:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builtin/config_validate.rb:25:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call'
C:/Users/samst/.vagrant.d/gems/gems/vagrant-auto_network-1.0.2/lib/auto_network/action/request.rb:24:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/providers/virtualbox/action/check_virtualbox.rb:17:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/warden.rb:34:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/builder.rb:116:in call' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/runner.rb:66:in block in run'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/util/busy.rb:19:in busy' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/action/runner.rb:66:in run'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/machine.rb:225:in action_raw' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/machine.rb:200:in block in action'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/environment.rb:561:in lock' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/machine.rb:186:in call'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/machine.rb:186:in action' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/commands/provision/command.rb:30:in block in execute'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/plugin/v2/command.rb:235:in block in with_target_vms' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/plugin/v2/command.rb:229:in each'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/plugin/v2/command.rb:229:in with_target_vms' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/commands/provision/command.rb:29:in execute'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/cli.rb:42:in execute' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/lib/vagrant/environment.rb:302:in cli'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/bin/vagrant:174:in `'
INFO interface: error: Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
INFO interface: Machine: error-exit ["VagrantPlugins::Ansible::Errors::AnsibleCommandFailed", "Ansible failed to complete successfully. Any error output should be\nvisible above. Please fix these errors and try again."]
Ran vagrant provision and got
TASK [geerlingguy.composer : Update Composer to latest version (if configured).] ***
skipping: [drupalvm]
TASK [geerlingguy.composer : Ensure composer directory exists.] ****************
fatal: [drupalvm]: FAILED! => {"failed": true, "msg": "{{ drupalvm_user }}: {{ ansible_ssh_user | default(ansible_env.SUDO_USER, true) | default(ansible_env.USER, true) | default(ansible_user_id) }}: 'ansible_ssh_user' is undefined"}
NO MORE HOSTS LEFT *************************************************************
to retry, use: --limit @/vagrant/provisioning/playbook.retry
PLAY RECAP *********************************************************************
drupalvm                   : ok=96   changed=0    unreachable=0    failed=1
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
I hope the above helps. I'm in the process of trying CentOS7.
Is there any relationship between this problem and https://github.com/ansible/ansible/issues/13669?

Ran vagrant destroy.
Ran vagrant up. No error messages with CentOS7, but got "This site can’t be reached. drupalvm.dev took too long to respond." from Chrome.
Ran vagrant provision with the same results.

With CentOS 6, can you try setting:
drupalvm_user: vagrant

Or if that doesn't work, try the following:
composer_home_path: "/home/vagrant/.composer"
composer_home_owner: "vagrant"
composer_home_group: "vagrant"

After adding drupalvm_user: vagrant to config.yml the error message disappears, but when I type drupalvm.dev into Chrome I get "Internal Server Error. The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. Apache/2.2.15 (CentOS) Server at drupalvm.dev Port 80".
After changing the composer values (and leaving drupalvm_user: vagrant as-is I get the same result.
After running vagrant provision  after vagrant up I get the same results.
Would you like to connect to my computer tomorrow using TeamViewer https://www.teamviewer.com/? I will be away for a large part of the day, but I can leave my computer running for you. I will need some secure method to give you the logon credentials.

@ColumbiaBlooms - Ah, now you're running into some issues with CentOS 6 itself. Basically, the way Drupal VM is architected, it expects a modern version of Apache or Nginx, and CentOS 6 defaults to 2.2, which has a lot of small differences...
It is possible to use Drupal VM with CentOS 6 (and I do, for a couple old projects), but it can require a lot of changes to the php_ variables, the apache_vhosts, and some other things besides, and I'd say it's only for power users.
See: http://docs.drupalvm.com/en/latest/other/base-os/#redhat-enterprise-linux-centos-6
See related:

https://github.com/geerlingguy/drupal-vm/issues/579
https://github.com/geerlingguy/drupal-vm/issues/434
https://github.com/geerlingguy/drupal-vm/issues/376

I'm likely going to deprecate support for CentOS 6 at some point, as so few people use it in Drupal VM, and it creates way more problems than supporting it solves... especially since tests run so slow on it that I've decided to disable automated CentOS 6 tests.

Thanks for the help.
I would love to use current versions of all software, but I'm trying to track a subtle bug in Drupal which apparently relates to the particular version of OS, MySQL, PHP, etc between my local site and my live site on bluehost. Bluehost runs CentOS6 so in order rule out a problem with it and the other major pieces of software I have to mirror the bluehost site locally. I had my local site on Bitnami, but the versions of system software are different and I didn't get the error message from Drupal. If I migrate it to bluehost the error pops up. Some aspects of Drupal seem to be very sensitive to the various release levels ...
The advertised beauty of Vagrant is that one can create an environment locally that is highly customized. That's why I'm headed in this direction.
I'll post again if I'm still having problems with CentOS6.

When removing the ProxyPassMatch parameters I found one split on three lines.
extra_parameters: |
ProxyPassMatch ^/(..php(/.)?)$ "fcgi://<IP_ADDRESS>:9000{{ dashboard_install_dir }}"
DirectoryIndex index.html
Did I do it right to comment out all three?

Update -
I made all the changes to config.yml that you suggested as best I could, but they do not fix the problem. In fact, vagrant up and vagrant provision fail.
I guess I'll go back to using  ubuntu1604 and try to change the versions of PHP, MySQL, etc. and hope that the OS is not the problem.

@ColumbiaBlooms - What version of PHP is Bluehost running? CentOS 6 support is going away in early 2017... and PHP < 5.6 is already not supported, technically... just FYI :)
Ubuntu 16.04 only works with PHP > 7, and 14.04 does 5.4 and later. CentOS 7 does 5.4 by default (make sure you have php_version: 5.4 of course, if you want to try this). But anything older than PHP 5.5 will be extremely hard to get working correctly unless you switch way back to Drupal VM 2.5.1.

Gee.
This gets much more complicated than I had hoped. I'm just a lowly newbie trying to get my Drupal site to work.
Here are the versions of the various components at my live site at bluehost. Can you recommend a strategy to utilize DrupalVM to get my local site as close as possible to bluehost so I can get back to tracking down the problem in Drupal?

I've not been able to verify that the version of Apache is correct.

@ColumbiaBlooms - The simplest thing would be to use CentOS 7, with all the other defaults, and set php_version to 5.6. That will give you Apache 2.4, PHP 5.6, and MySQL 5.5.
However, maybe I can help a tiny bit on the error side of things... what kind of errors are you seeing on Bluehost? There are a ton of other things that could be much different than a typical local environment (e.g. I believe Bluehost hosts databases on separate servers from the web hosts... which can cause some issues in certain situations).

It will take me a while to upload to bluehost & recreate the problem.
I've been working with ostraining.com on these issues. Their take is that I need to set up a mirror image of the live site locally.
I will try CentOS7 with PHP 5.6 and see what happens. If you have the time and are interested in poking around on my machine we can connect with TeamViewer so that you can run stuff from my machine. If you're interested I need some way to securely send the TeamView credentials to you.

Hmmm.
I get "This site can’t be reached. drupalvm.dev took too long to respond." from Chrome after running vagrant up with CentOS7 & php_version at 5.6.
vagrant status shows running.
VirtualBox manager shows DrupalVM.dev powered off.
When I power on I get "Callee RC: E_FAIL (0x80004005)" and it stays powered off.
What's happening?

It looks like you're having some weird VirtualBox issues... it might be time to nuke the VirtualBox directory and try over from scratch (see https://forums.virtualbox.org/viewtopic.php?f=6&t=53016).
 Then try vagrant up again.
Also, can you confirm the versions of Vagrant and VirtualBox you're running? (vagrant --version and vboxmanage --version).

Vagrant is at 1.8.5. I get command not found for the vboxmanage --version command.
Deleting files & doing a destroy eliminated the error message, but I'm getting a timeout when I type drupalvm.dev into Chrome.

@ColumbiaBlooms - Okay, next up—if you're getting a timeout with drupalvm.dev in Chrome, that may mean your hosts file isn't set to point at the VM.
Can you run the command vagrant plugin install vagrant-hostsupdater, then run vagrant halt, then vagrant up? After that, the hosts file on your Windows machine should have an entry for http://drupalvm.dev/ and you could access it.

Yea!
That fixed the problem.
Now I'll change PHP version to 5.6.

OK. This is getting very frustrating. Vagrant/DrupalVM was my last hope to get my local site back up, but the code seems to be brittle.
The only change I made was to change the PHP version to 5.6. Now I'm back to the timeout screen in Chrome when I type drupalvm.dev.
Please explain why this is happening. Also, if there are logs somewhere that will help please tell me where they are located.
Thanks!

@ColumbiaBlooms - Did you do a vagrant destroy then vagrant up after changing the PHP version? Currently switching versions on the fly isn't supported, though that feature should be coming soon.
The logs for the VM are stored inside the VM itself. There's an ability to view some logs through a log viewer interface, but otherwise, you have to vagrant ssh to log into the VM, then cd into the /var/log/apache2 directory, and then you can use cat or tail to view the contents of the log files inside (e.g. 'other_vhosts_access' log).

I ran vagrant destroy then vagrant up. I get no error messages, but the site refuses to load in Chrome. I get the usual timeout message noted above.
When I ssh into the VM to get error logs I get
$ vagrant ssh
[vagrant@drupalvm ~]$ cd /var/log/apache2
-bash: cd: /var/log/apache2: No such file or directory
[vagrant@drupalvm ~]$ cd var/log/apache2
-bash: cd: var/log/apache2: No such file or directory
This situation should be very easy for you to duplicate at your location. If not, I'll make my offer again for you to connect to my computer using TeamViewer.

@ColumbiaBlooms - Sorry, forgot that you're running CentOS instead of Ubuntu, so the logs are somewhere in /var/log, but I don't remember which file exactly (should be like php, or php-fpm, or apache, or httpd).
You've gotten me in a very busy time (baby on the way soon, one big project wrapping up this month), I only have time to spot-reply here and there, can't join on TeamViewer (please realize that Drupal VM is an open source project, I'm paid nothing to work on it, and every time I help in the issue queue, it's basically a donation of personal time — I really hope I can help you get up and running, but it's not possible to devote more than a few minutes here and there.)

I understand your situation.
Given your availability I'm wondering what direction I should go in at this point. I've thought about going to D8, but I may run into a similar, weird error message as I'm dealing with in D7 unless I can exactly mirror the versions on the server locally.
Vagrant seems to be the ideal tool for creating a very specific server environment if I could just learn how to do it. Little did I know a year ago when I started teaching myself Drupal that I'd also have to learn all this server stuff! I've been programming since 1970 and have a couple of degrees in Computer Science, but this business of building web pages is daunting!
Could you recommend another pre-defined box I could download that would be a good starting point or should I just start building a box from scratch? I'm currently reading "Creating Development Environments With Vagrant" and "Pro Vagrant". Both seem to be pretty good books.

In terms of general learning/background, one of the best resources I like to recommend is Vagrant Cookbook. And of course, if you want to get into the nitty-gritty of how Drupal VM is constructed, Ansible for DevOps is the best guide I know :D

I'm going to close out this particular issue as it turned out to be a number of small things related to CentOS 6 usage (which is supported, but only just so for now, like with Ubuntu 12.04). Please open any related follow-up problems/questions in their own new issues.


Getting rid of CVEs reported in testmocks and buildtools

Getting rid of CVEs reported in testmocks and buildtools
CVE-2020-1945
CVE-2021-36373
CVE-2021-36374
CVE-2020-8908
CVE-2017-18640
buildtools sets dependency version/properties independently of the root
pom.
Motivation
mvn clean install verify -Powasp-dependency-check -DskipTests found various CVEs
Modifications
Upgraded dependencies
Verifying this change

[ ] Make sure that the change passes the CI checks.

This change is already covered by existing tests
Does this pull request potentially affect one of the following parts:
If yes was chosen, please highlight the changes

Dependencies (does it add or upgrade a dependency): YES
The public API: (yes / no)
The schema: (yes / no / don't know)
The default values of configurations: (yes / no)
The wire protocol: (yes / no)
The rest endpoints: (yes / no)
The admin cli options: (yes / no)
Anything that affects deployment: (yes / no / don't know)

Documentation
Check the box below or label this PR directly (if you have committer privilege).
Need to update docs?

[ ] doc-required
(If you need help on updating docs, create a doc issue)

[x] no-need-doc
(Please explain why)

[ ] doc
(If this PR contains doc changes)

/pulsarbot run-failure-checks


Failed to connect to SMA SUNNY TRIPOWER X 15

Version of the custom_component
Version 0.0.25

Configuration

Describe the bug
Failed to connect to SMA SUNNY TRIPOWER X 15
Can't add the Inverter.
Logs says 'H' format requires 0 <= number <= 65535
Debug log

2024-01-07 01:31:13.627 ERROR (MainThread) [custom_components.sunspec] Failed to connect to host <IP_ADDRESS>:502 slave 126 - 'H' format requires 0 <= number <= 65535

Just to check:
Have you activated modbus in the Tripower X?
Can you access the inverter via https://<IP_ADDRESS>

I can't connect to the same device after update of home assistant core.
Any Ideas? Have the same message

Same problem with our SMA Tripower X 12. It used to work fine before.
Modbus server is switched on in the Tripower X and its webinterface can be accessed.
I didn't notice at first because our roof was covered with snow for a while...
Apart frome the new HA version there has been a firmware update from SMA to version 03.02.11.R in the time between.

I have the same problem. I have a Tripower X15. Before that everything was going wonderfully. No connection since today. Homeassistant update was not carried out. I'm currently running 2024.1.3

I can't connect to the same device after update of home assistant core. Any Ideas? Have the same message

I have restarted my inverter. After that, everything worked again (since 2 days)

I can't connect to the same device after update of home assistant core. Any Ideas? Have the same message

I have restarted my inverter. After that, everything worked again (since 2 days) I have a Tripower X15

Did you take off AC and DC?

I can't connect to the same device after update of home assistant core. Any Ideas? Have the same message

I have restarted my inverter. After that, everything worked again (since 2 days) I have a Tripower X15

Did you take off AC and DC?

 Than I turned on again and it started to working again
Unfortunately it didn't help in my case

Same here with Tripower X25:  from one moment to the next the tcp-connection stopped working. Connections with sunny-portal okay, sunny explorer as well. But i am not able to establish a connection from HA via SunSpec Modbus any more

Second time shutting down the tripower x,  this time some minutes more - it worked!

Second time shutting down the tripower x, this time some minutes more - it worked!

Very nice 👍🏻

I still receive "DER AC Measurement" via SunSpec 701 but no more information via SunSpec 714 (DER DC Measurement). Modbus TCP server is active in SMA inverter obviously but i can not reach it with HASS SunSpec when i try to reconfigure. Even in a new HASS instance i can not reach it via SunSpec. But it must be reachable some how since i still receive some information from the old config.
Sunny Tripower X 20 with firmware version 03.02.11.R.
Home Assistant:

Core: 2024.1.6
Supervisor: 2023.12.1
Operating System: 11.4
Frontend: 20240104.0

I would relate the problem to the newest firmware by SMA but there were also some HASS updates since i realized missing data in SunSpec.
Reboots in any way wont change the situation for me.

Reboot initiated by frontend
Reboot initiated by fuse
Shutdown by fuse and wait few hours before starting up again

Somewhere i have read about reconnecting LAN may help. Not for me.
Just showing my case. Maybe some day there will a solution. I am also in contact with SMA and if i get hint what to do i will report.

Today Sunspec lost connection to my X 15 for unknown reasons. I didn't change anything in the configuration, and the X 15 also has the same IP as before, but Sunspec is not able to connect.

Today Sunspec lost connection to my X 15 for unknown reasons. I didn't change anything in the configuration, and the X 15 also has the same IP as before, but Sunspec is not able to connect.

There are reports in various forums that Sunsepc only worked after the last firmware update once the inverter had been restarted.

Restarting resolved it for me but ... I cant tell which one of the thousends xD
As I remeber correct I updated my whole HA instance including add-ons and integrations. When the inverter produced power I forced a restart from the local sma dashboard. After that the missing information came back with HA sunspec.
Auto update is now deactivated in SMA devices. I'm not happy with that but I want my data.

There are reports in various forums that Sunsepc only worked after the last firmware update once the inverter had been restarted.
Thanks for that, very helpful! Rebooting the X15 from the local interface restored Sunspec's connection, but it did not report all the data. I also had to reload the integration to fix this. Now everything works again.

However, there was no firmware update before the failure. The last update to 03.06.15.R was a week and a half ago. The only update that could have affected the integration was the latest HA core update to 2024.3.0, which I did the same day, but I can't say if that caused the disconnection. I'm now going to monitor certain entities so that I get a notification if this happens again.


fix: deduplicate after after binding local references

#149  👈
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @pevisscher and the rest of your teammates on  Graphite


node.js.yml

Closing this PR since the workflow will be added once version 3 of the SDK is published and we update the cli


procMount: Unmasked is not working

Can you please share the .yml file needed to deploy img on kubernetes pod, if available?

I think I get the same thing, just FYI:
#5 [2/4] RUN apk --no-cache add         --repository http://dl-cdn.alpinelinux.org...
#5       digest: sha256:421cf23668e2abb7ca968581f731eb73cf424b2d8da6358752244806ea2bef29
#5         name: "[2/4] RUN apk --no-cache add \t--repository http://dl-cdn.alpinelinux.org/alpine/latest-stable/community \tca-certificates \tperl-datetime \tperl-timedate"
#5      started: 2019-02-18 23:40:05.985147894 +0000 UTC m=+3.836340248
#5    completed: 2019-02-18 23:40:06.479805956 +0000 UTC m=+4.330998269
#5     duration: 494.658021ms
#5        error: "executor failed running [/bin/sh -c apk --no-cache add \t--repository http://dl-cdn.alpinelinux.org/alpine/latest-stable/community \tca-certificates \tperl-datetime \tperl-timedate]: exit code: 1"
#5 0.444 container_linux.go:344: starting container process caused "process_linux.go:424: container init caused \"rootfs_linux.go:58: mounting \\\"proc\\\" to rootfs \\\"/home/user/.local/share/img/runc/native/executor/0r6g578bq05ai3n1w357a9r74/rootfs\\\" at \\\"/proc\\\" caused \\\"operation not permitted\\\"\""

failed to solve: executor failed running [/bin/sh -c apk --no-cache add         --repository http://dl-cdn.alpinelinux.org/alpine/latest-stable/community       ca-certificates         perl-datetime   perl-timedate]: exit code: 1

Set seccomp.security.alpha.kubernetes.io/pod  to unconfined explicitly?

Also, what's your Kubernetes distribution?
Anyway, procMount will no longer be required: #221

For me adding seccomp.security.alpha.kubernetes.io/pod: unconfined does not change anything.
I have Kubernetes 1.13.3, with some PodSecurityPolicies. But I tried to make sure that the pod has all permissions it needs. Maybe the PSP is breaking this?
From kubectl describe pod img
Annotations:        cni.projectcalico.org/podIP: <IP_ADDRESS>/32
                    container.apparmor.security.beta.kubernetes.io/img: unconfined
                    kubernetes.io/psp: privileged
                    seccomp.security.alpha.kubernetes.io/pod: unconfined

This is the content of the PSP:
apiVersion: extensions/v1beta1
kind: PodSecurityPolicy
metadata:
  annotations:
    seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
  name: privileged
spec:
  allowPrivilegeEscalation: true
  allowedCapabilities:
  - '*'
  allowedProcMountTypes:
  - Unmasked
  - Default
  allowedUnsafeSysctls:
  - net.core.somaxconn
  fsGroup:
    rule: RunAsAny
  hostIPC: true
  hostNetwork: true
  hostPID: true
  hostPorts:
  - max: 65535
    min: 0
  privileged: true
  runAsUser:
    rule: RunAsAny
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  volumes:
  - '*'

When i inspect the stopped container with docker inspect i see that the MaskedPaths and ReadOnlyPaths are all  still the defaults.
In The kubelet logs it sets ProcMount:*Unmasked, but the runtime doesn't seem to follow this.
I'm using Docker Engine 18.09.3, API Version: 1.39, Kubernetes v1.15.0, Feature gate is enabled.

I tried replacing dockerd with containerd (1.2.6) today, and now it works with the same input YAML.
Successfully built docker.io/library/irssi:latest

However I get this message:
time="2019-04-08T21:13:22Z" level=warning msg="Process sandbox is not available, consider unmasking procfs: mount: permission denied (are you root?)\n"
What does this mean @AkihiroSuda?

It means PID namespace is not unshared because  procfs is masked

@AkihiroSuda how can I tell from the host system or from the container runtime that the unmasking worked successfully or not?
Because I have this now and with containerd it worked. And your PR #221 was not in 0.5.6 yet, was it?
containers:
 -  image: gitlab.example.com:5005/img:v0.5.6
    securityContext:
      capabilities:
        add:
        - SETUID
        - SETGID
      privileged: false
      procMount: Unmasked
      runAsUser: 1000

how can I tell from the host system or from the container runtime that the unmasking worked successfully or not?

kubectl exec foo grep "^tmpfs /proc/.*" /proc/mounts shows masks if masked

Because I have this now and with containerd img build worked, however it printed this error message. And your PR #221 was not in 0.5.6 yet, was it?

@jessfraz could you consider releasing v0.6.0?

@AkihiroSuda

kubectl exec foo grep "^tmpfs /proc/.*" /proc/mounts shows masks if masked

So I reckon that this is bad, from inside the container?
/ $ grep "^tmpfs /proc/.*" /proc/mounts
tmpfs /proc/acpi tmpfs ro,relatime 0 0
tmpfs /proc/kcore tmpfs rw,nosuid,size=65536k,mode=755 0 0
tmpfs /proc/keys tmpfs rw,nosuid,size=65536k,mode=755 0 0
tmpfs /proc/timer_list tmpfs rw,nosuid,size=65536k,mode=755 0 0
tmpfs /proc/sched_debug tmpfs rw,nosuid,size=65536k,mode=755 0 0
tmpfs /proc/scsi tmpfs ro,relatime 0 0

My containerd says this
crictl inspectp 04814c79697a4
        "maskedPaths": [
          "/proc/acpi",
          "/proc/asound",
          "/proc/kcore",
          "/proc/keys",
          "/proc/latency_stats",
          "/proc/timer_list",
          "/proc/timer_stats",
          "/proc/sched_debug",
          "/sys/firmware",
          "/proc/scsi"
        ],
        "readonlyPaths": [
          "/proc/bus",
          "/proc/fs",
          "/proc/irq",
          "/proc/sys",
          "/proc/sysrq-trigger"
        ]
      "mounts": [
        {
          "destination": "/proc",
          "type": "proc",
          "source": "proc",
          "options": [
            "nosuid",
            "noexec",
            "nodev"
          ]
        },

But my Pod contains this:
    securityContext:
      capabilities:
        add:
        - SETUID
        - SETGID
      privileged: false
      procMount: Unmasked
      runAsUser: 1000

But in kubelet log I can spot this:
&SecurityContext{Capabilities:&Capabilities{Add:[SETUID SETGID],Drop:[],},Privileged:*false,SELinuxOptions:nil,RunAsUser:*1000,RunAsNonRoot:nil,ReadOnlyRootFilesystem:nil,AllowPrivilegeEscalation:nil,RunAsGroup:nil,ProcMount:*Unmasked,} true false false}]
So, I don't get it. Why does Unmasked not work?
Containerd is at version 1.2.6.

Later k8s version don't even have procMount: Unmasked, trying to set this value, it will be changed to Default. What works is:
securityContext:
   privileged: true

Which seems like an overkill. Also, in that case, the annotations are obsolete.

@oz123 Came across the same problem. According to this https://github.com/hpcng/singularity/issues/5857#issuecomment-791814313, you can enable with an API server feature gate.


TEST: websiteGet

Testing websiteGet feature.

These tests are included in new PR #483. Closing this one.


Incorrect links to chapters by too many #

Hey ZoltanLeo(@zoltanleo),
I was looking at the source of the MD files and found out that you're using too many #.
It only needs one.
You can attest that by clicking on the menu to the left of the README.md title above all the text.
An image better than a thousand words, right:

This menu is quite recent.
Cheers,
Gus

Hi Gus (@ gcarreno)
I don't quite understand what you mean when you talk about "extra" #. According to the MD file specification, the header level is determined by the number of '#' characters.
https://guides.github.com/features/mastering-markdown
When converting to other formats, this allows you to correctly form the table of contents of the text.
Or did you mean something else?

Hey Zoltan(@zoltanleo),

Or did you mean something else?

Sorry for the confusion, mea culpa, and yes I mean something else.
 Correct way -->
[Header Level Three](###header-level-three) <!-- Incorrect way -->

The part inside the curved brackets is a URL and in a URL the # part has only one #, right?
You're putting as many # has are in the Markdown header, which is incorrect.
Hope this clarifies the issue :smile:
Cheers,
Gus

The part inside the curved brackets is a URL and in a URL the # part has only one #, right?
You're putting as many # has are in the Markdown header, which is incorrect.

Hi Gus (@gcarreno)
You're right. It's enough to specify one '#' sign.
Thanks for the valuable comment. I'm fixed it. :)

Hey Zoltan(@zoltanleo),

Thanks for the valuable comment.

You are more than welcome!!

I'm fixed it. :)

That's awesome sauce!!
I've looked at the commit and I'm closing this issue cuz it's now solved.
As usual, many thanks for the quick response!!
Cheers,
Gus


mesh_core_cython

Sorry if this is a stupid question, but I am having trouble with installing this module and received this error message:
ModuleNotFoundError: No module named 'mesh_core_cython'
How to install it on Ubuntu command line? I also have pip installed.

Sorry if this is a stupid question, but I am having trouble with installing this module and received this error message:
ModuleNotFoundError: No module named 'mesh_core_cython'
How to install it on Ubuntu command line? I also have pip installed.

Hi there, did you clear the problem? I have the same error on google colab.

You need to build cython file first, as in tutorial.


update the usage screen

Did a bit of formatting to make things consistent
Added a section about syncing with ultralist.io

Have you thought about using Cobra?
This would also allow an easy configuration of ultralist itself which can be handy e.g. for the backend part and / or enable / disable some flags like e.g. the colored output mentioned in #143.
It's would also follow a common guide for command line apps, commands, subcommands and flags. :)

oh this is interesting! I'll add this to the backlog.

added #153.


⚠ Nebulance has degraded performance

In 6d3d55b, Nebulance ($NBL) experienced degraded performance:

HTTP code: 200
Response time: 21821 ms

Resolved: Nebulance performance has improved in dea842c after 7 minutes.


Pin openmicroscopy.postgresql to 2.0.0

While the PG role undergoes a few milestones for
the new 3.0 version, pin all requirements to the
latest stable, 2.0.0.
See https://github.com/openmicroscopy/ansible-role-postgresql/pull/6

Looks fine from my point of view.


Update the library on Maven

The Current one is outdated (1.0.5)

There hasn't been an updated release yet on Maven Central
https://search.maven.org/search?q=g:net.twasi

There hasn't been an updated release yet on Maven Central
https://search.maven.org/search?q=g:net.twasi

There hasn't been an updated release yet on Maven Central
https://search.maven.org/search?q=g:net.twasi
If you want to use the latest from Master (until a new release is made @LarsBaertschi @DieserMerlin ) you can run the maven install goal to install it into your local repo for consumption in your projects. This is what I'm doing atm with my own projects since I'm living on the bleeding edge.

Yeah im doing the same right now, but an updated release would be really helpful.

There hasn't been an updated release yet on Maven Central
https://search.maven.org/search?q=g:net.twasi
If you want to use the latest from Master (until a new release is made @LarsBaertschi @DieserMerlin ) you can run the maven install goal to install it into your local repo for consumption in your projects. This is what I'm doing atm with my own projects since I'm living on the bleeding edge.

Yeah im doing the same right now, but an updated release would be really helpful.

On it, there will be a new release soon

On it, there will be a new release soon

Thanks a lot!

Thanks a lot!

@LarsBaertschi not only created a new release but also automated the releases so new versions will automatically be on maven itf.

@LarsBaertschi not only created a new release but also automated the releases so new versions will automatically be on maven itf.

Awesome!!!!

Awesome!!!!

@DieserMerlin Maven still shows 1.0.5 as the latest version

@DieserMerlin Maven still shows 1.0.5 as the latest version

https://search.maven.org/artifact/net.twasi/obs-websocket-java/1.2.0/jar


Support for self-hosted sourcegraph instance

This plugin seems great! Thanks for the work put into this. I'm noticing that everything works fine with the cloud-based Sourcegraph Api, but not with my local instance.
I'm reading through the repo now and don't see anything in the configuration about using a different Sourcegraph endpoint. Is there an option that I've overlooked?
If this is work that needs doing, I can contribute if necessary. Thanks again!

I just pushed better support for this -- if you wanted to give it a try, I'd be happy to try and solve any bugs you run into


Styling with styled-components

Hi. I'm trying to use next-routes together with styled-components. Let's say my component with link looks like this:
const StyledLink = styled.a`
  ...
`;

...

<Link route="mainPage">

</Link>

In this case there are no href on the a tag. But if instead of StyledLink I use Main page, it works perfectly. Do you have any ideas how I can solve it? Thanks in advance!

@dmt-13 you can use the passHref property https://github.com/zeit/next.js/issues/1942

Awesome, thanks a lot! Sorry for opening this issue, didn't know about that property.


Update broken URLs

The URLs of PowerShell, Headed and headless mode are broken. Please update them.

Thanks so much for your contributions, Jiong!


How to get pageContext and webparts properties in Aurelia app?

Hi Magnus,
Great example, but I was wondering how I can connect to SharePoint / how I can access the page context from within the Aurelia app?
Also wondering how to access the webparts configuration/properties (IHelloWorldWebPartProps)?
If you could help with that, then that would be great.
Thanks,
Bart

@bartkusters maybe this link helps you https://docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/guidance/use-existing-javascript-libraries

@bartkusters Sorry for the late reply. I use the dependency injection feature in Aurelia.
aurelia.container.registerInstance("WebPartContext", this.context);
I my render method I store looks like below. Notice the line with registerInstance
public render(): void
{

    this.domElement.innerHTML = '
Loading...
';

    require(['aurelia-bootstrapper'],(au) =>
    {
        au.bootstrap((aurelia: Aurelia) =>
        {
            aurelia.use
            .standardConfiguration()
            .developmentLogging();

            var el = document.getElementById(this.instanceId);
            aurelia.start().then(() => {
                aurelia.container.registerInstance("WebPartContext", this.context);
                aurelia.setRoot(PLATFORM.moduleName('webparts/documentList/document'),el);
            });
            }
        );

    });
}

And then you can inject the context anywhere you like, see the code below.
import WebPartContext from '@microsoft/sp-webpart-base/lib/core/WebPartContext';

@inject("WebPartContext")
export class documentlist
{

    public webpartContext: WebPartContext;

    constructor(webpartContext: WebPartContext)
    {
        this.webpartContext = webpartContext;
    }
}

@magnusdanielson thank you very much, and no worries for the late response, much appreciate your effort to response.


Only month is zero-based

Documentation example results in April 20, 2016, however only the month is zero based and it should read April 20, 2015.
> new Date(2015, 3, 20)
< Mon Apr 20 2015 00:00:00 GMT+0200 (Central Europe Daylight Time)

Already fixed by https://github.com/amsul/pickadate.js/pull/1001


bug in video_player plugin playing mp3

    _audioController =
    VideoPlayerController.network("xxxxx.mp3")
      ..setLooping(true)
      ..setVolume(0.5)
      ..initialize().then((_) {
        _audioController.play();
      });

When I used the video_player plugin to play mp3 audio, I did not succeed on IOS and did not give any hints, but it was fine on Android

dependencies:
  video_player: ^0.10.3+3

Hi @arcticfox1919
could you please provide your updated  flutter doctor -v
and your flutter run --verbose?
Thank you

[✓] Flutter (Channel stable, v1.9.1+hotfix.6, on Mac OS X 10.14.6 18G95, locale zh-Hans-CN)
• Flutter version 1.9.1+hotfix.6 at /Users/bruceying/develop/flutter
• Framework revision 68587a0916 (2 months ago), 2019-09-13 19:46:58 -0700
• Engine revision b863200c37
• Dart version 2.5.0
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
• Android SDK at /Users/bruceying/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-29, build-tools 29.0.2
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 11.2.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 11.2.1, Build version 11B500
• CocoaPods version 1.8.4
[✓] Android Studio (version 3.5)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 41.1.2
• Dart plugin version 191.8593
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
[✓] VS Code (version 1.40.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.6.0
[✓] Connected device (1 available)
• sheng的 iPhone • 7590ded783ec9f44ebfd5b0963b4d172c761c456 • ios • iOS 12.0
• No issues found!

flutter run --verbose Too many logs
logs

audioController =
VideoPlayerController.network("xxxxx.mp3")
..setLooping(true)
..setVolume(0.5)
..initialize().then(() {
_audioController.play();
});

I have debugged, the initialize method does not return, and the play method is not called

Hi again @arcticfox1919
I apologize, I didn't recognize the duplicate before asking you further info,
please follow up on that issue.
I'm closing the current one as duplicate.
If you disagree please write in the comments
and I will reopen it.
Thank you


[FIXED - Implemented] [Feature request] Add support for pump-style behavior for Miss Combo (Miss Combo resets on any non-miss judgement)

Please Select the game mode your feature request is about.
pump
Is your feature request related to a problem?
On Pump it Up, Goods (SM "Decents") will work like Decents on Hit Combos, maintaining the combo without adding to it, but on Miss Combos they will break them. Bads work like "Way-Offs" in the sense that they break your Hit Combo, but instead of keeping a Miss Combo going they also break those.
Misses combos on Pump it Up are comprised exclusively of misses and will reset to 0 on any judgement different from a miss.
Currently, this unsupported on Outfox (alpha V build from 05-08-2023)
Describe the solution you'd like
When pump gamemode is active, just follow the Pump standard and make it so that any judgement different from TapNoteScore_Miss resets a Miss Combo Count to 0, while also allowing the lowest tier of judgement ("Bad") to break an active Hit Combo and the second-to-lowest ("Good") to maintain an active Hit Combo.
Describe alternatives you've considered
I tried changing various combinations of 'TapNoteScore_' on the following attributes on metrics.ini for testing purposes, but couldn't get it to work like pump does. The defaults from _fallback are as follows:
MinScoreToContinueCombo=ComboContinue()
MinScoreToMaintainCombo=ComboMaintain()
MaxScoreToIncrementMissCombo='TapNoteScore_Miss'
It seems that whatever you set as the MinScoreToMaintainCombo will affect both Misses Combos and Hit Combos.
So you either have tiers breaking both types of combos, or maintaining both. It'd be nice to have an option to change said behavior.
Additional context
No response

Tested it and it's fixed in alpha-V: build a15 (11-08-2023). Goods and Bads now reset the Misses Combo if playing Pump Gamemode and using a Pump Timing Mode.

Fixed in 042


Authentication using the Service Principal Authentication Method missing in version 3.5.4?

Hi,
we are currently using version 3.1.16 with the Service Principal Authentication Method to authenticate to different tenants to retrieve the inventory. In the tenants we've created an Enterprise App with certificate authentication and we've set the appropriate read permissions on the resources. Every weekend we run a scheduled task that calls AzureResourceInventory.ps1 with the parameters TenantID, AppId and Secret for all those tenants.
Now we're trying to move from version 3.1.16 to version 3.5.4 but after testing it seems the Service Principal Authentication Method is not available anymore. Executing Invoke-ARI with those parameters returns a lot of "Run Connect-AzAccount to login" messages and the parameters AppId and Secret aren't mentioned anymore in the updated README (https://github.com/microsoft/ARI/tree/main?tab=readme-ov-file#3-parameters).
Did we miss a breaking change alert on this authentication method? And are you willing and planning to reimplement this method?

Hi @KorZijl
Our idea was to initially remove the SPN support in the module version, that is why we removed from the README.
But some people have requested that functionality back and it should be working in the version 3.5.4
The parameters should be the same actually, -Appid and -Secret (the secret must be passed as plaintext).
If you are using the parameters correctly and still having issues, please send me the output of the script with the -Debug

Hi Claudio,
We're using certificate authentication so we pass the PEM-file as the secret value instead of a plaintext secret successfully using version 3.1.16.
I've executed the command below and attached the result as picture (cause the debugging output is messing up the layout):
Invoke-ARI -TenantId 419a6976-xxxx-xxxx-xxxx-xxxxxxxxxxxx -AppId 1af2daf0-xxx-xxxx-xxxx-xxxxxxxxxxxx -Secret D:\ARI\AzureResourceInventory-BASE64-ALL.pem -ReportDir D:\ARI\Exports\TESTWORKZ -ReportName ARI_TESTWORKZ -Debug

I've also tested with Powershell 7.4.5 but the error output is almost similar.

Hi Claudio,
There are examples to use certificates but they rely on the Windows certificate store (example 7) or on PFX-files (example 9):
https://learn.microsoft.com/en-us/powershell/module/az.accounts/connect-azaccount?view=azps-12.3.0#example-7-connect-using-certificates
https://learn.microsoft.com/en-us/powershell/module/az.accounts/connect-azaccount?view=azps-12.3.0#example-9-connect-using-certificate-file
I need to rethink my authentication method i guess ;)
BTW: For testing purposes i've added a client secret to the enterprise app and used that as plaintext secret but i'm still getting "Run Connect-AzAccount to login" messages.
Invoke-ARI -TenantId 419a6976-xxxx-xxxx-xxxx-xxxxxxxxxxxx -AppId 1af2daf0-xxx-xxxx-xxxx-xxxxxxxxxxxx -Secret "x-M8Q~xxxxxxx~xxxx~xx~xxxxxxxxxxxxxxxxxx" -ReportDir D:\ARI\Exports\TESTWORKZ -ReportName ARI_TESTWORKZ -Debug

Hi @TheOlek
Are you also using a certificate to authenticate?

@Claudio-Merola  im passing as plain text

@TheOlek
Yes it is, can you run the command adding the -Debug and post the output here?

@Claudio-Merola

@Claudio-Merola

@TheOlek
I think there was a bug there.
Can you try the version 3.5.6 and see if it works?

@Claudio-Merola im getting the same behaviour even with the new version

@TheOlek
with the version 3.5.5 or 3.5.6?
I released version 3.5.5 and then found that bug, then I just released version 3.5.6 a few minutes after 3.5.5

@Claudio-Merola  im using 3.5.6

I tested this again with 3.5.6 and encountered the same behavior as TheOlek.

@TheOlek @KorZijl
I updated the module to the version 3.5.7
Can you guys try it using the -Debug parameter?
This version should at least give more details on what is going on during the authentication phase

@Claudio-Merola here it is

@Claudio-Merola: I've got similar output using version 3.5.7:

@Claudio-Merola  do you have any update on this?

@TheOlek
This should be fixed already.
Can you try to run the following command:
$secret = "YOURSECRET"
$SecurePassword = ConvertTo-SecureString -String $Secret -AsPlainText -Force
If that command runs without issue, then ARI should be running fine, at least without the previous issue.

Hi @Claudio-Merola
I've tested this client / secret authentication using version 3.5.14 and can confirm it's fixed now.
If I have an hour to spare I'll try to make a pull request to extend the code with certificate authentication.


Improve and clarify example documentation

Trying to help other people dodge some of the hurdles I stumbled over

a related note, the prometheus.yml example uses scrape_interval of 1s
To me this seems crazy fast, particularly for the kind of environmental monitoring I am doing, the environment just doesn't change that fast.
(and partly because my modbus scrape takes 1.5s to process)


Vs code delete ; for my js file and setup 2spaces as a tab for one file

VSCode Version: Code - Insiders 1.3.0-insider (a1293f5056e79c3f0e2cd3e24909f41ff4eef472, 2016-07-05T13:09:46.271Z)
OS Version: Windows_NT ia32 10.0.10586

Steps to Reproduce:
1.ctrl+shift+f
for other files work perfect. Config setup to 4 spaces as a tab.

@dbaeumer: feels like JS formatting, not sure if you are the right person.

@FrozzyBoy do you have any additional extension installed. The built in JS formatter doesn't remove ;

@FrozzyBoy Please try running vscode with --disable-extensions and let us know if this still repos. If it does, please add some information about how we can reproduce this issue, along with an example file the demonstrates this.
Thanks.


Adding Support to className

"react-infinite-scroll-component": "^4.2.0"
Hi, I'm using this lib, it worked really well.
One thing that I've tried to do without success is put an additional class to InfiniteScroll rendered wrap element. In my case I'm rendering bootstrap cols and I want to add a row as immediate parent div.
<InfiniteScroll
            className="row custom-class" //this is what I've tried and none class were added
            dataLength={this.vm.items.length}
            next={this.loadFunc}
            hasMore={this.vm.filter.hasNextPage}>

To fix it, I had to manually add the following css to simulate the bootstrap row:
    .infinite-scroll-component{
        display: flex;
        flex-wrap: wrap;
        margin-right: -15px;
        margin-left: -15px;
    }

I think could be really simple to support this scenario, if make sense I could help to do it.
Maybe change this line https://github.com/ankeetmaini/react-infinite-scroll-component/blob/master/app/index.js#L226
to: className={infinite-scroll-component ${this.props.className || ''}}
Regards

@TheBearSO can you submit a PR? :)
Sorry for not getting to it earlier!

Hi @ankeetmaini I've already done it... https://github.com/ankeetmaini/react-infinite-scroll-component/pull/82

I guess this issue could be closed already no?


NumberPrompt Dialog errors out with NameError: name 'ChoiceRecognizer' is not defined

Version
v4.4.0.b2
Describe the bug
Related to #216, #217 and #214
Please read #216 and #217 before this since they are directly related to NumberPrompt. After putting in those simple fixes in my fork of the SDK, it finally errors out with NameError: name 'ChoiceRecognizer' is not defined. Seems like a direct issue with #214  and possibly a copy and paste issue from ConfirmPrompt
To Reproduce
Bug in code: botbuilder\dialogs\prompts\number_prompt.py:58
Expected behavior
NumberPrompt should work without any errors.
Screenshots
If applicable, add screenshots to help explain your problem.
Additional context
Add any other context about the problem here.
[bug]

Duplicate of #185


Error returning OAuth user info: missing_token due to AuthLib V1.0.0

The latest AuthLib breaks Oauth, returns the "Error returning OAuth user info: missing_token".
Downgrading back to authlib==0.15.5 fixes this error and allows SSO to work again.
How to reproduce the bug

Setup Google Oauth
Install Authlib 1.0.0
Try to login
See Error returning OAuth user info: missing_token

Expected results
Login via google SSO keeps working.
Actual results
Latest AuthLib releases throws a missing_token error.
Screenshots
If applicable, add screenshots to help explain your problem.

Environment
(please complete the following information):

browser type and version: Chrome
superset version: 1.4.0
python version: 3.9.7
node.js version: 16.9.0
any feature flags active:

Checklist
Make sure to follow these steps before submitting your issue - thank you!

[x] I have checked the superset logs for python stacktraces and included it here as text if there are any.
[x] I have reproduced the issue with at least the latest released version of superset.
[x] I have checked the issue tracker for the same issue and I haven't found one similar.

Additional context
Add any other context about the problem here.

Is this still an issue on 2.0.1?

I can confirm that it is still an issue on on the latest dev docker build. (At 2023-03-30)

I have tested this again. It does not seem to be an issue anymore. Just note that it does not work if using:
          'server_metadata_url': 'https://accounts.google.com/.well-known/openid-configuration',
The URLs have to be manually defined.

Thanks @longtomjr!


Sequencer addition

Adding new Sequencer service similar to Flow but it allows forward and backward execution of the steps.

Superseded by #206


Fetching Cast of a Show

@kunalnpandey seems like you did not create a new branch of the master, or perhaps your master was not synced with this master.
Due to this, your commits which have already been merged in this repo are duplicated.
Please do the following:

Sync your repo's master with this master
Make a new branch
Make these changes to that branch and then submit a PR

As you can see, the changes in your PR's README are conflicting with the current README.

Now Sir I have updated as you suggested.

It is not showing conflicts now.