openvswitch and routes not working after restart on Rocky-Linux 8.5

Description
With a bit of modification of the kubeinit files I am able to get okd deployed on rocky-linux 8.5. You can see the modifications here: https://github.com/Tokix/kubeinit I could make a pull request but there is one thing that is not working as expected and that is the restart of the server. After the restart the routes are vanished and I'm not able to reach the frontend anymore.
To Reproduce
Steps to reproduce the behavior:

Install a Redhat 8.5 machine setup ssh connection as nyctea as described in the manual
In my case I had to install python on the hypervisor_host machine addionally before running the playbook successfully

yum install python3

Clone the changes for Rocky8.5

git clone https://github.com/Tokix/kubeinit.git

Run the playbook

ansible-playbook \
    -v --user root \
    -e kubeinit_spec=okd-libvirt-3-1-1 \
    -i ./kubeinit/inventory \
    ./kubeinit/playbook.yml

Enable the frontend

ssh root@nyctea
chmod +x  create-external-ingress.sh
./create-external-ingress.sh

Setup the DNS Entries for your system
check if the url is working (it works at this point):

https://console-openshift-console.apps.okdcluster.kubeinit.local/

reboot the server

init 6

The URL is not working any longer:

https://console-openshift-console.apps.okdcluster.kubeinit.local/
Expected behavior
The external url of the cluster should be available on restart and the routes should be set.
Screenshots
Working route-configuration before the restart:

Route configuration after restart:

Infrastructure

Hypervisors OS: Rocky-Linux
Version 8.5

Deployment command
ansible-playbook \
    -v --user root \
    -e kubeinit_spec=okd-libvirt-3-1-1 \
    -i ./kubeinit/inventory \
    ./kubeinit/playbook.yml

Inventory file diff
I did no changes to the inventory file
Additional context
As selinux is active on rocky-linux 8.5 my first thought was that some changes could not be persisted so I disabled selinux for testing. However it is still not running after restart.
Checked this old issue https://forums.opensuse.org/showthread.php/530879-openvswitch-loses-configuration-on-reboot but it seems that the booting order of openvswitch and network.service is fine.
Furthermore I ran the steps "Attach our cluster network to the logical router" in the file kubeinit/roles/kubeinit_libvirt/tasks/create_network.yml - This got me back to the correct routing table but I'm still not able to reach the guest-systems via <IP_ADDRESS>-x
Is there any script or service that needs or can be re-run to enable the networking after reboot?
In any case I'm thankful for any hints let me know if you need more information.
Thank you in any case for the great project :)

I'm also running into a problem with Rocky Linux.
Any help is welcome, this is a cool project, I hope we can get it working on Rocky.
TASK [kubeinit.kubeinit.kubeinit_prepare : Create ssh config file from template] *******************************************************************************
task path: /home/jeff/.ansible/collections/ansible_collections/kubeinit/kubeinit/roles/kubeinit_prepare/tasks/create_host_ssh_config.yml:52
<<IP_ADDRESS>> ESTABLISH LOCAL CONNECTION FOR USER: jeff
<<IP_ADDRESS>> EXEC /bin/sh -c 'echo ~jeff && sleep 0'
<<IP_ADDRESS>> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/jeff/.ansible/tmp `"&& mkdir "` echo /home/jeff/.ansible/tmp/ansible-tmp-1650765476.136161-198434-213715344205742 `" && echo ansible-tmp-1650765476.136161-198434-213715344205742="` echo /home/jeff/.ansible/tmp/ansible-tmp-1650765476.136161-198434-213715344205742 `" ) && sleep 0'
<<IP_ADDRESS>> EXEC /bin/sh -c 'rm -f -r /home/jeff/.ansible/tmp/ansible-tmp-1650765476.136161-198434-213715344205742/ > /dev/null 2>&1 && sleep 0'
The full traceback is:
Traceback (most recent call last):
  File "/home/jeff/kubeinit/kubeinit/lib64/python3.6/site-packages/ansible/template/__init__.py", line 1117, in do_template
    res = j2_concat(rf)
  File "<template>", line 47, in root
  File "/home/jeff/kubeinit/kubeinit/lib64/python3.6/site-packages/jinja2/runtime.py", line 903, in _fail_with_undefined_error
    raise self._undefined_exception(self._undefined_message)
jinja2.exceptions.UndefinedError: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_host'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/jeff/kubeinit/kubeinit/lib64/python3.6/site-packages/ansible/plugins/action/template.py", line 146, in run
    resultant = templar.do_template(template_data, preserve_trailing_newlines=True, escape_backslashes=False)
  File "/home/jeff/kubeinit/kubeinit/lib64/python3.6/site-packages/ansible/template/__init__.py", line 1154, in do_template
    raise AnsibleUndefinedVariable(e)
ansible.errors.AnsibleUndefinedVariable: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_host'
fatal: [localhost]: FAILED! => {
    "changed": false,
    "msg": "AnsibleUndefinedVariable: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_host'"
}

PLAY RECAP *****************************************************************************************************************************************************
localhost                  : ok=48   changed=7    unreachable=0    failed=1    skipped=25   rescued=0    ignored=0

My issue isn't specific to Rocky, so I'll add a new issue.
I ran into the same error using debian.

Maybe there are some IPtables rules not persisted after rebooting and I dont have a way to test this on Rocky.

Hi @ccamacho,
Thanks for the awesome project. 👍
I am also running into same issue. After reboot, I am not able to reach 10.0.0.x.
Is there a way where we can re enable the networking after reboot?

I've got two servers, one with alma 8.x (which also seems to lose connectivity after reboot), and one with centos stream. I could help with providing some debug data, I can sacrifice my currently running clusters if need be.

Okay, so the one with CentOS 8 and vanilla k8s didn't persist after restart. The VM's launched fine, but there was no networking. Also, the service pod only had one IP address, from the 10.89.x.x subnet.


Support NumPy array targets with Pandas dataframe observables

Description
Currently, for all scikit learn Khiops estimators, if the observables X are in a pandas.DataFrame, then the targets y can either be in a pandas.Series or in a (single-column) pandas.DataFrame.
The goal of this issue is to allow targets y to be array-like, that is, to be in an object which has the __array__ method defined. This includes NumPy arrays.
Questions/Ideas

In order to achieve this, we need to:

make sure type-checking rules allow for the (X: pandas.DataFrame, y: hasattr(y, "__array__") combination
allow (or, rather, complete) support for array-like targets in the PandasTable class
add relevant tests, in test_dataset_class, but also in test_dataset_errors if applicable.

The end result of this issue would be that all in-memory data tables would support array-like targets.

Already addressed in PR #248

Already addressed in PR https://github.com/KhiopsML/khiops-python/pull/248

Already addressed in PR https://github.com/KhiopsML/khiops-python/pull/248


flutter run CocoaPods crash: "NoMethodError - undefined method files' for <PBXFileReference path=Pods

xcode run flutter app is faild ,
error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
and run pod install
Prompt the following error,
I tried to re-install CocoaPods, ruby ,  But still not resolved
Analyzing dependencies
Adding spec repo `trunk` with CDN `https://cdn.cocoapods.org/`
Downloading dependencies
Installing FMDB (2.7.5)
Installing Flutter (1.0.0)
Installing device_info (0.0.1)
Installing flutter_compass (0.0.1)
Installing flutter_qiblah (0.0.1)
Installing geolocator (5.3.0)
Installing google_api_availability (2.0.2)
Installing location_permissions (2.0.4+1)
Installing path_provider (0.0.1)
Installing path_provider_macos (0.0.1)
Installing shared_preferences (0.0.1)
Installing shared_preferences_macos (0.0.1)
Installing shared_preferences_web (0.0.1)
Installing sqflite (0.0.1)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `Runner.xcworkspace` for this project from now on.

Command
/usr/local/bin/pod install

Report

What did you do?

What did you expect to happen?

What happened instead?

Stack
   CocoaPods : 1.9.0
        Ruby : ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-darwin19]
    RubyGems : 3.0.8
        Host : Mac OS X 10.15.3 (19D76)
       Xcode : 11.3.1 (11C504)
         Git : git version 2.21.1 (Apple Git-122.3)
Ruby lib dir : /Users/yefan/.rvm/rubies/ruby-2.6.0/lib
Repositories : trunk - CDN - https://cdn.cocoapods.org/

Plugins
cocoapods-deintegrate : 1.0.4
cocoapods-plugins     : 1.0.0
cocoapods-search      : 1.0.0
cocoapods-stats       : 1.1.0
cocoapods-trunk       : 1.4.1
cocoapods-try         : 1.1.0

Podfile
# Uncomment this line to define a global platform for your project
platform :ios, '9.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

project 'Runner', {
  'Debug' => :debug,
  'Profile' => :release,
  'Release' => :release,
}

def parse_KV_file(file, separator='=')
  file_abs_path = File.expand_path(file)
  if !File.exists? file_abs_path
    return [];
  end
  generated_key_values = {}
  skip_line_start_symbols = ["#", "/"]
  File.foreach(file_abs_path) do |line|
    next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
    plugin = line.split(pattern=separator)
    if plugin.length == 2
      podname = plugin[0].strip()
      path = plugin[1].strip()
      podpath = File.expand_path("#{path}", file_abs_path)
      generated_key_values[podname] = podpath
    else
      puts "Invalid plugin specification: #{line}"
    end
  end
  generated_key_values
end

target 'Runner' do
  use_frameworks!
  use_modular_headers!

  # Flutter Pod

  copied_flutter_dir = File.join(__dir__, 'Flutter')
  copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
  copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
  unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
    # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
    # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
    # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.

    generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
    unless File.exist?(generated_xcode_build_settings_path)
      raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
    end
    generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
    cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];

    unless File.exist?(copied_framework_path)
      FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
    end
    unless File.exist?(copied_podspec_path)
      FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
    end
  end

  # Keep pod path relative so it can be checked into Podfile.lock.
  pod 'Flutter', :path => 'Flutter'

  # Plugin Pods

  # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
  # referring to absolute paths on developers' machines.
  system('rm -rf .symlinks')
  system('mkdir -p .symlinks/plugins')
  plugin_pods = parse_KV_file('../.flutter-plugins')
  plugin_pods.each do |name, path|
    symlink = File.join('.symlinks', 'plugins', name)
    File.symlink(path, symlink)
    pod name, :path => File.join(symlink, 'ios')
  end
end

# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
install! 'cocoapods', :disable_input_output_paths => true

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

Error
NoMethodError - undefined method `files' for <PBXFileReference path=`Pods` UUID=`5C10A0E0241512E000BF9218`>:Xcodeproj::Project::Object::PBXFileReference
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb:165:in `create_xcconfig_ref'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb:45:in `set_target_xcconfig'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb:21:in `block (2 levels) in integrate'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb:20:in `each'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb:20:in `block in integrate'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb:19:in `each'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb:19:in `integrate'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator/target_integrator.rb:399:in `block in integrate!'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/user_interface.rb:64:in `section'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator/target_integrator.rb:398:in `integrate!'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator.rb:146:in `each'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator.rb:146:in `integrate_user_targets'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer/user_project_integrator.rb:73:in `integrate!'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer.rb:801:in `block in integrate_user_project'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/user_interface.rb:64:in `section'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer.rb:797:in `integrate_user_project'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer.rb:176:in `integrate'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/installer.rb:162:in `install!'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/command/install.rb:52:in `run'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/claide-1.0.3/lib/claide/command.rb:334:in `run'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/lib/cocoapods/command.rb:52:in `run'
/Users/yefan/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.0/bin/pod:55:in `<top (required)>'
/usr/local/bin/pod:23:in `load'
/usr/local/bin/pod:23:in `<main>'
/Users/yefan/.rvm/rubies/ruby-2.6.0/bin/ruby_executable_hooks:24:in `eval'
/Users/yefan/.rvm/rubies/ruby-2.6.0/bin/ruby_executable_hooks:24:in `<main>'

[!] Oh no, an error occurred.

Search for existing GitHub issues similar to yours:
https://github.com/CocoaPods/CocoaPods/search?q=undefined+method+%60files%27+for+%3CPBXFileReference+path%3D%60Pods%60+UUID%3D%605C10A0E0241512E000BF9218%60%3E%3AXcodeproj%3A%3AProject%3A%3AObject%3A%3APBXFileReference&type=Issues

If none exists, create a ticket, with the template displayed above, on:
https://github.com/CocoaPods/CocoaPods/issues/new

Be sure to first read the contributing guide for details on how to properly submit a ticket:
https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md

Don't forget to anonymize any private data!

Looking for related issues on cocoapods/cocoapods...
Found no similar issues. To create a new issue, please visit:
https://github.com/cocoapods/cocoapods/issues/new

If none exists, create a ticket, with the template displayed above, on:
https://github.com/CocoaPods/CocoaPods/issues/new

This is a crash in CocoaPods.  Can you file an issue there?
Keeping open for now to see if this is a wider issue with CocoaPods 1.9 and there's a workaround we can add to Flutter.

Looks like https://github.com/CocoaPods/CocoaPods/issues/7395.  @sulaymanyf can you share a project that reproduces this?

Without additional information, we are unfortunately not sure how to resolve this issue. We are therefore reluctantly going to close this bug for now. Please don't hesitate to comment on the bug if you have any more information for us; we will reopen it right away!
Thanks for your contribution.


Swift 4

Any chance we can update Package.swift for Swift 4? Most of the other Kitura packages have already been updated.

@collinhundley I'll try to get this done within a day.

@collinhundley The latest tag adds Swift 4 support https://github.com/IBM-Swift/Swift-SMTP/releases/tag/v1.1.3


chore(deps): update pre-commit dependencies

This PR contains the following updates:

Package
Type
Update
Change

astral-sh/ruff-pre-commit
repository
patch
v0.4.2 -> v0.4.7

rhysd/actionlint
repository
minor
v1.6.27 -> v1.7.1

Note: The pre-commit manager in Renovate is not supported by the pre-commit maintainers or community. Please do not report any problems there, instead create a Discussion in the Renovate repository if you have any questions.

Release Notes

astral-sh/ruff-pre-commit (astral-sh/ruff-pre-commit)
v0.4.7
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.7
v0.4.6
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.6
v0.4.5
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.5
v0.4.4
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.4
v0.4.3
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.3

rhysd/actionlint (rhysd/actionlint)
v1.7.1
Compare Source

Support ubuntu-24.04 runner label, which was recently introduced as beta. (#425, thanks @bitcoin-tools)
Remove the support for macos-10 runner label which was officially dropped about 2 years ago.
Remove the support for windows-2016 runner label which was officially dropped about 2 years ago.
Document URLs used in help output and links in the playground prefer specific version tag rather than main branch. For example,

Before: https://github.com/rhysd/actionlint/tree/main/docs
After: https://github.com/rhysd/actionlint/tree/v1.7.1/docs

Fix actionlint wrongly reports an error when using ghcr.io or docker.io at image field of action metadata file of Docker action without docker:// scheme. (#428)runs:
  using: 'docker'

This should be OK
image: 'ghcr.io/user/repo:latest'

- Fix checking `preactjs/compressed-size-action@v2` usage caused a false positive. ([#422](https://togithub.com/rhysd/actionlint/issues/422))
- Fix an error message when invalid escaping is found in globs.
- The design of the [playground page](https://rhysd.github.io/actionlint/) is overhauled following the upgrade of bulma package to v1.
- Current actionlint version is shown in the heading.
- The color theme is changed to the official dark theme.
- The list of useful links is added to the bottom of the page as 'Resources' section.

[Changes][v1.7.1]

v1.7.0
Compare Source

From this version, actionlint starts to check action metadata file action.yml (or action.yaml). At this point, only very basic checks are implemented and contents of steps: are not checked yet.

It checks properties under runs: section (e.g. main: can be specified when it is a JavaScript action), branding: properties, and so on.name: 'My action'
author: '...'

ERROR: 'description' section is missing
branding:

ERROR: Invalid icon name
  icon: dog

runs:

ERROR: Node.js runtime version is too old
  using: 'node12'

ERROR: The source file being run by this action does not exist
  main: 'this-file-does-not-exist.js'

ERROR: 'env' configuration is only allowed for Docker actions
  env:
    SOME_VAR: SOME_VALUE
```

actionlint still focuses on checking workflow files. So there is no way to directly specify action.yml as an argument of actionlint command. actionlint checks all local actions which are used by given workflows. If you want to use actionlint for your action development, prepare a test/example workflow which uses your action, and check it with actionlint instead.
Checks for steps: contents are planned to be implemented. Since several differences are expected between steps: in workflow file and steps: in action metadata file (e.g. available contexts), the implementation is delayed to later version. And the current implementation of action metadata parser is ad hoc. I'm planning a large refactorying and breaking changes Go API around it are expected.
Add runner.environment property. (#412)- run: echo 'Run by GitHub-hosted runner'
  if: runner.environment == 'github-hosted'

Using outdated popular actions is now detected at error. See the document for more details.

Here 'outdated' means actions which use runtimes no longer supported by GitHub-hosted runners such as node12.

ERROR: actions/checkout@v2 is using the outdated runner 'node12'
- uses: actions/checkout@v2
```

Support attestations permission which was recently added to GitHub Actions as beta. (#418, thanks @bdehamer)permissions:
  id-token: write
  contents: read
  attestations: write

Check comparison expressions more strictly. Arbitrary types of operands can be compared as the official document explains. However, comparisons between some types are actually meaningless because the values are converted to numbers implicitly. actionlint catches such meaningless comparisons as errors. Please see the check document for more details.on:
  workflow_call:
    inputs:
      timeout:
        type: boolean

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: echo 'called!'

ERROR: Comparing string to object is always evaluated to false
      if: ${{ github.event == 'workflow_call' }}
    - run: echo 'timeout is too long'

ERROR: Comparing boolean value with > doesn't make sense
      if: ${{ inputs.timeout > 60 }}

- Follow the update that `macos-latest` is now an alias to `macos-14` runner.
- Support a custom python shell by `pyflakes` rule.
- Add workaround actionlint reports that `dorny/paths-filter`'s `predicate-quantifier` input is not defined. ([#416](https://togithub.com/rhysd/actionlint/issues/416))
- Fix the type of a conditional expression by comparison operators is wider than expected by implementing type narrowing. ([#384](https://togithub.com/rhysd/actionlint/issues/384))
- For example, the type of following expression should be `number` but it was actually `string | number` and actionlint complained that `timeout-minutes` must take a number value.
  ```yaml
  timeout-minutes: ${{ env.FOO && 10 || 60 }}
  ```
- Fix `${{ }}` placeholder is not available at `jobs.<job_id>.services`. ([#402](https://togithub.com/rhysd/actionlint/issues/402))
```yaml
jobs:
  test:
    services: ${{ fromJSON('...') }}
    runs-on: ubuntu-latest
    steps:
      - run: ...

Do not check outputs of google-github-actions/get-secretmanager-secrets because this action sets outputs dynamically. (#404)
Fix defaults.run is ignored on detecting the shell used in run:. (#409)defaults:
  run:
    shell: pwsh
jobs:
  test:
    runs-on: ubuntu-latest
    steps:

This was wrongly detected as bash script
    - run: $Env:FOO = "FOO"

- Fix parsing a syntax error reported from pyflakes when checking a Python script in `run:`. ([#411](https://togithub.com/rhysd/actionlint/issues/411))
```yaml
- run: print(
  shell: python

Skip checking exclude: items in matrix: when they are constructed from ${{ }} dynamically. (#414)matrix:
  foo: ['a', 'b']
  exclude:

actionlint complained this value didn't exist in matrix combinations
  - foo: ${{ env.EXCLUDE_FOO }}

- Fix checking `exclude:` items when `${{ }}` is used in nested arrays at matrix items.
```yaml
matrix:
  foo:
    - ["${{ fromJSON('...') }}"]
  exclude:
### actionlint complained this value didn't match to any matrix combinations
    - foo: ['foo']

Update popular actions data set. New major versions are added and the following actions are newly added.

peaceiris/actions-hugo
actions/attest-build-provenance
actions/add-to-project
octokit/graphql-action

Update Go dependencies to the latest.
Reduce the size of actionlint executable by removing redundant data from popular actions data set.

x86_64 executable binary size was reduced from 6.9MB to 6.7MB (2.9% smaller).
Wasm binary size was reduced from 9.4MB to 8.9MB (5.3% smaller).

Describe how to integrate actionlint to Pulsar Edit in the document. (#408, thanks @mschuchard)
Update outdated action versions in the usage document. (#413, thanks @naglis)

[Changes][v1.7.0]

Configuration
📅 Schedule: Branch creation - "* * 1 * *" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.

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

This PR has been generated by Renovate Bot.

:tada: This PR is included in version 1.0.4 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Change :: to __

Double colon seems to cause issues sometimes, probably easiest to remove them where possible

Fixed in 3.0.3


Indent lines not showing with conceallevel 0

I cannot get the indent lines to show without the dependency Yggdroot/indentLine. Am I missing some configuration? Didn't find anything in the docs.
But Yggdroot/indentLine is only working with conceallevel 1 or 2.
conceallevel is removing the " symbol in jsons and this messes up cursor collumn line. I prefer to keep the " symbols.
See screenshot:

I got it fixed by using the lua branch.

:+1: glad you got it to work.
Also FYI, you can set let g:vim_json_syntax_conceal = 0 to turn off json concealing ", so you can still use conceal in json files for other things.


Can't get individual cookies of client. Cookies are setted globally

I handled authentication with cookies in Nuxt, the code is as bellow:
 nuxtServerInit ({ commit, state }, { req }) {

    console.log('nuxtServerInit')

    if (req.headers.cookie) {
      let cookieParsed = cookieparser.parse(req.headers.cookie)

      // console.log(cookieParsed)
      if (cookieParsed.token !== undefined && cookieParsed.userId !== undefined) {
        // console.log('parsed.token', cookieParsed)
        let token = null
        token = cookieParsed.token
        state.userId = cookieParsed.userId
        commit('auth/setToken', token)
      }
    }
  },

But, while I test and I login I could access succesfully to my account. But if I try in another Pc or in a new incognito window in Chrome I could access to the same account that I did before. How is it possible? It seems cookies are stored globally. But in the code I get cookies from req (the client request). Please let me know what I missed out.

This question is available on Nuxt.js community (#c6825)

@anargu It may be related to your store token. You have to take care not keeping anything globally. Anyway, you can also try auth module if that works for you or can get idea :)

Hi @pi0
It seems  that this code fix the issue:
  nuxtServerInit ({ commit, state }, { req }) {

    console.log('nuxtServerInit')
    console.log('req.headers', req.headers)
    if (req.headers.cookie) {
      let cookieParsed = cookieparser.parse(req.headers.cookie)

      // console.log(cookieParsed)
      if (cookieParsed.token !== undefined && cookieParsed.userId !== undefined) {
        // console.log('parsed.token', cookieParsed)
        let token = null
        token = cookieParsed.token
        console.log('token', token)
        state.userId = cookieParsed.userId
        commit('auth/setToken', token)
      } else {
        state.userId = ''
        commit('auth/setToken', null)
      }
    }
  },

if there is not cookies with the field I specified in the if conditional, then sets to the default value for state.userId = '', and token. But I really want to know why that happened. I mean, if there are not cookies saved on the request, why it returns an acount globally (account previously logged in but in another pc)?

@anargu For this, you have to review where areas exactly keep the token. (For example axios commons or ..). One of those sources may be the source of the leakage.

Actually I set the token in axios by axios.setToken(..) and the token I get from the store. But I am still wondering how nuxtServerInit works and why it get the past token from another past connection. You said I should review in which area I should keep the token, one of this is axios.commons. There is another area you recommend me to store token? I use cookies to store it.

@anargu If you are not using axios but not axios module for setting commons that may cause! It has known issues.

I think I got with a solution. I defined my state as a normal constant, but not as function, so now it's contextualized for each client.


Setup infra for corpora.cziscience.com

Point what is now https://browser.dev.single-cell.czi.technology/ to corpora.cziscience.com.
Setup dev, staging and prod versions of the site.

Reviewed during triage with Arathi. @Bento007 - would you add a more detailed check list of tasks in the top-level summary comment?


update Flux's limitRequest() to take(long,boolean)

update Flux's limitRequest() to take(long,boolean) since limitRequest() is deprecated

Close this pull request
Update when the limitRequest() to be removed in reactor - 3.6.0


Dark mode

We need to add dark mode option to the site.
There must be a button to enable dark theme. User's selection must be permanent by keeping the selection on cookie or local storage.

Dark reader might be used https://github.com/darkreader/darkreader#using-for-a-website.

Dark reader might be used https://github.com/darkreader/darkreader#using-for-a-website.


fix/audio playback cut off

Description
Current problem
There was a problem that the beginning of the audio was not played in the STATE_WAITING_CALL_PERMISSION state.
On some devices, after stopping audio playback for a period of time, the audio device automatically goes idle and does not play the beginning of the audio when it returns from idle.
Countermeasures
Change the stopped portion of the BGM to silent playback.
This change prevents audio devices from becoming idle while the system is running.
Confirmation details
Execute the following command.
$ ros2 topic pub /autoware_state_machine/state autoware_state_machine_msgs/msg/StateMachine '{service_layer_state: 201, control_layer_state: 1}' --qos-durability transient_local --qos-reliability reliable --once
$ ros2 topic pub /autoware_state_machine/state autoware_state_machine_msgs/msg/StateMachine '{service_layer_state: 250, control_layer_state: 1}' --qos-durability transient_local --qos-reliability reliable --once

Before measures:
call.wav is played in a loop, but the beginning of the audio playback after the second time is cut off.
After measures:
Loop playback of call.wav works correctly.
Review Procedure

Make sure the description is valid.
Make sure that what is described in the description matches the implementation.

@a-higuchi
Thank you for your contribution!
Please describe the test method that was specifically carried out.

@a-higuchi Could you please add the purpose and function of this silent audio playback to the README? If this is not documented, the design becomes difficult to maintain.

@a-higuchi Could you please add the purpose and function of this silent audio playback to the README? If this is not documented, the design becomes difficult to maintain.

Added silent playback of BGM to Readme.

@a-higuchi Thank you for your contribution! Please describe the test method that was specifically carried out.

Added specific test method.


molecule broken with latest version of ansible-compat

Issue Type

Bug report

Molecule and Ansible details
$ ansible --version && molecule --version
ansible [core 2.13.9]
  config file = None
  configured module search path = ['/home/mcdonnnj/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/ansible
  ansible collection location = /home/mcdonnnj/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/mcdonnnj/.pyenv/versions/ansible-role-docker/bin/ansible
  python version = 3.11.3 (main, Apr 10 2023, 14:31:58) [GCC 12.2.0]
  jinja version = 3.1.2
  libyaml = True
molecule 5.0.0 using python 3.11
    ansible:2.13.9
    azure:23.4.1 from molecule_plugins
    containers:23.4.1 from molecule_plugins requiring collections: ansible.posix>=1.3.0 community.docker>=1.9.1 containers.podman>=1.8.1
    delegated:5.0.0 from molecule
    docker:23.4.1 from molecule_plugins requiring collections: community.docker>=3.0.2 ansible.posix>=1.4.0
    ec2:23.4.1 from molecule_plugins
    gce:23.4.1 from molecule_plugins requiring collections: google.cloud>=1.0.2 community.crypto>=1.8.0
    podman:23.4.1 from molecule_plugins requiring collections: containers.podman>=1.7.0 ansible.posix>=1.3.0
    vagrant:23.4.1 from molecule_plugins

Molecule installation method (one of):

pip

Ansible installation method (one of):

pip

Detail any linters or test runners used:
Desired Behavior
molecule test should successfully perform testing.
Actual Behaviour
Traceback (most recent call last):
  File "/home/mcdonnnj/.pyenv/versions/ansible-role-docker/bin/molecule", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/click/decorators.py", line 26, in new_func
    return f(get_current_context(), *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/molecule/command/test.py", line 113, in test
    base.execute_cmdline_scenarios(scenario_name, args, command_args, ansible_args)
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/molecule/command/base.py", line 119, in execute_cmdline_scenarios
    execute_scenario(scenario)
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/molecule/command/base.py", line 162, in execute_scenario
    execute_subcommand(scenario.config, action)
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/molecule/command/base.py", line 152, in execute_subcommand
    return command(config).execute(args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/molecule/logger.py", line 189, in wrapper
    rt = func(*args, **kwargs)
         ^^^^^^^^^^^^^^^^^^^^^
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/molecule/command/dependency.py", line 40, in execute
    self._config.dependency.execute()
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/molecule/dependency/ansible_galaxy/__init__.py", line 75, in execute
    invoker.execute()
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/molecule/dependency/ansible_galaxy/base.py", line 129, in execute
    self.execute_with_retries()
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/molecule/dependency/base.py", line 55, in execute_with_retries
    util.run_command(self._sh_command, debug=self._config.debug, check=True)
  File "/home/mcdonnnj/.pyenv/versions/3.11.3/envs/ansible-role-docker/lib/python3.11/site-packages/molecule/util.py", line 149, in run_command
    result = app.runtime.exec(
             ^^^^^^^^^^^^^^^^
AttributeError: 'Runtime' object has no attribute 'exec'

This is likely caused by  https://github.com/ansible-community/molecule/blob/0d874bd9ccacda8df5e110020454764a6b9b908d/src/molecule/util.py#L149 not being updated for https://github.com/ansible/ansible-compat/pull/256 which was included in ansible-compat v4.0.1.

+1 , just ran into it.

Btw. do the dependencies work as expected for us here?
https://github.com/ansible-community/molecule/tree/main/.config
Looks like we should be locked to 3.0.2 ?

i have the same issue : i have molecule v 5.0.0 with poython v 3.10 , absible core 2.14.5 , when i try to create new ansible role i got this error:
molecule init role acme.testrole
INFO     Initializing new role testrole...
Traceback (most recent call last):
  File "/home/zenzedoon/.local/bin/molecule", line 8, in
    sys.exit(main())
  File "/usr/lib/python3/dist-packages/click/core.py", line 1128, in call
    return self.main(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/decorators.py", line 26, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/zenzedoon/.local/lib/python3.10/site-packages/molecule/command/init/role.py", line 174, in role
    r.execute()
  File "/home/zenzedoon/.local/lib/python3.10/site-packages/molecule/command/init/role.py", line 84, in execute
    result = util.run_command(cmd)
  File "/home/zenzedoon/.local/lib/python3.10/site-packages/molecule/util.py", line 149, in run_command
    result = app.runtime.exec(
AttributeError: 'Runtime' object has no attribute 'exec'

Reverting from ansible-compat 4.0.1 to 3.0.2 fixed the issue for me.

+1 ran into the same issue.

I am running into this issue as well trying to package molecule 5.0.0 for Arch Linux (all related tests fail).
Judging from https://github.com/ansible/ansible-compat/releases/tag/v4.0.1 I guess this PR is at fault https://github.com/ansible/ansible-compat/pull/256
@ssbarnea a more descriptive message as to why that has been done and a more concerted action in regards to the consumers of ansible-compat would have been great.

I just started using this awesome package, and I really like it, i just want to improve it.
This the second time version 5.0.0 introduced plain breaking changes (lint being removed too) without guardrails being present.
As a consumer of this package I would like to just rely on a specific versions of molecule and molecule-plugins[...] and not care explicitly about underlying versions.
My suggestion would be to explicitly pin the requirements of this package. I would be happy to contribute if people can point me in the right direction.
Additionally, is a lot of refactoring going on which might explain these breaking changes? Is there a roadmap somewhere which I can consult? It would be nice to get an idea of the direction.

5.0.1 fixes that

For system packaging this is still problematic with molecule 5.0.1 and ansible-compat 4.0.1 without this so I'd rather wait for a proper fix to this.
=========================== short test summary info ============================
FAILED ../../../../dev/test_util.py::test_run_command - AttributeError: 'Runt...
FAILED ../../../../dev/test_util.py::test_run_command_with_debug - AttributeE...
FAILED ../../../../dev/test_util.py::test_run_command_baked_cmd_env - Attribu...
FAILED ../../../../dev/test_util.py::test_run_command_with_debug_handles_no_env
FAILED ../../../../dev/command/test_base.py::test_command_completion[bash] - ...
FAILED ../../../../dev/command/test_base.py::test_command_completion[zsh] - A...
FAILED ../../../../dev/command/test_base.py::test_command_completion[fish] - ...
FAILED ../../../../dev/command/init/test_role.py::test_execute - AttributeErr...
FAILED ../../../../dev/command/init/test_role.py::test_execute_role_exists - ...
FAILED ../../../../dev/cookiecutter/test_molecule.py::test_valid - AttributeE...
FAILED ../../../../dev/model/v2/test_schema.py::test_molecule_schema - Attrib...
======= 11 failed, 424 passed, 7 skipped, 1 xfailed, 3 warnings in 5.22s =======

The problem popped up again and many people will likely get hit by this due to the latest version of ansible-lint requiring a new version of ansible-compat. Installing molecule and ansible-lint both is very common and right now, ansible-lint's dependencies will win and pip will automatically install molecule==5.0.0:
❯ pip install ansible-lint molecule
❯ pip freeze
…
molecule==5.0.0
…
❯ pip install -U molecule
…
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
ansible-lint 6.17.0 requires ansible-compat>=4.0.5, but you have ansible-compat 3.0.2 which is incompatible.

This means that even with Molecule 5.0.1 released, many people will run into this issue, and you need manual intervention to fix this.

#3904 will fix it finally for good.

You can just install Molecule 5.0.1 specifically. Pip will then resole the modules and install an older version of ansible-lint:
❯ pip install ansible-lint molecule==5.0.1


abc

Package Name:
Package Version:
Operating System:
Python Version:

Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Steps to reproduce the behavior:
1.
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Additional context
Add any other context about the problem here.

Hi @suryapotla, please provide more descriptive information about your bug, like this issue. To keep up with repo hygiene, I'm going to close the issue. Please feel free to create a new issue once you're experiencing any problem with our SDKs. Thanks.


App: make toon shader lighting-aware

This is so that we can use dynamic lights/dark scenes with avatars.
What it looks like currently (unlit, emissive toon):
https://user-images.githubusercontent.com/6926057/137599811-162dd466-ae02-472b-9fda-87ef59d41bfc.mp4
Related: https://github.com/webaverse/app/issues/1566

I'm done this, just switching to the toon shader was enough. PRing shortly.


Issue #61, stash backup should be able to cleanup old archives

Add parameter 'backup_keep_age'.  This parameters specifies how
long to keep the backup archives for. You can choose seconds,
minutes, hours, days, or weeks by specifying the first letter
of any of those words (e.g., ‘1w’). Specifying 0 will remove
all files.

looks good! thanks!
@mkrakowitzer do you wanna fix-up the Author in this commit? or add the email to your github settings, before i merge it?

@igalic updated mail address, please merge when you have a chance :)

\o/


Add Cloud Foundry metadata files

Looks good - verified the changes you made with what was expected / with professor's recommendation in Slack. Merging!


feat: add .gitignore into template

when using vue-sfc-rollup, everything is fabulous—seriously—but the only thing I feel somewhat uncomfortable about is that it does not come along with a .gitignore file automatically.

Looks good! I'll merge this now, and in the next week or so will be pushing out a new release. Keep an eye out!


feature: replace downloading k8s components from googleapis in allinone with apt from aliyun mirrors

Signed-off-by: mathspanda<EMAIL_ADDRESS>
Ⅰ. Describe what this PR did
Replace kubernetes deployment steps on ubuntu in allinone_aliyun.sh into apt-installing from aliyun mirrors, instead of downloading k8s components from googleapis.com.
Ⅱ. Does this pull request fix one issue?

#2397
Ⅲ. Why don't you add test cases (unit test/integration test)? (你真的觉得不需要加测试吗？)
None
Ⅳ. Describe how to verify it
hack/kubernetes/allinone_aliyun.sh

Ⅴ. Special notes for reviews
None

@fuweid PTAL.

Have you tested it in your local environment?  If not, please take it. Thanks!

@Starnop Have tested.

@Starnop could we move on?

Sorry for delay it, I have tested it locally and LGTM. Thanks for your contribution. :)


nixOS v-analyzer crush

Zed editor log
2024-09-29T16:50:04.7513357+03:00 [INFO] starting language servers for V: v
2024-09-29T16:50:04.751429592+03:00 [INFO] starting language server "v", path: "/home/anon/Git/vlang_test", id: 1
2024-09-29T16:50:04.751694657+03:00 [INFO] Initializing default prettier with plugins {}
2024-09-29T16:50:04.751764758+03:00 [INFO] starting language servers for V: v
2024-09-29T16:50:04.752116959+03:00 [INFO] Initializing default prettier with plugins {}
2024-09-29T16:50:07.149565957+03:00 [INFO] starting language server. binary path: "/home/anon/.local/share/zed/extensions/work/v/v-analyzer-linux-x86_64", working directory: "/home/anon/Git/vlang_test", args: []
2024-09-29T16:50:07.601169655+03:00 [ERROR] cannot read LSP message headers
2024-09-29T16:50:07.601317148+03:00 [WARN] Generic lsp request to v-analyzer failed: oneshot canceled
2024-09-29T16:50:07.674574423+03:00 [WARN] Generic lsp request to v-analyzer failed: server shut down
2024-09-29T16:50:07.674683913+03:00 [ERROR] Broken pipe (os error 32)
2024-09-29T16:50:07.67479187+03:00 [ERROR] server shut down
2024-09-29T16:50:07.849826685+03:00 [WARN] Generic lsp request to v-analyzer failed: server shut down
2024-09-29T16:50:07.84993943+03:00 [ERROR] server shut down
2024-09-29T16:50:08.135059125+03:00 [ERROR] sending into a closed channel
2024-09-29T16:50:08.210787142+03:00 [WARN] Generic lsp request to v-analyzer failed: server shut down

I don't really know how nix works so I don't know how to fix this. Feel free to fix this in a pull request tho.


divide upgrade test into small test cases.

Backport the change in master to this branch: divide upgrade test into small test cases.

LGTM


Input images as raw files

Hi @kalaspuffar,
after having used your code for train, evaluate and predict with tfrecords I would like to use my custom estimator to predict images saved in a folder on disk.
I haven't found good examples on that yet. Do you have any suggestion on how to create the tf.data.Dataset from a list of image paths?
Best,
Simone

Hi @simobrazz
Glad to see that you want to try on your own dataset and that you got my example to work and get meaning from it.
To create tfrecords with another dataset you need to update this row
labels = [0 if 'Cat' in addr else 1 for addr in addrs]  # 0 = Cat, 1 = Dog

On the line above we have an expression that takes a number of addresses / paths and looks for instances of cat. If the path have the word 'Cat' it will set the label value to 0 and it will set 1 if not. And in my TF records I use the label number 0 for cat and 1 for dog.
But if you like to have more labels or different labels you just need to create an expression that for a set of paths can map them to numbers.
I've had a discussion about this in a Gist where someone wanted to train on a set of images for letters in the alphabet. Perhaps that could give you some inspiration?
https://gist.github.com/kalaspuffar/2eabd4d38cd3a7de0dde4b35c8be7aa3
Best regards
Daniel

Hi @simobrazz
Sorry, I did not understand the question. Then again English isn't my native tongue :)
I'm not saying it's a bad idea to skip the tfrecord generation but reading from an optimized data record will improve training performance.
To read the images directly during the training you just replace the
image = tf.decode_raw(parsed["image_raw"], tf.uint8)

in train.py with a call to loadImage from the createRecord.py file and move the labels logic over to the train.py
Hope this helps
Best regards
Daniel

@kalaspuffar again thank you for all the support. Don't worry, my English is worst than yours.
I would like to paste my code, then you can take a look. Specifically what I want to do is inference, not training.
Among many things I tried this:
`
def evaluate_classification(source_folder='my_path'):
import tensorflow as tf
from os import walk

def parser(img_path):

    image = tf.decode_raw(img_path, tf.float32)

    return {'image': image}

def input_fn(dataset_folder):

    for root, dirs, files in walk(dataset_folder):
        break

    list_of_images = [root + '/' + s for s in files]

    dataset = tf.data.Dataset.from_tensor_slices(list_of_images)

    dataset.map(parser)

    dataset.batch(1)

    return dataset

def test_input_fn():
    return input_fn(dataset_folder=source_folder)

def model_fn(features, labels, mode):
    num_classes = 2
    try:
        net = features['image']
    except Exception, e:
        print e

    net = tf.identity(net, name="input_tensor")

    net = tf.reshape(net, [-1, 306, 306, 3])

    net = tf.identity(net, name="input_tensor_after")

    net = tf.layers.conv2d(inputs=net, name='layer_conv1',
                           filters=32, kernel_size=3,
                           padding='same', activation=tf.nn.relu)
    net = tf.layers.max_pooling2d(inputs=net, pool_size=2, strides=2)

    net = tf.layers.conv2d(inputs=net, name='layer_conv2',
                           filters=64, kernel_size=3,
                           padding='same', activation=tf.nn.relu)
    net = tf.layers.max_pooling2d(inputs=net, pool_size=2, strides=2)

    net = tf.layers.conv2d(inputs=net, name='layer_conv3',
                           filters=64, kernel_size=3,
                           padding='same', activation=tf.nn.relu)
    net = tf.layers.max_pooling2d(inputs=net, pool_size=2, strides=2)

    net = tf.contrib.layers.flatten(net)

    net = tf.layers.dense(inputs=net, name='layer_fc1',
                          units=128, activation=tf.nn.relu)

    net = tf.layers.dropout(net, rate=0.5, noise_shape=None,
                            seed=None, training=(mode == tf.estimator.ModeKeys.TRAIN))

    net = tf.layers.dense(inputs=net, name='layer_fc_2',
                          units=num_classes)

    logits = net
    y_pred = tf.nn.softmax(logits=logits)

    y_pred = tf.identity(y_pred, name="output_pred")

    y_pred_cls = tf.argmax(y_pred, axis=1)

    y_pred_cls = tf.identity(y_pred_cls, name="output_cls")

    # PREDICT
    if mode == tf.estimator.ModeKeys.PREDICT:
        print 'PREDICTION'

        spec = tf.estimator.EstimatorSpec(mode=mode, predictions=y_pred_cls)

        return spec

model = tf.estimator.Estimator(model_fn=model_fn,
                               model_dir="...")

predictions = model.predict(input_fn=test_input_fn)

for p in predictions:
    print p

evaluate_classification()`
The problem here is that model_fn can't read from feature the 'image'. Can you recognize my error?
Best regards,
Simone

Hi @simobrazz.
Sorry for the late reply.
Well, I'm no python expert but my guess is that you read the raw data from the image path with image = tf.decode_raw(img_path, tf.float32) which means that you get 32 bit of data in each float.
But the code I wrote you read each image as a set of bytes in RGB where each byte is a color value and if you like you could read RGBA so you get the alpha value as well. Then you get the correct number of values into the model for inference.
The model uses float32 internally so I need to convert each read byte into a float value.
If you read tf.float32 from the file you get one value 32 = 8 * 4 for all for colors. And they might not be ordered that way in the file. However, your tensor size will be wrong.
net = tf.reshape(net, [-1, 306, 306, 3])

An image with 306x306 pixels but if you read all colors as one 3 colors will not be the correct value.
You should be able to use this load image function instead for your mapping.
def parser(img_path):
    img = cv2.imread(img_path)
    if img is None:
        return None
    img = cv2.resize(img, (306, 306), interpolation=cv2.INTER_CUBIC)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img = tf.cast(img, tf.float32)
    return img

Hope this helps.
Best regards
Daniel

Dear Daniel.
Thank you for the answer. I really appreciated your help!
You can close this issue now :-)
Best regards,
Simone


Adding support for schema in RedShift copy task

Defaulting to public for schema and not previous query because using the other query could lead to bugs if a table has the same name in another schema but is unrelated to the job.

:+1:


create popup_setbuf() function

related: #15006
Problem:  cannot change buffer in a popup
Solution: add popup_setbuf() function

made a few minor adjustments:

let it return true/false on success/failure
checked if the buffer is already displayed in the popup
add new tests for opening a second terminal window in a popup
updated documentation slightly

I noticed https://github.com/vim/vim/issues/15006#issuecomment-2171997625, which seems relevant, was not commented on. Why introduce a new function if not needed?

Wouldn't it be more useful to generalize the function such that it can be called for any window and not just popups? I mean, it's just a matter of time until some requests something like win_setbuf({winid}, {bufnr}).

Wouldn't it be more useful to generalize the function such that it can be called for any window and not just popups? I mean, it's just a matter of time until someone requests something like win_setbuf({winid}, {bufnr}).

I don't like that :) we have :b for that already.

Copying here my comment from #15006:

> I noticed the describtion of popup_settext() explicitly limit the second arg not the buffer number, while popup_create() allowed the first arg. Would it be more unified to remove this limitation instead of creating a new interface?
Honestly, I don't understand that remark from popup_settext(). It says:
{text} is the same as supplied to |popup_create()|, except that a buffer number is not allowed.
But at popup_create() we don't have the {text} argument. I suppose it refers to the {what} of popup_create? I guess we could change popup_settext() and make {text} also take a buffer number (however not a buffer name). That could work.

Also, I am not sure, if we should relax the possible argument types for the second arg. Now it is already '`String` or `list`. Not sure if it is good design to now also allow `Number`. That seems to defeat the purpose of checking argument types in Vim9.
@yegappan what do you think?

But at popup_create() we don't have the {text} argument. I suppose it refers to the {what} of popup_create? I guess we could change popup_settext() and make {text} also take a buffer number (however not a buffer name). That could work.

Also, I am not sure, if we should relax the possible argument types for the second arg. Now it is already 'String or list. Not sure if it is good design to now also allow Number. That seems to defeat the purpose of checking argument types in Vim9.
@yegappan what do you think?

It is better to have strict type checking to detect errors (also it helps with Vim9 code compilation).
So instead of changing the second argument to accept a number, you can either add a third
optional buffer argument or preferably a Dict argument.  But using a separate dedicated function
for changing the buffer displayed in a popup window is more cleaner.

But at popup_create() we don't have the {text} argument. I suppose it refers to the {what} of popup_create? I guess we could change popup_settext() and make {text} also take a buffer number (however not a buffer name). That could work.

Also, I am not sure, if we should relax the possible argument types for the second arg. Now it is already 'String or list. Not sure if it is good design to now also allow Number. That seems to defeat the purpose of checking argument types in Vim9.
@yegappan what do you think?

It is better to have strict type checking to detect errors (also it helps with Vim9 code compilation). So instead of changing the second argument to accept a number, you can either add a third optional buffer argument or preferably a Dict argument. But using a separate dedicated function for changing the buffer displayed in a popup window is more cleaner.

But at popup_create() we don't have the {text} argument. I suppose it refers to the {what} of popup_create? I guess we could change popup_settext() and make {text} also take a buffer number (however not a buffer name). That could work.

Also, I am not sure, if we should relax the possible argument types for the second arg. Now it is already 'String or list. Not sure if it is good design to now also allow Number. That seems to defeat the purpose of checking argument types in Vim9.
@yegappan what do you think?

It is better to have strict type checking to detect errors (also it helps with Vim9 code compilation). So instead of changing the second argument to accept a number, you can either add a third optional buffer argument or preferably a Dict argument. But using a separate dedicated function for changing the buffer displayed in a popup window is more cleaner.

Does it matter that {what} is widely used throughout the popup API? And in fact {text} is the exception? Or that the proposed function is inconsistent with the API? Currently popup_settext() is the only popup function that has a parameter {text}. Changing {text} to {what} (and then renaming all the {what} to {text} ;) ) is consistent. I'd be surprised if there is any measurable function/compilation performance difference by including bufnr. What is less confusing for the developer?
I agree that using a dict for the popup API is good, but it's too late for that, isn't it? Maybe each of the 6 functions that take {what} should get a companion function that takes a bufnr, and using bufnr in {what} should be deprecated?
I don't care that much; I'm glad there's some discussion about it. I don't see the word "API" in :help development, maybe something in there about best practices for API development would be good. So function overloading is considered bad practice, use dictionaries and give an error if the same parameter is specified more that once. E.g. the {what} parameter would have 3 possibilities in the dictionary what_string, what_list_string, what_number and it's an error to specify more than one of them. Is that the idea?

E.g. the {what} parameter would have 3 possibilities in the dictionary what_string, what_list_string, what_number and it's an error to specify more than one of them. Is that the idea?

Oh, sadly with that approach there's no compile time checking like there is now with overloaded functions.

I don't see the word "API" in :help development, maybe something in there about best practices for API development would be good. So function overloading is considered bad practice, use dictionaries and give an error if the same parameter is specified more that once

It's not only API, we need to be consistent in all areas, autocommands, functions, options, etc. This includes naming, arguments and types, documentation, messages (also for internal non-user facing functions). It's hard to get this right and hard to document what are our guidelines are for new features.

I don't like that :) we have :b for that already.

Yes, but it can only be set for the current window. To set the buffer of another window we need to use win_execute(winnr, $'buffer {bufnr}') or something like that which looks weird. And now for popups we have popup_setbuf(). IMO it would have been cleaner if there was one single function for both type of windows.


Switch from Travis to GitHub Actions

We plan to switch from Travis to GitHub Actions for continuous integration. This should help us to align with the other ASWF projects, support testing on VFX reference platform, and gain a broader set of test platforms.
We should be able to have both turned on while we transition, then we can turn Travis off.
For reference, here is the GA setup for USD: https://github.com/PixarAnimationStudios/USD/pull/1253/files

The travis OTIO configuration is here:
https://github.com/PixarAnimationStudios/OpenTimelineIO/blob/master/.travis.yml

I gave this a try a while ago.
Here's a starting point: https://github.com/KarthikRIyer/OpenTimelineIO/actions/runs/109647965/workflow
But I've had some issues.
I'm installing the install artefacts in cxx-install directory but due to the different python versions it supports it seems to be getting installed elsewhere. So the cxx-install directory seems to be empty.
Also when I'm uploading the coverage report to codecov I'm unable to see the report from the link. Maybe it's empty...the output is much lesser than what is shown on my local machine.
The python2 build succeeds but not the python3 build.
For python 3.5 I'm getting these errors. What exactly are these console tests and what maybe the reason for the error? It works fine on my local machine. The same tests when run on GitHub Actions with python2 dont give this error.
Python 3.5.9
Running Core tests...
 import pkg_resources
...................................................................................................E..E...........E.E....................................................................................................................................................................................................../opt/hostedtoolcache/Python/3.5.9/x64/lib/python3.5/site-packages/opentimelineio/adapters/adapter.py:298: DeprecationWarning: inspect.getargspec() is deprecated, use inspect.signature() instead
  args = inspect.getargspec(fn)
..................................
======================================================================
ERROR: test_basic (test_console.CreateShelloutTest.<locals>.newSuite)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/OpenTimelineIO/OpenTimelineIO/tests/test_console.py", line 135, in test_basic
    self.run_test()
  File "/home/runner/work/OpenTimelineIO/OpenTimelineIO/tests/test_console.py", line 108, in run_test
    raise SystemExit()
SystemExit

======================================================================
ERROR: test_no_media_linker (test_console.CreateShelloutTest.<locals>.newSuite)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/OpenTimelineIO/OpenTimelineIO/tests/test_console.py", line 140, in test_no_media_linker
    self.run_test()
  File "/home/runner/work/OpenTimelineIO/OpenTimelineIO/tests/test_console.py", line 108, in run_test
    raise SystemExit()
SystemExit

======================================================================
ERROR: test_basic (test_console.CreateShelloutTest.<locals>.newSuite)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/OpenTimelineIO/OpenTimelineIO/tests/test_console.py", line 123, in test_basic
    self.run_test()
  File "/home/runner/work/OpenTimelineIO/OpenTimelineIO/tests/test_console.py", line 108, in run_test
    raise SystemExit()
SystemExit

======================================================================
ERROR: test_basic (test_console.CreateShelloutTest.<locals>.newSuite)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/OpenTimelineIO/OpenTimelineIO/tests/test_console.py", line 123, in test_basic
    self.run_test()
  File "/home/runner/work/OpenTimelineIO/OpenTimelineIO/tests/test_console.py", line 108, in run_test
    raise SystemExit()
SystemExit

----------------------------------------------------------------------
Ran 349 tests in 16.024s

FAILED (errors=4)
make: *** [test-core] Error 1
Makefile:40: recipe for target 'test-core' failed
##[error]Process completed with exit code 2.

Nice!  As noted in the readme though, we don't support python 3.5 - only 3.6 and 3.7.  Does that make the bug go away?

Oh, didn't see that. I'll try with 3.6 n 3.7.

@ssteinbach that fixes the build!
https://github.com/KarthikRIyer/OpenTimelineIO/runs/846810393?check_suite_focus=true
Any ideas about why coverage doesn't work as expected?
Here's how the make coverage output looks: https://pastebin.com/vt3CCNBg
And the upload link for coverage doesn't work: https://codecov.io/github/KarthikRIyer/OpenTimelineIO/commit/f3663d9b1767c807b9da6d69875a0c4115f6e05a
Also, I need to find a fix for uploading the install artefacts.

@ssteinbach fixed the uploading build artefacts issue.
You can see the uploads here: https://github.com/KarthikRIyer/OpenTimelineIO/actions/runs/161023247
Here's the workflow file: https://github.com/KarthikRIyer/OpenTimelineIO/actions/runs/161023247/workflow
Now only the coverage issue needs to be fixed.

@KarthikRIyer do you want to move this over to a PR?  This is looking really promising.

@jmertic is there anything specific we need to do beyond the basic setup?  Is there any kind of Linux-foundation specific configuration we should be using for this?  (Sorry, new to the GitHub actions world).

@KarthikRIyer Ah, note that make coverage is meant for local usage. For coverage in CI, the process is a bit different - we want to run the tests and all the code once and then harvest the coverage output (Which is a by-product).  We also want to compile with coverage mode on.
in the travis setup, it does this to upload coverage:
bash <(curl -s https://codecov.io/bash) -F $TOX_ENV -f .tox/build-$TOX_ENV/coverage.info -f .coverage
To include coverage info in the C++:
https://github.com/PixarAnimationStudios/OpenTimelineIO/blob/992b3c21d851b4ba815bf70fcae6ab9de3e174b0/setup.cfg#L52
And finally this runs the tests through coverage and also the lcov program, which formats the data for coverage:
https://github.com/PixarAnimationStudios/OpenTimelineIO/blob/992b3c21d851b4ba815bf70fcae6ab9de3e174b0/setup.cfg#L70-L77
If you're running through tox, it should do this stuff if you set the right variable.

I'll open a PR and look at how I can use tox here.

@ssteinbach I'm not the expert here - likely @tykeal is your best bet or engaging the CI WG.

@ssteinbach just look over what the other ASWF projects have done for their switch to GitHub Actions. Because of how GHA operates we do not have any LF specific templates to give you like we would if you were operating in our hosted CI. It's mostly a matter of herding cats when it comes to trying to keep things fairly standard across the repositories at this time.
https://github.com/AcademySoftwareFoundation/OpenColorIO would probably be one of the best projects to look at as they're deep inta GHA now and we're working on getting GPU builds going there.

Thanks @KarthikRIyer this is working great.


Add feedback form

A popup feedback form on every page of the site.
Closes #130
Note: uses mailgun to send emails, therefore connected to #146

As discussed - this needs more UX / browser / validation work, and Seb's time is better spent elsewhere. Closing and replacing with #158, but cherry-picking the selenium change into the new PR.


Implement the proof of the concept for KendoUI PRO packaging

Rather than collecting all discussion items from previous discussions about this, let me try to just define the requirements.

As cloned from Github, the application consuming the plugin services should simply work without any changes.

It is assumed that the user who wants run the app with KendoUI PRO bits, has the PRO license and all files that have to present in the vendor folder and has enabled the "run the PRO version" flag (this could be done by uncommenting the relevant line somewhere).

Everyone on this team should download KendoUI PRO trial version and thus be able to use it in lieu of the "real" PRO version.

This proof of concept should support both loading all KendoUI components in one fell swoop (kendo.all.min.js) or any combination of files representing single controls.

Here are some relevant links
how to use kendo-ui professional with jspm
Using Kendo UI with RequireJS

Lets wait for this issue, so we know if we can use the bower endpoint for this

Actually, I think I may make two proof of concepts, one with the bower endpoint, and one with the vendor folder

@JeroenVinke I've managed to get this working
npm install jspm-git --save-dev
jspm registry create kendo jspm-git

When it asks you for the repo root enter:
https://bower.telerik.com/

Then use
jspm install kendo-ui:bower-kendo-ui

I believe we should install the kendo core version aliased as kendo-ui by default, and provide instructions on upgrading it to pro as part of the README.md
The user can just overwrite the aliased kendo-ui package using the instructions above.
Use the above instructions on this commit: https://github.com/aurelia-ui-toolkits/aurelia-kendoui-plugin/tree/kendo-repo

this is now done


Add more messages for assertion failures

It's very user friendly to provide some explanation for why a compiletime or runtime assertion failed.

I prefix uses of assert with the name of the function since at runtime it may not be obvious where the assertion failed. These strings make it easier to narrow down on exactly what API is being misused.


Deploy WSB v2.0 on Optimism Mainnet

Upgrading first to V0.7:

...

Contracts verified on both Blockscout and Etherscan

Upgraded AWS stack

Published new addresses in docs.witnet.io


PKG-4348 streamlit-extras 0.4.0

streamlit-extras 0.4.0 :snowflake:
Destination channel: defaults
Links

PKG-4348
Upstream repository
Upstream changelog/diff

Explanation of changes:

Updated SHA and Version number
removed patch and patch dependencies
reset build number
added entrypoints dependency
added htbuilder
added prometheus_client
removed python pinning
updated dev url

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_0a4fav9ttq/clone` failed. (See above for error)
The following problems have been found:
===== ERRORS =====

clone/recipe/meta.yaml:42: remove_python_pinning: On arch specific packages, python deps should not be constrained.
===== Final Report: =====
1 Error and 0 Warnings were found

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_72kbvwipt9/clone` failed. (See above for error)
The following problems have been found:
===== ERRORS =====

clone/recipe/meta.yaml:25: remove_python_pinning: On arch specific packages, python deps should not be constrained.
clone/recipe/meta.yaml:42: remove_python_pinning: On arch specific packages, python deps should not be constrained.
===== Final Report: =====
2 Errors and 0 Warnings were found

I believe you are overriding the cbc value for python.
Using - python {{ python }},!=3.9.7 might work better.
That being said, ignoring this restriction wouldn't be the end of the world.

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_cdpi_19wsd/clone` failed. (See above for error)
The following problems have been found:
===== ERRORS =====

clone/recipe/meta.yaml:42: remove_python_pinning: On arch specific packages, python deps should not be constrained.
clone/recipe/meta.yaml:25: remove_python_pinning: On arch specific packages, python deps should not be constrained.
===== Final Report: =====
2 Errors and 0 Warnings were found

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_b6zi10hu44/clone` failed. (See above for error)
The following problems have been found:
===== ERRORS =====

clone/recipe/meta.yaml:42: remove_python_pinning: On arch specific packages, python deps should not be constrained.
clone/recipe/meta.yaml:25: remove_python_pinning: On arch specific packages, python deps should not be constrained.
===== Final Report: =====
2 Errors and 0 Warnings were found

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_cf8qm334vq/clone` failed. (See above for error)
The following problems have been found:
===== ERRORS =====

clone/recipe/meta.yaml:25: remove_python_pinning: On arch specific packages, python deps should not be constrained.
clone/recipe/meta.yaml:43: remove_python_pinning: On arch specific packages, python deps should not be constrained.
===== Final Report: =====
2 Errors and 0 Warnings were found

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_0cu0bttt0q/clone` failed. (See above for error)
The following problems have been found:
===== ERRORS =====

clone/recipe/meta.yaml:31: remove_python_pinning: On arch specific packages, python deps should not be constrained.
clone/recipe/meta.yaml:52: remove_python_pinning: On arch specific packages, python deps should not be constrained.
===== Final Report: =====
2 Errors and 0 Warnings were found

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_c6ae6n3lbb/clone` failed. (See above for error)
The following problems have been found:
===== ERRORS =====

clone/recipe/meta.yaml:52: remove_python_pinning: On arch specific packages, python deps should not be constrained.
clone/recipe/meta.yaml:31: remove_python_pinning: On arch specific packages, python deps should not be constrained.
===== Final Report: =====
2 Errors and 0 Warnings were found


Disks Meter: Individually hide disk temp or eject button per-disk

Ever since adding disk temperatures I have seen many instances IRL (three of my siblings use ModernGadgets on their PCs) where a certain fixed disk will not return a temperature. In this case, the temperature just sits there at zero, being ugly. Similarly, I own an external hard drive on which the disk eject button does not function for some reason.
Therefore, I want to add the ability to disable the disk temperature or eject button readout for individual disks. I will do this through the 'Hide Disks' input box. Usually, if you just put a disk letter in the box, it will completely hide that disk from Disks Meter.
You can specify a disk to hide its temperature/eject button by adding an exclamation point ! after the disk letter. For example, F! H! Z will hide the temperature on disk F, the eject button on disk H, and completely hide disk Z. Since a disk can only have a temperature or an eject button, not both, using ! for both of them works out just fine.
To-do

[x] Implement logic into DisksConfig.lua script

v1.5.0-beta.7 is released.


Resolve the C4800 warnings when compiled with MSVC compilers

This PR fixes the C4800 warnings when this library is compiled with a MSVC compiler as reported in the issue #429.
The warnings are now resolved by static_casting the result of std::isalnum() as bool.
Furthermore, the test suite is now built with the compile option /w44800 to avoid a possible regression in the future (the C4800 warning is desabled by default and even with the compile option /W4).

Pull Request Checklist
Read the CONTRIBUTING.md file for detailed information.

[x] Changes are described in the pull request or in a referenced issue.
[x] The test suite compiles and runs without any error.
[x] The code coverage on your branch is 100%.
[x] The documentation is updated if you added/changed a feature.

Please don't

The C++11 support varies between different compilers and versions. Please note the list of supported compilers. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support. Please refrain from proposing changes that work around these compiler's limitations with #ifdefs or other means.
Please refrain from proposing changes that would break YAML specifications. If you propose a conformant extension of YAML to be supported by the library, please motivate this extension.
Please do not open pull requests that address multiple issues.

macos-12 is now deprecated and it's during the scheduled brownout period now.
https://github.com/actions/runner-images/issues/10721
That's why all the workflow jobs using the macos-12 runner are failing...
I'll re-run those failed jobs tomorrow.


PR review flow integration: Terraform plan + Ansible dry-run

This is a good time and repository to show the PR flow with BitOps.
https://github.com/bitovi/bitops/issues/325
When using this GH Action, on every PR the terraform should run plan, and ansible should run dry-run,
show the result as a GH Status check.
Once the PR is approved and merged, - run the actual terraform apply.
Bonus points if we could post the tf plan diff back to the PR as a comment.
See https://github.com/marketplace/actions/terraform-pr-commenter#screenshots as an example:

StackStorm is a complex beast and allowing users to run the proper PR review flow instead of "I'm feeling lucky" apply would prevent users from shooting themselves in the foot and encourage best practices.

I think this would need to go into the "caller" repo (or the deployment repo) not the github action itself because it's the caller repo that decides "when" this action is run (i.e. PR event vs commit to base branch, for example).
We should absolutely test it out in a deployment repo and provide the config/docs that someone would have to include, though

we could maybe provide the steps in the composite and then just conditionally run them based on "detecting" if it's a PR or not 🤔

I did some testing on this and I'm not sure if this is possible in the composite.
github-actions-deploy-stackstorm
action.yaml
- if: ${{ github.event_name == 'pull_request' && github.event.action == 'opened' }}
      uses: robburger/terraform-pr-commenter@v1
      env:
        GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
      with:
        commenter_type: plan
        commenter_input: ${{ format('{0}{1}', steps.deploy.outputs.stdout, steps.deploy.outputs.stderr) }}
        commenter_exitcode: ${{ steps.deploy.outputs.exitcode }}

Operations-Stackstorm
.github/workflows/deploy-st2.yaml
on:
  pull_request:
    types: [opened, reopened]
  push:
    branches: [ main ]
  workflow_dispatch: {}

permissions:
  contents: read
  pull-requests: write

Results from opening/reopening PR
 Download action repository 'bitovi/github-actions-deploy-stackstorm@pr-commenter' (SHA:b64982f26ed9b003891c1a6c173a6a7a9e68efde)
Error: bitovi/github-actions-deploy-stackstorm/pr-commenter/action.yaml (Line: 135, Col: 23):
Error: bitovi/github-actions-deploy-stackstorm/pr-commenter/action.yaml (Line: 135, Col: 23): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.GITHUB_TOKEN
Error: GitHub.DistributedTask.ObjectTemplating.TemplateValidationException: The template is not valid. bitovi/github-actions-deploy-stackstorm/pr-commenter/action.yaml (Line: 135, Col: 23): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.GITHUB_TOKEN
   at GitHub.DistributedTask.ObjectTemplating.TemplateValidationErrors.Check()
   at GitHub.Runner.Worker.ActionManifestManager.ConvertRuns(IExecutionContext executionContext, TemplateContext templateContext, TemplateToken inputsToken, String fileRelativePath, MappingToken outputs)
   at GitHub.Runner.Worker.ActionManifestManager.Load(IExecutionContext executionContext, String manifestFile)
Error: Fail to load bitovi/github-actions-deploy-stackstorm/pr-commenter/action.yaml

Related doc / issue
From what I can tell, as this is failing in the setup stage; For whatever reason, the GITHUB_TOKEN that should be generated automatically hasn't been, at least at the point of setup, which is causing the failure.
I can spend more time on this but I'm approaching my timebox 1.5 hours so wanted to bring my results up to the class

Code can be found in
bitovi/github-actions-deploy-stackstorm@pr-commenter

we'd have to define an input for the composite action like:
inputs:
  github_token:
    description: 'A github token to use for posting PR results'
    required: false

and then in the step, do:
- if: ${{ github.event_name == 'pull_request' && github.event.action == 'opened' }}
      uses: robburger/terraform-pr-commenter@v1
      env:
        GITHUB_TOKEN: "${{ inputs.github_token }}"
      with:
        commenter_type: plan
        commenter_input: ${{ format('{0}{1}', steps.deploy.outputs.stdout, steps.deploy.outputs.stderr) }}
        commenter_exitcode: ${{ steps.deploy.outputs.exitcode }}

(not sure if that indentation is correct).
Also, we should probably provide another input to allow people to turn off PR "plan" comments if they want to.

The other option would be creating a Secret for the github token.
The benefit would be;

You'd only need to create the token and the secret, so long as the expiry was long enough it shouldn't need updates for awhile.

The drawbacks being;

tokens are volatile and for security reasons they should have a living-time

I think inputs should be implemented in the action repo and let the user determine where the token comes from when they call the action.  Could be secrets. Could be a previous step in their pipeline. Could be the GitHub provided one.


Hide "Project X (#) is building Y (#) on node # (TARGET targets)." logging messages on [/v:normal]

Example project build with (default) normal verbosity level:
Project "PATH\build.proj" on node 1 (default targets).
Project "PATH\build.proj" (1) is building "PATH\build.proj" (1:2) on node 1 (ENTRY target(s)).
Project "PATH\build.proj" (1:2) is building "PATH\build.proj" (1:3) on node 1 (TARGET target(s)).
TARGET:
  [some messages from TARGET]

I propose to hide the "node #" lines on "normal" verbosity level, thus display it only on "/v:d" or "/v:diag".
In most cases these "building on node" lines are noise, the target name presents enough information.
Thanks

Thanks for the suggestion!
Team triage: this is reasonable in isolation, but we're worried about changing the log format in this way, given that we know many people have MSBuild log parsers. We think that the risks of this change are likely to outweigh the benefits.

Really? MSBuild log parsers should already treat this case for /v:minimal.
In general, log parsers are affected by new content not by less content/removed lines.


⚠ GitLab Server has degraded performance

In af9df79, GitLab Server (https://gitlab01.its-telekom.eu) experienced degraded performance:

HTTP code: 200
Response time: 6199 ms

Resolved: GitLab Server performance has improved in d1a813b.


rel-me URLs with paths considered invalid

When the "me" URL has a path in it (http://example.com/evan vs. http://example.com), it's considered an invalid URL, causing sign-in to fail. It seems like https://github.com/aaronpk/IndieAuth-Token-Endpoint/blob/98e637718d1821a451a46dcbcb0b56c69f187fe9/lib/helpers.php#L39 is causing it.
Ran into this while testing my Micropub implementation. Your clients (Quill, OwnYourGram) throw an error, but Woodwind, for example, does not — not sure if this is just because Woodwind ignores the error. I may be missing something, but it seems like IndieAuth should be able to accept URLs with paths.
If there's a reason for this that I'm not aware of, I'd appreciate the education (I'm pretty new to IndieWeb/Social Web development). Otherwise, it seems like a bug to me.
Example error from OwnYourGram:

Fixed in af25636776d609f76e9a3f433d83696df50f7b72. Sorry I didn't see your PR earlier!


Using ngCordova to set up the facebook authentication

I would like to use ng-token-auth for the email authentication but I would like to use ngCordova for the facebook oauth authentication.
Everything work fine with email and cordova oauth but I do not know how to update ng-token-auth with the access_token so it knows the user is authenticated.
My code look like this:
 $cordovaOauth.facebook("9...4", ["email"]).then(function(result) {
            console.log("CONNECTED");
            console.log(result);
        }, function(error) {
            console.log("ERROR");
            console.log(error);
        });

The output look like this after authentication:
CONNECTED
{"access_token":"CAANOTIKs5WABAKPF7DZC8M1n1U7QmsYd9IjmdAl7RHVhgwHveE83X0ZCRVsO6ZA4HUt3478XB...yHZAZBoB2gty03tL6b4zyiYxcCB6dOjb03R8mmfeIXR5yupx74alcpZBlAx5pWRslDOsjfM2MZD","expires_in":"5182962"}

How can I set the ng-token-auth access_token?
How to call the handleValidAuth method ?
Do I need to perform an event broadcast using $rootScope.$broadcast('auth:login-success', ??? ); ?

Hi,
I have exactly the same issue, I have a user authetified by the Facebook Cordova Plugin (native auth flow) and received a Access-token, and now I want to use it to register at the server. How can this be done?

+1 same problem as well.

ng-token-auth is set up for the server to obtain the FB access_token server-side directly from FB, using server redirects and a callback from Facebook back to the server.
ngCordova/facebookConnect plugins obtain the access_token on the client side, using either the native app or a browser window.
To use ng-token-auth with these cordova plugins, a new function has to be added to ng-token-auth.
Essentially, when you have the FB access_token from the success function of $cordovaFacebook, you hand it to ng-token-auth - which passes this client-side FB access_token to server. The server then itself then needs an API to handle verify this provided FB access_token. If it's a viable FB access_token, then the server will need to return a ng-token-auth acces_token to the client, to say all is well.
Hope that helps. I'm implementing the same myself, and will post a link when I'm done.

Have a look at: https://github.com/lynndylanhurley/ng-token-auth#oauth2-authentication-flow
This shows the flow currently in ng-token-auth for server side OAuth.
Bear in mind we have two types of access_token flying around: the Facebook one, and the one we want generated via ng-token-auth to allow access to OUR client app. They are not interchangeable.
When dealing with ngCordova's $facebookConnect, the concepts of the first three boxes all occur client side. $facebookConnect provides the API of the second (red) box. The 'redirect to redirect URI' is the localhost callback that $facebookConnect uses, to receive the FB access_token from the native Facebook app.
We need to implement a client step (green box) right after this redirect step, which passes the FB access token to the server API. The server API steps will be different, to verify the passed FB access_token server-side. The outcome will be similar, a response of a access_token for access to our app (NOT the facebook token). It will be a regular http response, not a postmessage.

Here's my fork: https://github.com/heysailor/ng-token-auth-localOAuth
And on bower: bower install --save ng-token-auth-localOAuth

I'd contribute as well, we'll also have to modify the rails-gem. I'm fiddling around with it after work.

Whoops bower is: bower install --save ng-token-auth-local-oauth#0.0.25-oauth

and I made it https://github.com/heysailor/ng-token-auth-local-oauth for clarity.

@heysailor - is this something that can work alongside the existing non-cordova functionality? In other words, is this something that can be merged into this repo without any breaking changes?

I tested it, it works alongside current ng-token-auth, doesn't break anything so far.
It doesn't work with the devise_token_auth gem (yet), so you'd have to write your own oauth-validator. Maybe we can work together and add cordova support to the gem as well :+1:

Maybe we can work together and add cordova support to the gem as well

Yeah I'm down! I don't have much experience with this form of authentication - would you like to take the lead on this feature?

yep, sure.
I'm gonna fork your gem & play around with it.

Yes it's working for me alongside the other code too. I'm using sails as a
backend so can't do the gem updating. But having this addition to
ng-token-auth will help all the Cordova users out there.
I added some documentation to the readme too.
On Friday, 8 May 2015, Lynn Dylan Hurley<EMAIL_ADDRESS>wrote:

Maybe we can work together and add cordova support to the gem as well
Yeah I'm down! I don't have much experience with this form of
authentication - would you like to take the lead on this feature?
—
Reply to this email directly or view it on GitHub
https://github.com/lynndylanhurley/ng-token-auth/issues/141#issuecomment-100005300
.

@posixpascal - cool thx!!! This is by far the most requested feature. If we get this working I think I'll be able to close half of the issues on devise_token_auth :smiley:

Should be fairly straightforward....the hard work of obtaining the oauth
token is done already client side.
For example, I do a server side query to the facebook graph token debug
feature to verify that the access token is valid before creating or
authenticating that user.
On Friday, 8 May 2015, Lynn Dylan Hurley<EMAIL_ADDRESS>wrote:

@posixpascal https://github.com/posixpascal - cool thx!!! This is by
far the most requested feature. If we get this working I think I'll be able
to close half of the issues on devise_token_auth [image: :smiley:]
—
Reply to this email directly or view it on GitHub
https://github.com/lynndylanhurley/ng-token-auth/issues/141#issuecomment-100006959
.

Any updates on the Server side (especially the devise-token-auth gem)?

I couldn't work on it during the last week. I'm unfortunately very busy at the moment, I try to make ionic work with devise-token-auth gem in my spare time.

Good work guys.  A couple months ago I solved this problem without any big changes to this gem or devise-token-auth, basically just a small change on the redirect page.  https://github.com/lynndylanhurley/ng-token-auth/issues/90#issuecomment-83058273
The main difference in approach is that here we are allowing something other than our server to accept the token, and then injecting that token into our server.
You can see in the other thread I basically achieve what the ng-cordova-oauth plugin does but instead of grabbing the token from localhost I grab it from our devise-token-auth page and emit it into ng-token-auth.  We could just as easily shape our redirect page at devise-token-auth around the ng-cordova-oauth localhost, and then do a PR to ng-cordova-oauth that would make the redirect uri configurable.

Alright guys. I made it :). Big thanks to davidpatrick for his example on #90. I changed his code slightly to reflect the current version of ng_token_auth gem. It works using the cordovaInAppBrowser plugin:
cordova plugin add https://github.com/apache/cordova-plugin-inappbrowser
You have to use the github mirror because cordova plugin add cordova-plugin-inappbrowser fails.
I will post a complete example within the next 2 days & make a PR to this repo & the devise_token_auth gem. :).
:+1:  keep up the good work community.

Awesome @posixpascal ! Thanks a lot.
I will test your that as soon as the doc is published. :+1:

Great @posixpascal ! Thank you very much!
Looking forward for the complete example and repo :)

is it published already? :+1:

sup, not yet unfortunately. I still have lots of work to do and don't find time to push changes to the ng-token-auth repo. I'll look into it as soon as I have a little spare time.

Any updates on the Server side (especially the devise-token-auth gem)? Trying to figure it out myself but no progress so far.

I got it working without ngCordova (just noticed that this issue is about ngCordova's Facebook Plugin).
If you can live with using the InAppBrowser approach I can show you how to do it.
First you have to make sure you get the cordova-inappbrowser plugin and included $ngCordova in your angular.module("yourapp", [/*HERE*/] modules array.
Then you have to overwrite omniauth_response.html.erb in your rails app.
I created the file for my own here: _$RAILS_ROOT/app/views/layouts/omniauth_response.html.erb`
Rails
I use monkey-patching to overwrite the gem-html file without touching the gem itself.
The content is mostly the same as the regular one:
<!DOCTYPE html>
<html>
  <head>
    <script>
    	 var getCredentials = function(){
          return {
            <%= yield %>
          };
        };

      var usingExternalWindow = function() {
        var nav     = navigator.userAgent.toLowerCase(),
            ieLTE10 = (nav && nav.indexOf('msie') != -1),
            ie11    = !!navigator.userAgent.match(/Trident.*rv\:11\./);
        return !(ieLTE10 || ie11);
      }
      if (usingExternalWindow()) {
	       // browser flow.
        window.addEventListener("message", function(ev) {

          if (ev.data === "requestCredentials") {
            ev.source.postMessage(getCredentials(), "*");
            window.close();
          }
        });
      } else {

        window.location.href = "<%= @auth_origin_url %>";
      }
    </script>
  </head>
  <body>
    <pre>
      Redirecting...
    </pre>
  </body>
</html>

Only difference is that I extracted the <%= yield %> part in an external function.
I used @davidpatrick example on #90.
ionic / cordova / angular
Next thing you have to do is write a custom service for handling cordova auth:
My login service looks like this:
angular.module('app.services.login', [])
.service('loginService', ['$rootScope', '$q', '$window', '$auth',
  function ($rootScope, $q, $window, $auth) {
    var _this = this;

    this.originUrl = $window.location.origin;
    var loginDomain = "http://frood.herokuapp.com";
    this.authUrl = loginDomain  + "/auth/";

    this.authenticate = function(provider) {
      var defer = $q.defer();
      console.log(_this);
      console.log(provider);
      var browserWindow = $window.open(_this.authUrl + provider + "?auth_origin_url=" + this.originUrl, '_blank', 'location=no');

      browserWindow.addEventListener('loadstop', function(event) {
        if (event.url.match( loginDomain )) {
          browserWindow.executeScript(
            { code:'getCredentials()' },

            function(response){
              var rsp = response[0];

              if (rsp.message == 'deliverCredentials') {
                var user = rsp;

                // Set the user in ng-token-auth
                $auth.initDfd();
                $auth.handleValidAuth(user, true);

                // emit a successful login
                $rootScope.$emit('auth:login-success', user)
                defer.resolve(user);
              } else {
                $rootScope.$emit('auth:login-error', rsp.error)
                defer.reject(rsp.error);
              };

              // Finished with InAppBrowser
              browserWindow.close();
            }
          );
        };
      });

      return defer.promise;
    };
  }
]);

Then in my AuthController I do this:
$scope.authenticateWith = function(what){
      var auth = ("cordova" in window) ? loginService : $auth;
      auth.authenticate(what).then(function(){
        if (typeof $rootScope.modal !== "undefined"){
          $rootScope.modal.hide();
        }
      });

This got it working on mobile phones flawless, well not 100% flawless because it uses the web-version of oauth providers (eg. not the native app), so people aren't logged in when they never used the web version.
I'm making a pull request soon to add inAppBrowser support out of the box.
I got a lot of work to do at the moment and I'm not able to contribute much :(
There is a way to use $ngCordova as well but I haven't looked into it much.

Anyone has tried ngCordova with devise-token-auth? I have been trying to work around it, by hacking with the access code and pushing them the callback endpoint. I enable this by changing the strategy file to accept a access_token parameter in the request. More information can be found here: https://github.com/mkdynamic/omniauth-facebook/pull/174
So what I do is:

use ngCordova $cordovaFacebook to login, and get the access_token
call /auth/facebook/callback?access_token=12354671298387123921
try to receive it in omniauth_callbacks_controller.rb

However, I failed at the last step and am unable to get the proper auth_hash to be returned. I hope that these information can prove useful to someone trying to achieve the same thing and help in finding a solution!

I don't know exactly how devise works but maybe you have to open "/auth/facebook" first & then use ngCordova to get the access token and push it to the facebook callback method.

@posixpascal / anyone-who-is-willing: I'd love to get Cordova OAuth support baked into this module and reduce the number of custom forks that people are requiring. Can you you provide a formal PR for me to take a look at? If so, it'll get top-priority. Same applies for devise_token_auth.

@nbrustein and I are working on a refactoring of the omniauth controller logic in order to support sameWindow (new default), externalWindow, and inAppBrowser flows. We should have a PR soon (hopefully).

The PRs are in for ng-token-auth #188 and devise-token-auth (lynndylanhurley/devise_token_auth#323). Please try these branches out and let us know if there are any issues in implementation. Will merge soon if no major issues are found!

Should be closed via #188. Let me know if you guys run into any issues!