Swift 5

Resolved #104

Thanks!
We'll merge this once we confirm it's safe to do so.

@shoumikhin any idea when this will be merged in?

Hi Wyatt,
Typically, it takes about 2 weeks to make a new major Xcode release adopted across Google’s infrastructure. Then we need to make sure all the apps built with Promises and Swift 5 work as expected. But the process may move faster or slower, I cannot really predict the exact timing.
Are you somehow blocked on us not switching to 5 immediately? Doesn’t seem there’re any code changes, perhaps you could patch this PR with version upgrade locally at the moment if that’s important for you to move forward?
Thanks.

@shoumikhin no worries at all. Not blocked at all, was just curious. Thanks for the detailed explanation, appreciate it.

We are still looking to update to Swift 5 as soon as possible; however, there's a Bazel issue with Xcode 10.2 that's blocking the update. It appears the issue should be resolved in Bazel 0.25.0.

Thanks a lot @temrich ! 🚀

@kimdv I've updated Travis to Bazel 0.25 and Xcode 10.2 and the build passes. So you should be good to update this PR and rerun the Travis build. Thank you for your help with migrating to Swift 5!

@temrich rebased and pushed ✅

Thank you!


Float Button not showing

I implemented the FAB as shown in my layout XML and tried to create it in my code. But the FAB isn't showing.
This is my code:
ButtonFloat buttonFloat = (ButtonFloat) getActivity().findViewById(R.id.buttonFloat);
buttonFloat.show();

Sorry but you've to implement the FloatButton in the xml file, the show function animate the FloatButton from the bottom of the screen.


SaveAsTable for Hive

The documentation mentions that SaveAsTable "only works with DataFrames that are created from a HiveContext".  Is there any way to create a HiveContext using Mobius?

Hi @cschrammel - The team didn't implement HiveContext so currently it's not supported. We'll implement it before our next release and also back port it to branch 1.5.

Merged to master branch with #380

Thank you!!!


Chinese version of Making combinations demo in CodePen&JsFiddle is not working properly

Request type

[ ] Please close this issue, I accidentally submitted it without adding any details
[ ] New documentation
[x] Correction or update

Details

The document link:
https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#组合使用
In line 86 below, the beginning of the function is commented, which is also occured in JsFiddle sample.
And I think the code for the next example is written here by mistake.

solved


[cinder-csi-plugin][manila-csi-plugin] Make cloud-config/cacert volume/volumeMounts configurable (release-1.19)

What this PR does / why we need it:
see https://github.com/kubernetes/cloud-provider-openstack/pull/1218
Which issue this PR fixes(if applicable):
fixes #
Special notes for reviewers:

Release note:

NONE

/ok-to-test

@brtknr Is it required to backport this, this is not a bug but only an improvement . We only backport critical/required fixes as need basis

/hold

@brtknr Is this required for 1.19 , as I mentioned we only backport bug fixes .

Hi @ramineni I agree it is an improvement but since there hasn't been a working chart release yet, it would be safe to incorporate this into the first chart release from v1.19.0 branch.

I think it's fine to have this for release-1.19, hopefully we could have some official, stable Charts for this release.
/lgtm

Hi @ramineni I agree it is an improvement but since there hasn't been a working chart release yet, it would be safe to incorporate this into the first chart release from v1.19.0 branch. I have seen other changes backported too which are not strictly bug fixes, e.g. the snapshotter image version bump.

@brtknr ok, sounds reasonable. by the way , snapshotter version bump is a required fix , otherwise snapshot feature doesnt work due to incompatible of sidecar versions.

@brtknr As we want stable release of charts as @lingxiankong mentioned, as an exception, we could incorporate these changes .
please address comment , this should be good to go

/lgtm

/hold cancel

This needs /approved label to merge. Assuming that @lingxiankong disabled branch protection on gh-pages branch, this should correctly create a new release and publish to charts.yaml.

As we already have lgtm from @lingxiankong , approving this.
/approve


PPS stays set on UART TX / RX

When reconfiguring UART RX/TX to different pins without a power cycle, previous PPS settings remain.  This can cause queues to become crossed, and causes Unit test code to fail on all runs except first iteration.  (Reset without power cycle does not clear PPS).

This bug has a workaround.  After a reset where PPS output pins may still be set, call the PWM disable command on the output pins and then reset the pins to digital input mode.
`void disablePPS(SerialWombat& sw)
{
byte b[] = {219,1,16,0x55,0x55,0x55,0x55,0x55};
sw.sendPacket(b);
b[1] = 2;
sw.sendPacket(b);
b[1] = 3;
sw.sendPacket(b);
sw.pinMode(1,INPUT);
sw.pinMode(2,INPUT);
sw.pinMode(3,INPUT);
}`

Workaround is sufficient.  SW4B code has been stable for more than a year with no field complaints.


Update psycopg2 version to fix private private deploy error.

I updated the version of psycopg2 in a private fork and the heroku deploy worked. So I believe this solves #80

Thanks! ❇


Compatible with Cockroachdb?

The system says it plans to use redshift, so in theory it is compatible with cdb, but has anyone thought of this?

Hi @fire , we have plans to support other databases in Mini but GitHub isn't the place to discuss such support requests. Please use our discourse page for similar discussions.


quote generator added

Issue reference:
Proposed changes:
Added quote generator project
Type of change:
Please delete options that are not relevant.

[x] New feature (non-breaking change which adds functionality)

Checklist:

[ ] My code follows the style guidelines of this project
[ ] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] My changes generate no new warnings

Additional info (if any):

Nice work


RBD's PV claim can require the volume to be encrypted

Describe the feature you'd like to have
PV claims with RBD can require the volume to be encrypted.
Note to avoid confusion: I do know ceph encrypts at rest with LUKS already. What I am actually trying to achieve is to encrypt the single volume, similarly at what an EBS request would do.
What is the value to the end user? (why is it a priority?)

This feature would put Ceph almost in par with what is offered with Amazon EBS volume claims.
In-Transit encryption might not be necessary for many Ceph use cases (messenger v2 might not be the answer for everybody)
Companies using ceph as their back-end for their public or private offerings, might offer that as a feature also.
Encryption at rest and in transit, even within the perimeter of a company, is paramount these days.
...

How will we know we have a good solution? (acceptance criteria)
I'm looking for guidance here, it would not be a problem to develop it. I am not even sure this is the right repo to do this but I would really appreciate on how to implement this solution.
Additional context
I've worked on a little gist here to prototype the process using LUKS. As I said above, I would like to get some guidance on where this process can be plugged in and / or there is an equivalent solution already worked on I am not aware of.

@hairesis Is the goal to have the RBD CSI interface w/ LUKS behind the scenes? For example, you could store a k8s secret and either instruct the storage class to encrypt new volumes using the secret or provide the secret for individual PVCs?
I'd imagine snapshots would remain encrypted with the original key but any attempt to create a new volume from the snapshot w/ a new secret would require a deep-copy of the snapshot to the new volume.

@dillaman thanks.

Is the goal to have the RBD CSI interface w/ LUKS behind the scenes? For example, you could store a k8s secret and either instruct the storage class to encrypt new volumes using the secret or provide the secret for individual PVCs?

yes, that is the idea. We would like to encrypt new volumes for individual persistent volume claims.

I'd imagine snapshots would remain encrypted with the original key but any attempt...

At the moment we are not concerned about snapshots but it's certainly something we would like to think about  going forward.

I've created a proof of concept change according to what described above.
Code changes can be found here:
https://github.com/hairesis/ceph-csi/blob/csi-v0.3-encrypt/pkg/rbd/rbd_attach.go
https://github.com/hairesis/ceph-csi/blob/csi-v0.3-encrypt/pkg/rbd/rbd_util.go
Note:

the change is on top of v0.3.0 because of the Kubernetes version available to me. It should not be ro much of a problem to adapt to v1
logging and error handling are far from being optimal.
passphrase is statically set.

About the passphrase, I was thinking to source it from HC Vault for my use-case, although that might not work for everyone (i.e. k8s secrets might sufficient in many cases); it sounds like something that should be generalized: any suggestion / pattern I can refer to?
Is there anything else I should be take into account?
Thanks

@liewegas JFYI

Please note that in the case of snapshot, we actually have to re-encrypt the snapshot with a new key to be cryptographically sound. This is because when you use AES with the XTS block cipher mode you can use the delta between images to mount a cryptanalytic attack.
This is why Google uses a new encryption key for snapshots -
https://cloud.google.com/compute/docs/disks/customer-supplied-encryption#create_snapshot


Using class="category-{{item.id}} breaks the layout.

Bug, feature request, or proposal:
Bug
What is the expected behavior?
class should be appended and style added
What is the current behavior?
The default layout breaks
What are the steps to reproduce?
https://plnkr.co/edit/CS1ccrdSaWgAmuWhQRZ3?p=preview
Look at the last chip
Providing a Plunker (or similar) is the best way to get the team to see your issue.
Plunker template: https://goo.gl/DlHd6U
What is the use-case or motivation for changing an existing behavior?
Which versions of Angular, Material, OS, TypeScript, browsers are affected?
Is there anything else we should know?

Hi,
Try to replace the class="category-{{item.id}}  with [ngClass]="'category-'+id" it seems to be working on the plunkr and it should do the same.

Works great.. and I blame friday! ;)


Parametrize salary range cutoffs

https://github.com/code-for-nashville/inclucivics/pull/149#discussion_r175308725

This is a small request with respect to DRY-ing out our code. Instead of hard-coding the numbers 33000, and 66000 in this chunk of code move this numbers to the top of the file as constants.
We don't have any automated tests, so write some new ones, or click through the app after implementation to make sure everything works as expected.


fix: correct case usage for X-Telegram-Bot-Api-Secret-Token header in…

This update modifies the handling of the 'X-Telegram-Bot-Api-Secret-Token' header in both the synchronous and asynchronous AWS Lambda functions.
In the previous implementation, the SECRET_HEADER_LOWERCASE constant was being used to retrieve the header from the event. This caused complications since AWS Lambda does not interpret headers in a case-insensitive way, leading to potential mismatches if the header was not supplied in the exact expected case.
With this fix, the SECRET_HEADER constant is used, which matches the exact casing of the 'X-Telegram-Bot-Api-Secret-Token' header as it appears in the event. This adjustment should eliminate any issues caused by case sensitivity.

@chrisandrewcl how come you used the lowercase version in #418? I didn't try this but it seems to me like the AWS docs imply that headers are not lowercased. Can you enlighten us?

Expanding on what I said here: while I have seen headers in the canonical form on lambdas before, I've not encountered telegram's secret header in canonical form while working with grammy for my project, just in its lowercase form. Given reports from other developers, it seems it doesn't mean it will always be lowercase, just that in this case it was lowercase.
Similar reports highlighting this behavior:
https://github.com/aws/aws-sam-cli/issues/3083#issuecomment-887632702
https://github.com/aws/aws-sam-cli/issues/1860#issuecomment-888800663
Given the inconsistencies, I was not confident opting for one or another but that was what ultimately was decided for the PR I submitted.
To avoid this issue, you could consider normalizing the headers, checking for both formats or adding a note to the docs.
I am happy either way, since I ended up using the adapter just as a reference.

Telegram always delivers headers with proper casing: https://github.com/tdlib/telegram-bot-api/blob/251589221708a8280ffcad32fcdc5348d014a6ae/telegram-bot-api/WebhookActor.cpp#L561
Since it seems like we all agree that AWS doesn't lowercase the headers (side note: why does any software mess with header casing even???), it seems to be the reasonable thing to merge this.
If we find a repro where this breaks anything, we can restart the discussion on the matter.

CI will be fixed as soon as #465 is merged. The linting rules were updated, so we had to fix the code.

@lejovaar7 please consider signing your commits in the future. I will overrule now and merge anyway, but we usually require this from contributors :)

@all-contributors add @lejovaar7 for bug and code

@all-contributors add @chrisandrewcl for review!


Bank Holiday Support

With the upcoming Bank Holidays in the UK, it would be nice for users not to see these as working days.
I fully appreciate that handling these rare occurrences can be annoying and, in some cases, some people do work bank holidays.
Just an idea 😄

Thanks.  We'll add it to backlog as we would need to consider how this works for all regions so would need to tie this into the country information.

I know this is closed but could we get an option for to select "Holiday" as every place might be a bit different?


Poll question image also populates poll choice images

When adding a new poll, if an image is added to the question, that image will populate all choice images as well.
Expected behaviour:
When adding a new poll, and an image is added to the question, the image will only populate the question image.

Resolved in 6daf886


[Bug] Can not begin to use issue

1. Summary
Exalt not worked for me.
2. Expected behavior
Successful validate and format XML files.
3. Actual behavior

I don't see Exalt commands in command palette.

If I run exalt_validate and exalt_format_document commands, nothing occurs.

4. Steps to reproduce
The problem is reproduced for me in a version of Sublime Text without plugins and user settings.
I install Exalt via Package Control → I restart Sublime Text → I open some .xml files, for example, opensearch.xml or with_fries.xml or SashaSublime.tmTheme. I deliberately made mistakes in these files, that to see, how Exalt to work.
Ctrl+Shift+P → I print Exalt, but I not see Exalt commands in command palette. I press Ctrl+Alt+X and Ctrl+Alt+V hotkeys, but nothing occurs in my incorrect XML files.
5. Environment
Operating system and version:
Windows 32-bit 10.0.14393
Sublime Text:
Build 3126
Thanks.

I suspect this issue might be related to 32-bit Windows.
Exalt depends on lxml, which needs to be compiled separately for the 32-bit and 64-bit variants of every OS. Support for 32-bit Windows was contributed by @debjan -- I actually don't even have a 32-bit Windows installation I could test on. (I could also never get lxml to statically compile on Windows so that I could package it with Exalt...)
So, unfortunately, I'm not sure how much I can do to help you. One thing you could do is select View > Show Console in Sublime Text and see if the console reports any errors while trying to load Exalt.

@eerohele , the problem is not repoduced for me in Windows 10 64-bit EN LTSB. In Windows 10 32-bit I have problems with lxml intallation.
Please, write in the README.MD, that users needs install lxml dependency.
Thanks.


[BEAM-25] WIP: Tweeze StateSpec out of StateTag

Be sure to do all of the following to help us incorporate your contribution
quickly and easily:

[x] Make sure the PR title is formatted like:
[BEAM-<Jira issue #>] Description of pull request
[ ] Make sure tests pass via mvn clean verify. (Even better, enable
Travis-CI on your fork and ensure the whole test matrix passes).
[x] Replace <Jira issue #> in the title with the actual Jira issue
number, if there is one.
[x] If this contribution is large, please file an Apache
Individual Contributor License Agreement.

R: @bjchambers @tgroh
This was a hack sprint. The tests pass for the SDK and direct runner; I've introduced a minor issue to the Flink runner that I will fix tomorrow.
My thoughts when doing this:

I can prep StateSpec now so it is ready for incorporation into DoFn whenever that work takes off.
Since the StateSpec carries the disjoint union now, the binder should visit that.
StateTag = String id + StateSpec. First step would be to express it that way, second step might be to delete it.

It actually turned out to be a nice cleanup, but there are wrinkles:

Since the State has to be able to know where to write (in the general case) it still needs an id, so the visitor needs an id. But StateSpec doesn't have one so it is just passed along. So the visitor just becomes a curried version of the prior.
That's all fine, but then the StateTable#get also needs the spec because it lazily inits based on it. This is the only time it is used, since beyond then it is contained in the state cell.
And then to hack up the CopyOnAccessInMemoryStateInternals I even had to re-build the tag id. So eliminating StateTag entirely would just mean more parameters in a bunch of places.

So I have this feeling that actually there may be a simpler visitor pattern, or no visitor pattern, that becomes more natural.
Anyhow, I'm not happy with the change, and certainly haven't polished StateSpecs to where it needs to be for user consumption, but I wanted to put this out for early feedback.

Gentle reminder that FlinkStateInternals is completely revamped in #737

@aljoscha acknowledged. I'll definitely wait for #737 before doing anything that will create terrible conflicts.

I'll close this for now.


Fix JS profiles when the js_source parameter is unset

Before js profiles would not run if you didn't have a js_source
parameter.

Current coverage is 85.73%

Merging #365 into master will decrease coverage by -0.02% as of e56d211

@@            master    #365   diff @@
======================================
  Files           40      40
  Stmts         4654    4655     +1
  Branches       628     629     +1
  Methods          0       0
======================================
  Hit           3991    3991
- Partial        150     151     +1
  Missed         513     513

Review entire Coverage Diff as of e56d211

Powered by Codecov. Updated on successful CI builds.


upgrade-zulip-stage-2: Be more specific about OS upgrade steps.

This was backported to 9.x in https://github.com/zulip/zulip/pull/31193. (And to 9.x in #31192).


http could not be found within the project

Prerequisites

[X] I'm using the latest version of near-api-js.
[ ] I have tried to start with a fresh project and reproduce the defect with minimal code changes.
[X] I have read the console error messages carefully (if applicable).

Description
After migrating from 1.1.0 to the latest 2.0.4 on our react-native app started to face this error

Error: Unable to resolve module http from<EMAIL_ADDRESS>http could not be found within the project or in these directories:
  node_modules/@near-js/providers/node_modules

My assumptions that the issue is the library used for the network purposes (actual node-fetch) is not isomorphic.
Reproducible demo
No response
Steps to reproduce

boot any react-native app
install near-api-js
the red screen appears while the building process

Expected behavior
No red screens.
In depth: I expect the library to be available across the various js environments
Actual behavior
It crashes
Your environment

NEAR JavaScript API version used: 2.0.4
Frontend framework (if applicable): react-native
Relevant dependencies (if applicable): -

Self-service

[ ] I'd be willing to fix this bug myself.

Hi @Mylnikov1337Kirill thank you for filing this issue!
I see the problem came from the packages refactor where this was missed. Previously the global fetch injection implicitly took place in a module which would have been unavailable to React Native environments but the basic Provider usage was unaffected. Now that fetch is sourced at load time, the problem has been promoted from breaking the connect module to breaking the entire @near-js/providers package 🤦
I'll have a PR up shortly with a fix, we should be able to publish the fix this week.


improv: Cache python modules imported from file / S3 for custom statements

Whenever a custom statement is used twice, Deirokay seeks for the module in each iteration. The modules could be cached instead to prevent unnecessary requests and guarantee that the custom statement will be always the same.

Resolved by #24


The Operator creates SeccompProfile even though in the ProfileRecording kind=SelinuxProfile

spod-zjn2z_security-profiles-operator.log
security-profiles-operator-webhook.log
security-profiles-operator.log
What happened:
I'm trying to create SelinuxProfile using ProfileRecordings however SeccompProfile is created instead.
What you expected to happen:
I expected SelinuxProfile  to be created.
How to reproduce it (as minimally and precisely as possible):
installation followed: https://github.com/kubernetes-sigs/security-profiles-operator/blob/main/installation-usage.md
profile recording followed:
https://github.com/kubernetes-sigs/security-profiles-operator/blob/main/installation-usage.md#record-profiles-from-workloads-with-profilerecordings
restricted it to single namespace:
https://github.com/kubernetes-sigs/security-profiles-operator/blob/main/installation-usage.md#restricting-to-a-single-namespace-with-upstream-deployment-manifests
Environment:
Openshift environment

Cloud provider or hardware configuration:
NAME="Red Hat Enterprise Linux CoreOS"
VERSION_ID="4.15"
PRETTY_NAME="Red Hat Enterprise Linux CoreOS 415.92.202403270524-0 (Plow)"
REDHAT_BUGZILLA_PRODUCT="OpenShift Container Platform"
OPENSHIFT_VERSION="4.15"
RHEL_VERSION="9.2"

Adding the ProfileRecording and Pod yaml file here.
apiVersion: security-profiles-operator.x-k8s.io/v1alpha1 kind: ProfileRecording metadata:   name: test-recording spec:   kind: SelinuxProfile   recorder: logs   mergeStrategy: containers   podSelector:     matchLabels:       app: sp-record
`apiVersion: v1
kind: Pod
metadata:
name: test-pod
labels:
app: sp-record
annotations:
openshift.io/required-scc: "privileged"
spec:
nodeSelector:
vnf: sbg
containers:
- name: nginx
image: quay.io/security-profiles-operator/test-nginx:1.19.1
volumeMounts:
- mountPath: /dummy
name: dummy-volume
- name: redis
image: quay.io/security-profiles-operator/redis:6.2.1
volumeMounts:
- mountPath: /dummy
name: dummy-volume
volumes:

name: dummy-volume
emptyDir:
sizeLimit: 500Mi`

profilerecording.txt
pod2.txt

Did you change the kind in ProfileRecoding to SelinuxProfile ? It supports only the log recorder for Selinux. Could you share the ProfileRecording CR that you are creating?
Also there are some more guidelines in https://github.com/kubernetes-sigs/security-profiles-operator/blob/main/installation-usage.md#create-a-selinux-profile.

Yes, the kind is set to SelinuxProfile and the recording is log. The profile is also attached profilerecoding.txt

@ccojocar @nev888
I have the same issue.
I used this ProfileRecording:
apiVersion: security-profiles-operator.x-k8s.io/v1alpha1
kind: ProfileRecording
metadata:
  name: test-recording
  namespace: my-namespace
spec:
  kind: SelinuxProfile
  recorder: logs
  mergeStrategy: containers
  podSelector:
    matchLabels:
      app: sp-record

In log-enricher container logs i see that:
I1127 09:14:13.464179  243895 enricher.go:446] "audit" logger="log-enricher" timestamp="1732698852.762:8077631" type="seccomp" node="okd-worker-5.corp.company.com" namespace="my-namespace" pod="nginx-deploy-5487d785dc-5rx5t" container="nginx-record" executable="/usr/sbin/nginx" pid=303193 syscallID=3 syscallName="close"

But i will deploy SPO from https://github.com/kubernetes-sigs/security-profiles-operator/blob/main/deploy/openshift-downstream.yaml

Thanks for investigating it. It looks like a bug.

Is the Selinux enabled in the spod configuration?
kubectl get -o yaml spod spod

Does it show the enableSelinux: true?

Can you also get the annotations and the labels from your pod after it is being created? I want to check if the webhook applies the correct annoations for profile recording.

@ccojocar
Sure, its enabled
apiVersion: security-profiles-operator.x-k8s.io/v1alpha1
kind: SecurityProfilesOperatorDaemon
metadata:
  creationTimestamp: '2024-11-21T20:34:46Z'
  generation: 9
  labels:
    app: security-profiles-operator
    k8slens-edit-resource-version: v1alpha1
  managedFields:
    - apiVersion: security-profiles-operator.x-k8s.io/v1alpha1
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:labels:
            .: {}
            f:app: {}
        f:spec:
          .: {}
          f:disableOciArtifactSignatureVerification: {}
          f:hostProcVolumePath: {}
          f:priorityClassName: {}
          f:selinuxOptions: {}
          f:selinuxTypeTag: {}
          f:staticWebhookConfig: {}
          f:tolerations: {}
      manager: security-profiles-operator
      operation: Update
      time: '2024-11-21T20:34:46Z'
    - apiVersion: security-profiles-operator.x-k8s.io/v1alpha1
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:labels:
            f:k8slens-edit-resource-version: {}
        f:spec:
          f:enableLogEnricher: {}
          f:enableMemoryOptimization: {}
          f:enableSelinux: {}
          f:selinuxOptions:
            f:allowedSystemProfiles: {}
      manager: node-fetch
      operation: Update
      time: '2024-11-28T08:25:23Z'
    - apiVersion: security-profiles-operator.x-k8s.io/v1alpha1
      fieldsType: FieldsV1
      fieldsV1:
        f:status:
          .: {}
          f:conditions: {}
          f:state: {}
      manager: security-profiles-operator
      operation: Update
      subresource: status
      time: '2024-11-28T08:27:24Z'
  name: spod
  namespace: security-profiles-operator
  resourceVersion: '97157005'
  uid: 235e1342-fe72-435e-b1c7-f3483187505a
  selfLink: >-
    /apis/security-profiles-operator.x-k8s.io/v1alpha1/namespaces/security-profiles-operator/securityprofilesoperatordaemons/spod
status:
  conditions:
    - lastTransitionTime: '2024-11-28T08:27:24Z'
      reason: Available
      status: 'True'
      type: Ready
  state: RUNNING
spec:
  disableOciArtifactSignatureVerification: false
  enableLogEnricher: true
  enableMemoryOptimization: true
  enableSelinux: true
  hostProcVolumePath: /proc
  priorityClassName: system-node-critical
  selinuxOptions:
    allowedSystemProfiles:
      - container
      - net_container
      - tmp_container
  selinuxTypeTag: spc_t
  staticWebhookConfig: false
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/master
      operator: Exists
    - effect: NoSchedule
      key: node-role.kubernetes.io/control-plane
      operator: Exists
    - effect: NoExecute
      key: node.kubernetes.io/not-ready
      operator: Exists

After deploy ProfileRecording and Pod (from docs – https://docs.openshift.com/container-platform/4.12/security/security_profiles_operator/spo-selinux.html#spo-recording-profiles_spo-selinux) i got this pod:
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: my-namespace
  uid: 9611ce42-e0e0-42a0-9173-78b57030320c
  resourceVersion: '98337438'
  creationTimestamp: '2024-11-29T12:29:25Z'
  labels:
    app: my-app
  annotations:
    io.containers.trace-avcs/nginx: test-recording_nginx_psmpd_1732883365
    io.containers.trace-avcs/redis: test-recording_redis_w6ztd_1732883365
    k8s.ovn.org/pod-networks: >-
      {"default":{"ip_addresses":["<IP_ADDRESS>/23"],"mac_address":"0a:58:0a:83:00:63","gateway_ips":["<IP_ADDRESS>"],"routes":[{"dest":"<IP_ADDRESS>/14","nextHop":"<IP_ADDRESS>"},{"dest":"<IP_ADDRESS>/16","nextHop":"<IP_ADDRESS>"},{"dest":"<IP_ADDRESS>/16","nextHop":"<IP_ADDRESS>"}],"ip_address":"<IP_ADDRESS>/23","gateway_ip":"<IP_ADDRESS>"}}
    k8s.v1.cni.cncf.io/network-status: |-
      [{
          "name": "ovn-kubernetes",
          "interface": "eth0",
          "ips": [
              "<IP_ADDRESS>"
          ],
          "mac": "0a:58:0a:83:00:63",
          "default": true,
          "dns": {}
      }]
    openshift.io/scc: privileged
    seccomp.security.alpha.kubernetes.io/pod: runtime/default
  managedFields:
    - manager: kubectl-create
      operation: Update
      apiVersion: v1
      time: '2024-11-29T12:29:24Z'
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:labels:
            .: {}
            f:app: {}
        f:spec:
          f:containers:
            k:{"name":"nginx"}:
              .: {}
              f:image: {}
              f:imagePullPolicy: {}
              f:name: {}
              f:ports:
                .: {}
                k:{"containerPort":8080,"protocol":"TCP"}:
                  .: {}
                  f:containerPort: {}
                  f:protocol: {}
              f:resources: {}
              f:securityContext:
                .: {}
                f:allowPrivilegeEscalation: {}
                f:capabilities:
                  .: {}
                  f:drop: {}
              f:terminationMessagePath: {}
              f:terminationMessagePolicy: {}
            k:{"name":"redis"}:
              .: {}
              f:image: {}
              f:imagePullPolicy: {}
              f:name: {}
              f:resources: {}
              f:securityContext:
                .: {}
                f:allowPrivilegeEscalation: {}
                f:capabilities:
                  .: {}
                  f:drop: {}
              f:terminationMessagePath: {}
              f:terminationMessagePolicy: {}
          f:dnsPolicy: {}
          f:enableServiceLinks: {}
          f:restartPolicy: {}
          f:schedulerName: {}
          f:securityContext:
            .: {}
            f:runAsNonRoot: {}
            f:seccompProfile:
              .: {}
              f:type: {}
          f:terminationGracePeriodSeconds: {}
    - manager: okd-worker-5.corp.company.com
      operation: Update
      apiVersion: v1
      time: '2024-11-29T12:29:25Z'
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:annotations:
            f:k8s.ovn.org/pod-networks: {}
      subresource: status
    - manager: multus-daemon
      operation: Update
      apiVersion: v1
      time: '2024-11-29T12:29:26Z'
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:annotations:
            f:k8s.v1.cni.cncf.io/network-status: {}
      subresource: status
    - manager: kubelet
      operation: Update
      apiVersion: v1
      time: '2024-11-29T12:29:38Z'
      fieldsType: FieldsV1
      fieldsV1:
        f:status:
          f:conditions:
            k:{"type":"ContainersReady"}:
              .: {}
              f:lastProbeTime: {}
              f:lastTransitionTime: {}
              f:status: {}
              f:type: {}
            k:{"type":"Initialized"}:
              .: {}
              f:lastProbeTime: {}
              f:lastTransitionTime: {}
              f:status: {}
              f:type: {}
            k:{"type":"Ready"}:
              .: {}
              f:lastProbeTime: {}
              f:lastTransitionTime: {}
              f:status: {}
              f:type: {}
          f:containerStatuses: {}
          f:hostIP: {}
          f:phase: {}
          f:podIP: {}
          f:podIPs:
            .: {}
            k:{"ip":"<IP_ADDRESS>"}:
              .: {}
              f:ip: {}
          f:startTime: {}
      subresource: status
  selfLink: /api/v1/namespaces/my-namespace/pods/my-pod
status:
  phase: Running
  conditions:
    - type: Initialized
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2024-11-29T12:29:25Z'
    - type: Ready
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2024-11-29T12:29:38Z'
    - type: ContainersReady
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2024-11-29T12:29:38Z'
    - type: PodScheduled
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2024-11-29T12:29:25Z'
  hostIP: X.X.X.X
  podIP: <IP_ADDRESS>
  podIPs:
    - ip: <IP_ADDRESS>
  startTime: '2024-11-29T12:29:25Z'
  containerStatuses:
    - name: nginx
      state:
        running:
          startedAt: '2024-11-29T12:29:34Z'
      lastState: {}
      ready: true
      restartCount: 0
      image: quay.io/security-profiles-operator/test-nginx-unprivileged:1.21
      imageID: 0cf0789c622a75327ce542cefd74792afced8fcf50911a6ac79a2c5e9ab087ac
      containerID: cri-o://36a551e716ba75e88f1742b1d9ebfcdf1b23384fff43c24a9450b49e1af8f678
      started: true
    - name: redis
      state:
        running:
          startedAt: '2024-11-29T12:29:37Z'
      lastState: {}
      ready: true
      restartCount: 0
      image: quay.io/security-profiles-operator/redis:6.2.1
      imageID: f877e80bb9ef719f7d6e7faa3cde7e20b97dc6d774d46175adcc8442ec7236aa
      containerID: cri-o://c10ac738f8a7ca276154b8dfd358315525b3c8c7bf4ee8af2b73111912fa26ab
      started: true
  qosClass: BestEffort
spec:
  volumes:
    - name: kube-api-access-nj5hh
      projected:
        sources:
          - serviceAccountToken:
              expirationSeconds: 3607
              path: token
          - configMap:
              name: kube-root-ca.crt
              items:
                - key: ca.crt
                  path: ca.crt
          - downwardAPI:
              items:
                - path: namespace
                  fieldRef:
                    apiVersion: v1
                    fieldPath: metadata.namespace
          - configMap:
              name: openshift-service-ca.crt
              items:
                - key: service-ca.crt
                  path: service-ca.crt
        defaultMode: 420
  containers:
    - name: nginx
      image: quay.io/security-profiles-operator/test-nginx-unprivileged:1.21
      ports:
        - containerPort: 8080
          protocol: TCP
      resources: {}
      volumeMounts:
        - name: kube-api-access-nj5hh
          readOnly: true
          mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      terminationMessagePath: /dev/termination-log
      terminationMessagePolicy: File
      imagePullPolicy: IfNotPresent
      securityContext:
        capabilities:
          drop:
            - ALL
        runAsUser:<PHONE_NUMBER>
        allowPrivilegeEscalation: false
        seccompProfile:
          type: Localhost
          localhostProfile: operator/security-profiles-operator/log-enricher-trace.json
    - name: redis
      image: quay.io/security-profiles-operator/redis:6.2.1
      resources: {}
      volumeMounts:
        - name: kube-api-access-nj5hh
          readOnly: true
          mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      terminationMessagePath: /dev/termination-log
      terminationMessagePolicy: File
      imagePullPolicy: IfNotPresent
      securityContext:
        capabilities:
          drop:
            - ALL
        runAsUser:<PHONE_NUMBER>
        allowPrivilegeEscalation: false
        seccompProfile:
          type: Localhost
          localhostProfile: operator/security-profiles-operator/log-enricher-trace.json
  restartPolicy: Always
  terminationGracePeriodSeconds: 30
  dnsPolicy: ClusterFirst
  serviceAccountName: default
  serviceAccount: default
  nodeName: okd-worker-5.corp.company.com
  securityContext:
    seLinuxOptions:
      level: s0:c25,c15
    runAsNonRoot: true
    fsGroup:<PHONE_NUMBER>
    seccompProfile:
      type: RuntimeDefault
  schedulerName: default-scheduler
  tolerations:
    - key: node.kubernetes.io/not-ready
      operator: Exists
      effect: NoExecute
      tolerationSeconds: 300
    - key: node.kubernetes.io/unreachable
      operator: Exists
      effect: NoExecute
      tolerationSeconds: 300
  priority: 0
  enableServiceLinks: true
  preemptionPolicy: PreemptLowerPriority

More specifically it has the following labels and annotations:
metadata:
  annotations:
    io.containers.trace-avcs/nginx: test-recording_nginx_psmpd_1732883365
    io.containers.trace-avcs/redis: test-recording_redis_w6ztd_1732883365
    k8s.ovn.org/pod-networks: '{"default":{"ip_addresses":["<IP_ADDRESS>/23"],"mac_address":"0a:58:0a:83:00:63","gateway_ips":["<IP_ADDRESS>"],"routes":[{"dest":"<IP_ADDRESS>/14","nextHop":"<IP_ADDRESS>"},{"dest":"<IP_ADDRESS>/16","nextHop":"<IP_ADDRESS>"},{"dest":"<IP_ADDRESS>/16","nextHop":"<IP_ADDRESS>"}],"ip_address":"<IP_ADDRESS>/23","gateway_ip":"<IP_ADDRESS>"}}'
    k8s.v1.cni.cncf.io/network-status: |-
      [{
          "name": "ovn-kubernetes",
          "interface": "eth0",
          "ips": [
              "<IP_ADDRESS>"
          ],
          "mac": "0a:58:0a:83:00:63",
          "default": true,
          "dns": {}
      }]
    openshift.io/scc: privileged
    seccomp.security.alpha.kubernetes.io/pod: runtime/default
  creationTimestamp: "2024-11-29T12:29:25Z"
  labels:
    app: my-app
  name: my-pod
  namespace: my-namespace

The annotations looks correct, trace-avcs means selinux.
Can you also check the spod daemonset logs?
Check on which cluster node your pod being recorded in scheduled, and also get the spod pod running on that node with:
kubectl get pods -o wide

Check in the logs of the security-profiles-operator container of that spod pod if you find some logs like:
Recording profile ... kind:

What kind is in there?

@ccojocar
Its scheduled pod on okd-worker-5.corp.company.com node:
kubectl get po -n my-namespace my-pod -owide

NAME     READY   STATUS    RESTARTS   AGE   IP            NODE                           NOMINATED NODE   READINESS GATES
my-pod   2/2     Running   0          15m   <IP_ADDRESS>   okd-worker-5.corp.company.com   <none>           <none>

So, check logs in spod pod in security-profiles-operator container that scheduled on the same okd-worker-5.corp.company.com node:

There is no information here about writing a new selinux profile. There is only old logs about deleting old profiles that I applied manually.
Moreover, if you look at the logs in the same pod at spod in the log-enricher container, you can see messages about seccomp creation:
I1129 12:59:31.095548 2891766 enricher.go:446] "audit" logger="log-enricher" timestamp="1732885170.701:11800586" type="seccomp" node="okd-worker-5.corp.company.com" namespace="my-namespace" pod="my-pod" container="redis" executable="/usr/local/bin/redis-server" pid=1894843 syscallID=232 syscallName="epoll_wait"

It seems that you have already some selinuxprofiles in the cluster?
kubectl get selinuxprofiles --all-namesapces

kubectl get profilerecording -o json --all-namesapce | jq .items[].spec.kind

Unfortunately, I don't have a cluster with SELinux enabled to debug it.
Is the selinuxd container running on the spod pod where your pod is being recorded?
If so, what is in the logs? Is this writing stuff into the /var/log/audit/audit.log, or /var/log/syslog in that node filesystem?
I have the feeling that both audit loggers are enabled: seccomp and selinux.

Yes, the selinuxd container in spod pod is running, running successfully on the same node. Its logs:
"level":"info","ts":1732783591.1135437,"caller":"daemon/daemon.go:30","msg":"Started daemon"}
{"level":"info","ts":1732783591.301241,"logger":"state-server","caller":"daemon/status_server.go:190","msg":"Serving status","path":"/var/run/selinuxd/selinuxd.sock","uid":0,"gid":65535}
{"level":"info","ts":1732783591.3026392,"caller":"daemon/status_server.go:73","msg":"Status Server got READY signal"}
{"level":"info","ts":1732783591.8303285,"logger":"file-watcher","caller":"daemon/daemon.go:93","msg":"Installing policy","file":"/etc/selinux.d/nginx-secure_nginx-deploy.cil"}
{"level":"info","ts":1732783591.8304944,"logger":"file-watcher","caller":"daemon/daemon.go:93","msg":"Installing policy","file":"/etc/selinux.d/nginx-secure_nginx-deploy.cil"}
{"level":"info","ts":1732783611.7671561,"logger":"policy-installer","caller":"daemon/daemon.go:131","msg":"The operation was successful","operation":"install - /etc/selinux.d/nginx-secure_nginx-deploy.cil"}
{"level":"info","ts":1732783611.7683005,"logger":"policy-installer","caller":"daemon/daemon.go:131","msg":"The operation was successful","operation":"install - /etc/selinux.d/nginx-secure_nginx-deploy.cil"}
{"level":"info","ts":1732884762.9738984,"logger":"file-watcher","caller":"daemon/daemon.go:90","msg":"Removing policy","file":"/etc/selinux.d/nginx-secure_nginx-deploy.cil"}
{"level":"info","ts":1732884771.542486,"caller":"semanage/semanage.go:89","msg":"Removing last nginx-secure_nginx-deploy module (no other nginx-secure_nginx-deploy module exists at another priority)."}
{"level":"info","ts":1732884798.635022,"logger":"policy-installer","caller":"daemon/daemon.go:131","msg":"The operation was successful","operation":"remove - /etc/selinux.d/nginx-secure_nginx-deploy.cil"}

These logs are also about old profiles that I applied manually.
root@okd-worker-5:/var/log/audit# ls -la /var/log/audit/
total 33044
drwx------.  2 root root      99 Nov 29 13:38 .
drwxr-xr-x. 13 root root    4096 Nov 27 11:35 ..
-rw-------.  1 root root  239442 Nov 29 13:38 audit.log
-r--------.  1 root root 8388799 Nov 29 13:38 audit.log.1
-r--------.  1 root root 8388836 Nov 29 13:34 audit.log.2
-r--------.  1 root root 8388712 Nov 29 13:31 audit.log.3
-r--------.  1 root root 8388695 Nov 29 13:28 audit.log.4

type=SECCOMP msg=audit(1732887528.015:12216466): auid=4294967295 uid=1000630000 gid=0 ses=4294967295 subj=system_u:system_r:container_t:s0:c15,c25 pid=1894843 comm="redis-server" exe="/usr/local/bin/redis-server" sig=0 arch=c000003e syscall=232 compat=0 ip=0x7f74c99437ef code=0x7ffc0000AUID="unset" UID="unknown(1000630000)" GID="root" ARCH=x86_64 SYSCALL=epoll_wait

So, you don't see anything in the audit log with type=AVC?

No, I don't see anything like that

@ccojocar
Do you need any other logs?

I am trying to spin up a local cluster running Fedora but I hit the same issue described in #2445.

@ccojocar
I used to get this error when installing. This was solved by replacing the image quay.io/security-profiles-operator/selinuxd with quay.io/security-profiles-operator/selinuxd-fedora:latest

I think the https://github.com/containers/selinuxd needs some update.

Yes, this may be possible. cc @jhrozek @JAORMX

I tried to investigate the issue a bit and I see in the logs the profile is arriving correctly for recording:
I1204 16:30:36.572465    7735 profilerecorder.go:284] "Recording profile" logger="recorder-spod" namespace="security-profiles-operator" kind="SelinuxProfile" name="nginx-recording_nginx-container_hn5rh_1733329836" pod="security-profiles-operator/nginx-pod"

but somehow the AVC tracing is not starting:
I1204 16:34:11.693239    7735 profilerecorder.go:416] "Checking if enricher is enabled" logger="recorder-spod"
I1204 16:34:11.693278    7735 profilerecorder.go:431] "Connecting to local GRPC enricher server" logger="recorder-spod"
I1204 16:34:11.693540    7735 profilerecorder.go:449] "Collecting profile" logger="recorder-spod" name="security-profiles-operator/nginx-recording-nginx-container" kind="SelinuxProfile"
I1204 16:34:11.802026    7735 profilerecorder.go:598] "No AVCs found, resetting profile" logger="recorder-spod" profileID="nginx-recording_nginx-container_hn5rh_1733329836"

I don't quite follow you. Do we first apply the ProfileRecording resource and then delete the Pod and recreate it with the SELinux recorded profile? Or am I misunderstanding something?

I don't quite follow you. Do we first apply the ProfileRecording resource and then delete the Pod and recreate it with the SELinux recorded profile? Or am I misunderstanding something?

The steps are as following:

Create the ProfileRecording resource with the proper pod selector.
Create the pod you want to record the profile but in the security context with the SELInux type selinuxrecording.process, as described above.
Let the pod running for a while, and then delete it. A SelinuxProfile should be created with the policy for your pod.
Harden your pod by referencing the recorded SELinux type in its security context.

@ccojocar


Remove "CustomBuilder" from builder metadata

Codecov Report

Merging #463 into master will not change coverage.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master     #463   +/-   ##
=======================================
  Coverage   67.51%   67.51%
=======================================
  Files          74       74
  Lines        3408     3408
=======================================
  Hits         2301     2301
  Misses        836      836
  Partials      271      271

Impacted Files
Coverage Δ

pkg/cnb/builder_builder.go
84.31% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update eaf78e9...a2655cb. Read the comment docs.


Gain background knowledge of Smart Contracts

Read about how Smart Contracts are being used and developed in other blockchain solutions. This is in preperation to working on Bosagora's "Trust Contracts".

https://github.com/bpfkorea/agora/discussions/1467

https://github.com/bpfkorea/agora/discussions/1467

Added some more experimental code to POC in my fork of Agora in branch:- https://github.com/hewison-chris/agora/tree/web-assembly-wasmer-poc


PaginationLink Props not working properly

components  PaginationLink
reactstrap version #7.1.0
react version #16.12.0
bootstrap version #4.4.1

What is happening?
PaginationLink props type first and last icon are not showing.

Steps to reproduce issue
PaginationItem
PaginationLink onClick={e => this.handlePageChange(e,0,"left")} first href="#" /
/PaginationItem

Use the latest version of reactstrap.  Pagination first and last appeared in v8

I updated to 8.4.1 but still not showing the first icon.

This works for me.  https://stackblitz.com/edit/react-7xux36

ohh nvm.. It's fixed now.. Thanks.


Hub does not connect

Hub component does not connect.
On restart, log says: Connection.__init__() takes from 1 to 4 positional arguments but 5 were given
Version of the custom_component
0.0.28
Configuration
HA version: '2024.8.2', 'installation_type': 'Home Assistant OS
supervisor: 'healthy': True, 'supported': True, 'arch': 'aarch64'
operating_system: 'board': 'rpi4-64', 'version': '13.0'
pymyenergi version installed in hass: 0.0.29

HACS myenergi integration configured via UI
Zappi v2, Hub + Harvi all running fine since 2023 (except for a recent warning about missing num_phases attribute).
Today I updated the myenergi integration via HACS.
Describe the bug
myenergi integration does not complete, sensors are grayed out/unavailable.
Code in connection.py seems to provide 5 args:
Debug log
[...]
2024-08-21 12:48:17.751 INFO (MainThread) [homeassistant.setup] Setting up myenergi
2024-08-21 12:48:17.751 INFO (MainThread) [homeassistant.setup] Setup of domain myenergi took 0.00 seconds
2024-08-21 12:48:17.751 INFO (MainThread) [custom_components.myenergi]
-------------------------------------------------------------------
myenergi
Version: 0.0.28
This is a custom integration!
If you have any issues with this you need to open an issue here:
https://github.com/CJNE/ha-myenergi/issues
-------------------------------------------------------------------

2024-08-21 12:48:17.761 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry MyHub for myenergi
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 604, in async_setup
    result = await component.async_setup_entry(hass, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/myenergi/__init__.py", line 51, in async_setup_entry
    conn = await hass.async_add_executor_job(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Connection.__init__() takes from 1 to 4 positional arguments but 5 were given
[...]

And when was the last time you updated your API key? That were changed recently by MyEnergi.

Tried generating a new key, which the myenergi API as used in a python import script accepted. However in HA I still get a message: 'Could not connect to myenergi, please try again in a while."

Getting the same "5 args" error in log when trying to reinstall myenergy integration in HA:

Deze fout is ontstaan door een aangepaste integratie.

Logger: custom_components.myenergi
Bron: custom_components/myenergi/config_flow.py:102
integratie: myenergi (documentatie, problemen)
Eerst voorgekomen: 17:12:48 (17 gebeurtenissen)
Laatst gelogd: 19:55:10

Traceback (most recent call last): File "/config/custom_components/myenergi/config_flow.py", line 88, in _test_credentials conn = await self.hass.async_add_executor_job( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: Connection.__init__() takes from 1 to 4 positional arguments but 5 were given

Updating pymyenergy to latest version using -U option made no difference.

My issue disappeared after removing an local copy of outdated pymyenergi code that was inside the /homeassistant/ dir on my raspi.
Will close this Issue


Background on normal page

Background can only be changed on cover
It seems that using background: https://example.com doesn't work on a normal page, which means that I can't change the background except the cover.
It seems like this is already a feature according to the guide, but it doesn't work on me. :(
If you can fix this or provide another way to specify the background, that will be really helpful to me. Thanks!

Same issue- the example background frontmatter syntax only works on the first slide and doesn't seem to work on any of the others

This is already supported with layout: image (it took me a while to discover this):
---
layout: image
image: ./path/to/image
---

Documentation
Source Code
You can always check out the layouts folder to see what layouts exist by default: https://github.com/slidevjs/slidev/blob/main/packages/client/layouts/
Themes can override default layouts and define new ones.

For someone to seek global background images/styles, this may be what you need: https://sli.dev/custom/global-layers.html

after checking the official theme, to rewrite the default layout(./layouts/default.vue) is a solution.
<template>
  <div class="slidev-layout default">
    <slot />
  </div>
</template>

<style lang="postcss">
.slidev-layout.default {
  background-image: url("./path/to/image");
  background-repeat: no-repeat;
  background-position: center;
  background-size: cover;
  padding: 4em 5em;
}
</style>

How do I change this background image (on any layout.. cover / image) on key press?

@joe733 The simplest would be to create another slide that looks the same but with a different image.
Or you can also create a custom component or layout and add the keypress behavior in it.

This is weird, because their own documentation shows an example of background property being used on other layouts.
https://sli.dev/guide/syntax.html#front-matter-layouts

But it does not work. So either a typo or a bug.
Anyway, I've worked around it with a custom bottom layer.


WIP don't run deploy bot on dependabot PRs

refs #1827
This should do what we want, but I'm not sure how to test it. @platan - do you have any advice on how to check it locally?

Messages

:book:

:sparkles: Thanks for your contribution to Shields, @chris48s!

  Generated by :no_entry_sign: dangerJS

I don't mind you merging it to find out! We can either trigger another Dependabot run or wait for it.

I'll prepare an instruction how to test it tomorrow.

We can test it manually or create a unit tests.
Manual test using https://probot.github.io/docs/simulating-webhooks/

First you have to create a test GitHub app

Go to https://github.com/settings/apps
Enter: GitHub App name: shields-test, Homepage URL: https://example.com, Webhook URL: https://example.com, Permissions -> Pull requests: Read&write, Subscribe to events: Pull request
Click "Create Github App"
Click "Generate a private key" and save it on a disk
Note Application ID (from About: ID, an integer value)

Create a test repo. It have to contains a file .github/probot.js with a content
include('chris48s/shields:.github/probot.js#issue1827'); or with a content of the .github/probot.js from this PR
Now you have to install this app in this repo, create a PR and close (merge) this pr in this test repo
Clone https://github.com/bkeepers/workflow and go to the directory with this repo
Go to Advanced section (https://github.com/settings/apps/YOUR_APP_NAME/advanced) of your app and copy a payload of the last delivery (should stars with "action": "closed") and save it to a file (e.g. pr-closed.json)
Move private key to directory with workflow clone
Simulate event delivery:

APP_ID=YOUR_APP_ID LOG_LEVEL=trace ~/node_modules/.bin/probot simulate pull_request pr-closed.json ./index.js

Now you should see this in the logs:
14:08:45.470Z DEBUG github: GitHub request: POST /repos/:owner/:repo/issues/:number/comments - 201 Created (installation=290126)
  params: {
    "number": 15,
    "owner": "platan",
    "repo": "shields-deployment-status-example",
    "body": "This pull request was merged to [master](https://github.com/platan/shields-deployment-status-example/tree/master) branch. Now this change is waiting for deployment. \nDeploys usually happen every few weeks. After deployment changes are copied to [gh-pages](https://github.com/platan/shields-deployment-status-example/tree/gh-pages) branch. \n\nThis badge displays deployment status:\n![](https://img.shields.io/github/commit-status/platan/shields-deployment-status-example/gh-pages/f47ae85142253204333fc3b348595ccb7da8b361.svg?label=deploy%20status)",
    "baseUrl": "https://api.github.com",
    "request": {
      "timeout": 0
    }
  }

This will create an extra comment in closed pr.
Now change .pull_request.head.ref value in pr-closed.json to dependabot/test and run probot simulate again. Now we have 14:09:09.125Z  INFO event: Filter have rejected the event in logs.
Manual testing
Alternatively we can install https://github.com/apps/shields-deployment in some repo and use include('chris48s/shields:.github/probot.js#issue1827'); to load configuration from this pr (documentation: https://github.com/bkeepers/workflow/blob/master/docs/configuration.md#include). Creating and merging a new pr will test that old flow works. We can install dependabot in this test repo to see if filtering works.
Unit test
Based on https://github.com/bkeepers/workflow/blob/master/test/index.js (documentation: https://probot.github.io/docs/testing/ I've prepared a unit test for our config: https://github.com/platan/shields-workflow-config-test/blob/master/config.test.js#L49
All these approaches does not require private key from https://github.com/apps/shields-deployment. With this private key and probot simulate testing would be easier :-)

Extra. An event from https://github.com/settings/apps/shields-deployment/advanced with closed PR made by dependabot (id feeefac0-a0cb-11e8-9705-532356462063 ):
details
{
  "action": "closed",
  "number": 1911,
  "pull_request": {
    "url": "https://api.github.com/repos/badges/shields/pulls/1911",
    "id": 207878090,
    "node_id": "MDExOlB1bGxSZXF1ZXN0MjA3ODc4MDkw",
    "html_url": "https://github.com/badges/shields/pull/1911",
    "diff_url": "https://github.com/badges/shields/pull/1911.diff",
    "patch_url": "https://github.com/badges/shields/pull/1911.patch",
    "issue_url": "https://api.github.com/repos/badges/shields/issues/1911",
    "number": 1911,
    "state": "closed",
    "locked": false,
    "title": "Bump request from 2.87.0 to 2.88.0; test on [travis chocolatey waffle]",
    "user": {
      "login": "dependabot[bot]",
      "id": 27856297,
      "node_id": "MDM6Qm90Mjc4NTYyOTc=",
      "avatar_url": "https://avatars3.githubusercontent.com/in/2141?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/dependabot%5Bbot%5D",
      "html_url": "https://github.com/apps/dependabot",
      "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers",
      "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}",
      "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions",
      "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs",
      "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos",
      "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}",
      "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events",
      "type": "Bot",
      "site_admin": false
    },
    "body": "Bumps [request](https://github.com/request/request) from 2.87.0 to 2.88.0.\n\nChangelog\n\n*Sourced from [request's changelog](https://github.com/request/request/blob/master/CHANGELOG.md).*\n\n> ## Change Log\n\n\nCommits\n\n- [`6420240`](https://github.com/request/request/commit/642024036379239a7fa29c27ef7bb4dd3fa3b3a4) 2.88.0\n- [`bd22e21`](https://github.com/request/request/commit/bd22e217f1590804ebfea031d158f2a486b0c985) fix: massive dependency upgrade, fixes all production vulnerabilities\n- [`925849a`](https://github.com/request/request/commit/925849a8278ae794eb9c257cf4d6cc4fb3ee89a8) Merge pull request [#2996](https://github-redirect.dependabot.com/request/request/issues/2996) from kwonoj/fix-uuid\n- [`7b68551`](https://github.com/request/request/commit/7b685511edbfdb909814473c3fccde3fb285503d) fix(uuid): import versioned uuid\n- [`5797963`](https://github.com/request/request/commit/579796327218bb6ae30440b4f25da6166f72c282) Merge pull request [#2994](https://github-redirect.dependabot.com/request/request/issues/2994) from dlecocq/oauth-sign-0.9.0\n- [`628ff5e`](https://github.com/request/request/commit/628ff5e3c9a242bb82805c368fc5b6f942d9af70) Update to oauth-sign 0.9.0\n- [`10987ef`](https://github.com/request/request/commit/10987ef9d611a0f24e340505f97c8eca119854e5) Merge pull request [#2993](https://github-redirect.dependabot.com/request/request/issues/2993) from simov/fix-header-tests\n- [`cd848af`](https://github.com/request/request/commit/cd848afbdbac78b656847c75be1c0a9daf619045) These are not going to fail if there is a server listening on those ports\n- [`a92e138`](https://github.com/request/request/commit/a92e138d897d78ce19dd70bd1ad271c7f9c6a23d) [#515](https://github-redirect.dependabot.com/request/request/issues/515), [#2894](https://github-redirect.dependabot.com/request/request/issues/2894) Strip port suffix from Host header if the protocol is known. ([#2904](https://github-redirect.dependabot.com/request/request/issues/2904))\n- [`45ffc4b`](https://github.com/request/request/commit/45ffc4b536043e85e0850edf35ba47067c0dbada) Improve AWS SigV4 support. ([#2791](https://github-redirect.dependabot.com/request/request/issues/2791))\n- Additional commits viewable in [compare view](https://github.com/request/request/compare/v2.87.0...v2.88.0)\n\n
\n\n[![Dependabot compatibility score](https://api.dependabot.com/badges/compatibility_score?dependency-name=request&package-manager=npm_and_yarn&previous-version=2.87.0&new-version=2.88.0)](https://dependabot.com/compatibility-score.html?dependency-name=request&package-manager=npm_and_yarn&previous-version=2.87.0&new-version=2.88.0)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n---\n\n\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot ignore this [patch|minor|major] version` will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Automerge options (never/patch/minor, and dev/runtime dependencies)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\nFinally, you can contact us by mentioning @dependabot.\n\n",
    "created_at": "2018-08-13T06:10:23Z",
    "updated_at": "2018-08-15T20:44:25Z",
    "closed_at": "2018-08-15T20:44:24Z",
    "merged_at": "2018-08-15T20:44:24Z",
    "merge_commit_sha": "30d746653bc0b9185ab024f1e29243c3fc77c8cf",
    "assignee": null,
    "assignees": [

    ],
    "requested_reviewers": [

    ],
    "requested_teams": [

    ],
    "labels": [
      {
        "id":<PHONE_NUMBER>,
        "node_id": "MDU6TGFiZWwxMDExODUwMjEx",
        "url": "https://api.github.com/repos/badges/shields/labels/dependencies",
        "name": "dependencies",
        "color": "0025ff",
        "default": false
      }
    ],
    "milestone": null,
    "commits_url": "https://api.github.com/repos/badges/shields/pulls/1911/commits",
    "review_comments_url": "https://api.github.com/repos/badges/shields/pulls/1911/comments",
    "review_comment_url": "https://api.github.com/repos/badges/shields/pulls/comments{/number}",
    "comments_url": "https://api.github.com/repos/badges/shields/issues/1911/comments",
    "statuses_url": "https://api.github.com/repos/badges/shields/statuses/5135273380a0adc043e95a15c98ddacb614afb20",
    "head": {
      "label": "badges:dependabot/npm_and_yarn/request-2.88.0",
      "ref": "dependabot/npm_and_yarn/request-2.88.0",
      "sha": "5135273380a0adc043e95a15c98ddacb614afb20",
      "user": {
        "login": "badges",
        "id": 6254238,
        "node_id": "MDEyOk9yZ2FuaXphdGlvbjYyNTQyMzg=",
        "avatar_url": "https://avatars2.githubusercontent.com/u/6254238?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/badges",
        "html_url": "https://github.com/badges",
        "followers_url": "https://api.github.com/users/badges/followers",
        "following_url": "https://api.github.com/users/badges/following{/other_user}",
        "gists_url": "https://api.github.com/users/badges/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/badges/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/badges/subscriptions",
        "organizations_url": "https://api.github.com/users/badges/orgs",
        "repos_url": "https://api.github.com/users/badges/repos",
        "events_url": "https://api.github.com/users/badges/events{/privacy}",
        "received_events_url": "https://api.github.com/users/badges/received_events",
        "type": "Organization",
        "site_admin": false
      },
      "repo": {
        "id": 7910045,
        "node_id": "MDEwOlJlcG9zaXRvcnk3OTEwMDQ1",
        "name": "shields",
        "full_name": "badges/shields",
        "owner": {
          "login": "badges",
          "id": 6254238,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjYyNTQyMzg=",
          "avatar_url": "https://avatars2.githubusercontent.com/u/6254238?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/badges",
          "html_url": "https://github.com/badges",
          "followers_url": "https://api.github.com/users/badges/followers",
          "following_url": "https://api.github.com/users/badges/following{/other_user}",
          "gists_url": "https://api.github.com/users/badges/gists{/gist_id}",
          "starred_url": "https://api.github.com/users/badges/starred{/owner}{/repo}",
          "subscriptions_url": "https://api.github.com/users/badges/subscriptions",
          "organizations_url": "https://api.github.com/users/badges/orgs",
          "repos_url": "https://api.github.com/users/badges/repos",
          "events_url": "https://api.github.com/users/badges/events{/privacy}",
          "received_events_url": "https://api.github.com/users/badges/received_events",
          "type": "Organization",
          "site_admin": false
        },
        "private": false,
        "html_url": "https://github.com/badges/shields",
        "description": "Concise, consistent, and legible badges in SVG and raster format",
        "fork": false,
        "url": "https://api.github.com/repos/badges/shields",
        "forks_url": "https://api.github.com/repos/badges/shields/forks",
        "keys_url": "https://api.github.com/repos/badges/shields/keys{/key_id}",
        "collaborators_url": "https://api.github.com/repos/badges/shields/collaborators{/collaborator}",
        "teams_url": "https://api.github.com/repos/badges/shields/teams",
        "hooks_url": "https://api.github.com/repos/badges/shields/hooks",
        "issue_events_url": "https://api.github.com/repos/badges/shields/issues/events{/number}",
        "events_url": "https://api.github.com/repos/badges/shields/events",
        "assignees_url": "https://api.github.com/repos/badges/shields/assignees{/user}",
        "branches_url": "https://api.github.com/repos/badges/shields/branches{/branch}",
        "tags_url": "https://api.github.com/repos/badges/shields/tags",
        "blobs_url": "https://api.github.com/repos/badges/shields/git/blobs{/sha}",
        "git_tags_url": "https://api.github.com/repos/badges/shields/git/tags{/sha}",
        "git_refs_url": "https://api.github.com/repos/badges/shields/git/refs{/sha}",
        "trees_url": "https://api.github.com/repos/badges/shields/git/trees{/sha}",
        "statuses_url": "https://api.github.com/repos/badges/shields/statuses/{sha}",
        "languages_url": "https://api.github.com/repos/badges/shields/languages",
        "stargazers_url": "https://api.github.com/repos/badges/shields/stargazers",
        "contributors_url": "https://api.github.com/repos/badges/shields/contributors",
        "subscribers_url": "https://api.github.com/repos/badges/shields/subscribers",
        "subscription_url": "https://api.github.com/repos/badges/shields/subscription",
        "commits_url": "https://api.github.com/repos/badges/shields/commits{/sha}",
        "git_commits_url": "https://api.github.com/repos/badges/shields/git/commits{/sha}",
        "comments_url": "https://api.github.com/repos/badges/shields/comments{/number}",
        "issue_comment_url": "https://api.github.com/repos/badges/shields/issues/comments{/number}",
        "contents_url": "https://api.github.com/repos/badges/shields/contents/{+path}",
        "compare_url": "https://api.github.com/repos/badges/shields/compare/{base}...{head}",
        "merges_url": "https://api.github.com/repos/badges/shields/merges",
        "archive_url": "https://api.github.com/repos/badges/shields/{archive_format}{/ref}",
        "downloads_url": "https://api.github.com/repos/badges/shields/downloads",
        "issues_url": "https://api.github.com/repos/badges/shields/issues{/number}",
        "pulls_url": "https://api.github.com/repos/badges/shields/pulls{/number}",
        "milestones_url": "https://api.github.com/repos/badges/shields/milestones{/number}",
        "notifications_url": "https://api.github.com/repos/badges/shields/notifications{?since,all,participating}",
        "labels_url": "https://api.github.com/repos/badges/shields/labels{/name}",
        "releases_url": "https://api.github.com/repos/badges/shields/releases{/id}",
        "deployments_url": "https://api.github.com/repos/badges/shields/deployments",
        "created_at": "2013-01-30T07:41:54Z",
        "updated_at": "2018-08-15T20:04:51Z",
        "pushed_at": "2018-08-15T20:44:24Z",
        "git_url": "git://github.com/badges/shields.git",
        "ssh_url": "git@github.com:badges/shields.git",
        "clone_url": "https://github.com/badges/shields.git",
        "svn_url": "https://github.com/badges/shields",
        "homepage": "https://shields.io",
        "size": 10106,
        "stargazers_count": 6035,
        "watchers_count": 6035,
        "language": "JavaScript",
        "has_issues": true,
        "has_projects": true,
        "has_downloads": true,
        "has_wiki": false,
        "has_pages": true,
        "forks_count": 1353,
        "mirror_url": null,
        "archived": false,
        "open_issues_count": 175,
        "license": {
          "key": "other",
          "name": "Other",
          "spdx_id": null,
          "url": null,
          "node_id": "MDc6TGljZW5zZTA="
        },
        "forks": 1353,
        "open_issues": 175,
        "watchers": 6035,
        "default_branch": "master"
      }
    },
    "base": {
      "label": "badges:master",
      "ref": "master",
      "sha": "97c6795e4ea1dcdb61d73532f28e26eebc969da7",
      "user": {
        "login": "badges",
        "id": 6254238,
        "node_id": "MDEyOk9yZ2FuaXphdGlvbjYyNTQyMzg=",
        "avatar_url": "https://avatars2.githubusercontent.com/u/6254238?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/badges",
        "html_url": "https://github.com/badges",
        "followers_url": "https://api.github.com/users/badges/followers",
        "following_url": "https://api.github.com/users/badges/following{/other_user}",
        "gists_url": "https://api.github.com/users/badges/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/badges/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/badges/subscriptions",
        "organizations_url": "https://api.github.com/users/badges/orgs",
        "repos_url": "https://api.github.com/users/badges/repos",
        "events_url": "https://api.github.com/users/badges/events{/privacy}",
        "received_events_url": "https://api.github.com/users/badges/received_events",
        "type": "Organization",
        "site_admin": false
      },
      "repo": {
        "id": 7910045,
        "node_id": "MDEwOlJlcG9zaXRvcnk3OTEwMDQ1",
        "name": "shields",
        "full_name": "badges/shields",
        "owner": {
          "login": "badges",
          "id": 6254238,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjYyNTQyMzg=",
          "avatar_url": "https://avatars2.githubusercontent.com/u/6254238?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/badges",
          "html_url": "https://github.com/badges",
          "followers_url": "https://api.github.com/users/badges/followers",
          "following_url": "https://api.github.com/users/badges/following{/other_user}",
          "gists_url": "https://api.github.com/users/badges/gists{/gist_id}",
          "starred_url": "https://api.github.com/users/badges/starred{/owner}{/repo}",
          "subscriptions_url": "https://api.github.com/users/badges/subscriptions",
          "organizations_url": "https://api.github.com/users/badges/orgs",
          "repos_url": "https://api.github.com/users/badges/repos",
          "events_url": "https://api.github.com/users/badges/events{/privacy}",
          "received_events_url": "https://api.github.com/users/badges/received_events",
          "type": "Organization",
          "site_admin": false
        },
        "private": false,
        "html_url": "https://github.com/badges/shields",
        "description": "Concise, consistent, and legible badges in SVG and raster format",
        "fork": false,
        "url": "https://api.github.com/repos/badges/shields",
        "forks_url": "https://api.github.com/repos/badges/shields/forks",
        "keys_url": "https://api.github.com/repos/badges/shields/keys{/key_id}",
        "collaborators_url": "https://api.github.com/repos/badges/shields/collaborators{/collaborator}",
        "teams_url": "https://api.github.com/repos/badges/shields/teams",
        "hooks_url": "https://api.github.com/repos/badges/shields/hooks",
        "issue_events_url": "https://api.github.com/repos/badges/shields/issues/events{/number}",
        "events_url": "https://api.github.com/repos/badges/shields/events",
        "assignees_url": "https://api.github.com/repos/badges/shields/assignees{/user}",
        "branches_url": "https://api.github.com/repos/badges/shields/branches{/branch}",
        "tags_url": "https://api.github.com/repos/badges/shields/tags",
        "blobs_url": "https://api.github.com/repos/badges/shields/git/blobs{/sha}",
        "git_tags_url": "https://api.github.com/repos/badges/shields/git/tags{/sha}",
        "git_refs_url": "https://api.github.com/repos/badges/shields/git/refs{/sha}",
        "trees_url": "https://api.github.com/repos/badges/shields/git/trees{/sha}",
        "statuses_url": "https://api.github.com/repos/badges/shields/statuses/{sha}",
        "languages_url": "https://api.github.com/repos/badges/shields/languages",
        "stargazers_url": "https://api.github.com/repos/badges/shields/stargazers",
        "contributors_url": "https://api.github.com/repos/badges/shields/contributors",
        "subscribers_url": "https://api.github.com/repos/badges/shields/subscribers",
        "subscription_url": "https://api.github.com/repos/badges/shields/subscription",
        "commits_url": "https://api.github.com/repos/badges/shields/commits{/sha}",
        "git_commits_url": "https://api.github.com/repos/badges/shields/git/commits{/sha}",
        "comments_url": "https://api.github.com/repos/badges/shields/comments{/number}",
        "issue_comment_url": "https://api.github.com/repos/badges/shields/issues/comments{/number}",
        "contents_url": "https://api.github.com/repos/badges/shields/contents/{+path}",
        "compare_url": "https://api.github.com/repos/badges/shields/compare/{base}...{head}",
        "merges_url": "https://api.github.com/repos/badges/shields/merges",
        "archive_url": "https://api.github.com/repos/badges/shields/{archive_format}{/ref}",
        "downloads_url": "https://api.github.com/repos/badges/shields/downloads",
        "issues_url": "https://api.github.com/repos/badges/shields/issues{/number}",
        "pulls_url": "https://api.github.com/repos/badges/shields/pulls{/number}",
        "milestones_url": "https://api.github.com/repos/badges/shields/milestones{/number}",
        "notifications_url": "https://api.github.com/repos/badges/shields/notifications{?since,all,participating}",
        "labels_url": "https://api.github.com/repos/badges/shields/labels{/name}",
        "releases_url": "https://api.github.com/repos/badges/shields/releases{/id}",
        "deployments_url": "https://api.github.com/repos/badges/shields/deployments",
        "created_at": "2013-01-30T07:41:54Z",
        "updated_at": "2018-08-15T20:04:51Z",
        "pushed_at": "2018-08-15T20:44:24Z",
        "git_url": "git://github.com/badges/shields.git",
        "ssh_url": "git@github.com:badges/shields.git",
        "clone_url": "https://github.com/badges/shields.git",
        "svn_url": "https://github.com/badges/shields",
        "homepage": "https://shields.io",
        "size": 10106,
        "stargazers_count": 6035,
        "watchers_count": 6035,
        "language": "JavaScript",
        "has_issues": true,
        "has_projects": true,
        "has_downloads": true,
        "has_wiki": false,
        "has_pages": true,
        "forks_count": 1353,
        "mirror_url": null,
        "archived": false,
        "open_issues_count": 175,
        "license": {
          "key": "other",
          "name": "Other",
          "spdx_id": null,
          "url": null,
          "node_id": "MDc6TGljZW5zZTA="
        },
        "forks": 1353,
        "open_issues": 175,
        "watchers": 6035,
        "default_branch": "master"
      }
    },
    "_links": {
      "self": {
        "href": "https://api.github.com/repos/badges/shields/pulls/1911"
      },
      "html": {
        "href": "https://github.com/badges/shields/pull/1911"
      },
      "issue": {
        "href": "https://api.github.com/repos/badges/shields/issues/1911"
      },
      "comments": {
        "href": "https://api.github.com/repos/badges/shields/issues/1911/comments"
      },
      "review_comments": {
        "href": "https://api.github.com/repos/badges/shields/pulls/1911/comments"
      },
      "review_comment": {
        "href": "https://api.github.com/repos/badges/shields/pulls/comments{/number}"
      },
      "commits": {
        "href": "https://api.github.com/repos/badges/shields/pulls/1911/commits"
      },
      "statuses": {
        "href": "https://api.github.com/repos/badges/shields/statuses/5135273380a0adc043e95a15c98ddacb614afb20"
      }
    },
    "author_association": "CONTRIBUTOR",
    "merged": true,
    "mergeable": null,
    "rebaseable": null,
    "mergeable_state": "unknown",
    "merged_by": {
      "login": "chris48s",
      "id": 6025893,
      "node_id": "MDQ6VXNlcjYwMjU4OTM=",
      "avatar_url": "https://avatars1.githubusercontent.com/u/6025893?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/chris48s",
      "html_url": "https://github.com/chris48s",
      "followers_url": "https://api.github.com/users/chris48s/followers",
      "following_url": "https://api.github.com/users/chris48s/following{/other_user}",
      "gists_url": "https://api.github.com/users/chris48s/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/chris48s/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/chris48s/subscriptions",
      "organizations_url": "https://api.github.com/users/chris48s/orgs",
      "repos_url": "https://api.github.com/users/chris48s/repos",
      "events_url": "https://api.github.com/users/chris48s/events{/privacy}",
      "received_events_url": "https://api.github.com/users/chris48s/received_events",
      "type": "User",
      "site_admin": false
    },
    "comments": 0,
    "review_comments": 0,
    "maintainer_can_modify": false,
    "commits": 1,
    "additions": 109,
    "deletions": 51,
    "changed_files": 2
  },
  "repository": {
    "id": 7910045,
    "node_id": "MDEwOlJlcG9zaXRvcnk3OTEwMDQ1",
    "name": "shields",
    "full_name": "badges/shields",
    "owner": {
      "login": "badges",
      "id": 6254238,
      "node_id": "MDEyOk9yZ2FuaXphdGlvbjYyNTQyMzg=",
      "avatar_url": "https://avatars2.githubusercontent.com/u/6254238?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/badges",
      "html_url": "https://github.com/badges",
      "followers_url": "https://api.github.com/users/badges/followers",
      "following_url": "https://api.github.com/users/badges/following{/other_user}",
      "gists_url": "https://api.github.com/users/badges/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/badges/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/badges/subscriptions",
      "organizations_url": "https://api.github.com/users/badges/orgs",
      "repos_url": "https://api.github.com/users/badges/repos",
      "events_url": "https://api.github.com/users/badges/events{/privacy}",
      "received_events_url": "https://api.github.com/users/badges/received_events",
      "type": "Organization",
      "site_admin": false
    },
    "private": false,
    "html_url": "https://github.com/badges/shields",
    "description": "Concise, consistent, and legible badges in SVG and raster format",
    "fork": false,
    "url": "https://api.github.com/repos/badges/shields",
    "forks_url": "https://api.github.com/repos/badges/shields/forks",
    "keys_url": "https://api.github.com/repos/badges/shields/keys{/key_id}",
    "collaborators_url": "https://api.github.com/repos/badges/shields/collaborators{/collaborator}",
    "teams_url": "https://api.github.com/repos/badges/shields/teams",
    "hooks_url": "https://api.github.com/repos/badges/shields/hooks",
    "issue_events_url": "https://api.github.com/repos/badges/shields/issues/events{/number}",
    "events_url": "https://api.github.com/repos/badges/shields/events",
    "assignees_url": "https://api.github.com/repos/badges/shields/assignees{/user}",
    "branches_url": "https://api.github.com/repos/badges/shields/branches{/branch}",
    "tags_url": "https://api.github.com/repos/badges/shields/tags",
    "blobs_url": "https://api.github.com/repos/badges/shields/git/blobs{/sha}",
    "git_tags_url": "https://api.github.com/repos/badges/shields/git/tags{/sha}",
    "git_refs_url": "https://api.github.com/repos/badges/shields/git/refs{/sha}",
    "trees_url": "https://api.github.com/repos/badges/shields/git/trees{/sha}",
    "statuses_url": "https://api.github.com/repos/badges/shields/statuses/{sha}",
    "languages_url": "https://api.github.com/repos/badges/shields/languages",
    "stargazers_url": "https://api.github.com/repos/badges/shields/stargazers",
    "contributors_url": "https://api.github.com/repos/badges/shields/contributors",
    "subscribers_url": "https://api.github.com/repos/badges/shields/subscribers",
    "subscription_url": "https://api.github.com/repos/badges/shields/subscription",
    "commits_url": "https://api.github.com/repos/badges/shields/commits{/sha}",
    "git_commits_url": "https://api.github.com/repos/badges/shields/git/commits{/sha}",
    "comments_url": "https://api.github.com/repos/badges/shields/comments{/number}",
    "issue_comment_url": "https://api.github.com/repos/badges/shields/issues/comments{/number}",
    "contents_url": "https://api.github.com/repos/badges/shields/contents/{+path}",
    "compare_url": "https://api.github.com/repos/badges/shields/compare/{base}...{head}",
    "merges_url": "https://api.github.com/repos/badges/shields/merges",
    "archive_url": "https://api.github.com/repos/badges/shields/{archive_format}{/ref}",
    "downloads_url": "https://api.github.com/repos/badges/shields/downloads",
    "issues_url": "https://api.github.com/repos/badges/shields/issues{/number}",
    "pulls_url": "https://api.github.com/repos/badges/shields/pulls{/number}",
    "milestones_url": "https://api.github.com/repos/badges/shields/milestones{/number}",
    "notifications_url": "https://api.github.com/repos/badges/shields/notifications{?since,all,participating}",
    "labels_url": "https://api.github.com/repos/badges/shields/labels{/name}",
    "releases_url": "https://api.github.com/repos/badges/shields/releases{/id}",
    "deployments_url": "https://api.github.com/repos/badges/shields/deployments",
    "created_at": "2013-01-30T07:41:54Z",
    "updated_at": "2018-08-15T20:04:51Z",
    "pushed_at": "2018-08-15T20:44:24Z",
    "git_url": "git://github.com/badges/shields.git",
    "ssh_url": "git@github.com:badges/shields.git",
    "clone_url": "https://github.com/badges/shields.git",
    "svn_url": "https://github.com/badges/shields",
    "homepage": "https://shields.io",
    "size": 10106,
    "stargazers_count": 6035,
    "watchers_count": 6035,
    "language": "JavaScript",
    "has_issues": true,
    "has_projects": true,
    "has_downloads": true,
    "has_wiki": false,
    "has_pages": true,
    "forks_count": 1353,
    "mirror_url": null,
    "archived": false,
    "open_issues_count": 175,
    "license": {
      "key": "other",
      "name": "Other",
      "spdx_id": null,
      "url": null,
      "node_id": "MDc6TGljZW5zZTA="
    },
    "forks": 1353,
    "open_issues": 175,
    "watchers": 6035,
    "default_branch": "master"
  },
  "organization": {
    "login": "badges",
    "id": 6254238,
    "node_id": "MDEyOk9yZ2FuaXphdGlvbjYyNTQyMzg=",
    "url": "https://api.github.com/orgs/badges",
    "repos_url": "https://api.github.com/orgs/badges/repos",
    "events_url": "https://api.github.com/orgs/badges/events",
    "hooks_url": "https://api.github.com/orgs/badges/hooks",
    "issues_url": "https://api.github.com/orgs/badges/issues",
    "members_url": "https://api.github.com/orgs/badges/members{/member}",
    "public_members_url": "https://api.github.com/orgs/badges/public_members{/member}",
    "avatar_url": "https://avatars2.githubusercontent.com/u/6254238?v=4",
    "description": "badges as a service"
  },
  "sender": {
    "login": "chris48s",
    "id": 6025893,
    "node_id": "MDQ6VXNlcjYwMjU4OTM=",
    "avatar_url": "https://avatars1.githubusercontent.com/u/6025893?v=4",
    "gravatar_id": "",
    "url": "https://api.github.com/users/chris48s",
    "html_url": "https://github.com/chris48s",
    "followers_url": "https://api.github.com/users/chris48s/followers",
    "following_url": "https://api.github.com/users/chris48s/following{/other_user}",
    "gists_url": "https://api.github.com/users/chris48s/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/chris48s/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/chris48s/subscriptions",
    "organizations_url": "https://api.github.com/users/chris48s/orgs",
    "repos_url": "https://api.github.com/users/chris48s/repos",
    "events_url": "https://api.github.com/users/chris48s/events{/privacy}",
    "received_events_url": "https://api.github.com/users/chris48s/received_events",
    "type": "User",
    "site_admin": false
  },
  "installation": {
    "id": 211793
  }
}

I've refactored https://github.com/platan/shields-workflow-config-test/blob/master/config.test.js. It should be more readable and it tests configuration loaded from file. Such test can be included in repo to tests configuration.

nice - cheers for the detailed info on testing this :)


Add documentation for acme HTTP-01 challenge

Since the HTTP-01 challenge is now supported by lemur, it should now also be documented.
Especially the reuse of the destination might be a bit tricky to wrap your head around, without reading the code. So it would be nice to have an example config similar to what exists for LetsEncrypt right now
https://github.com/Netflix/lemur/blob/21c2255c754b48fd2a1887cad64098fa73b99f03/docs/production/index.rst#add-support-for-letsencrypt

I'll work on this, and open a new pull request for it


Add macOS and other OS support in run.sh, install.sh and MAKEFILE

Added:

macOS support
Multiple package manager installs

Please fix working tree, also please outline which files have changed and why, thanks!

All in title, only files that (should) be changed are run.sh, install.sh, and MAKEFILE

Will sort out build remenants by adding to .gitignore

Alright, all config files should have been cleared.

Now changed .gitignore.


iOS - swipe left/backwards gives blank screen for a few seconds

Hi, thanks so much for the work on this, it's an amazing project!
Having this one issue on both of my iOS 18 and 17 devices: when I swipe back in menus (e.g. when browsing my music) there is a blank screen for a few seconds before going back to the previous screen (if I press the back arrow at the top of the screen it's instant) and sometimes it instead goes to the 'Playing' screen.
Just wanted to flag it, hard to train myself out of years of habit swiping to go back!
Thanks again

Not an iOS user, but my wife does have an iPhone. Just tried, and I can't get swipes to navigate back in Safari with any page - and my does not know how to enable this.
I tried adding to the home-screen (is this what you are using?) and sometimes (not sure how to trigger, its very random) if I've navigated into My Music / Artists / Album / etc. and I swipe back I can see it splits the view - right half showing my current view, left half showing the browse top/home view. Is this what you mean go back? i.e. does the swipe back (with delay) from 'My Music / Album Artists /  /'  go to 'Home' ? If so I think that's Safari reloading the page.
As you stated the back button is instantaneous. Material does try to intercept the browser's 'back' button and uses that to navigate back. This works for me on Android, and with iOS+Safari's URL navigation button.
The switching views on swipe is Material's intended behaviour.

OK, I think the issue is with Material's trapping of the browser's back button. On Linux with Chromium I have noticed that only the first 'back' after each page interaction is trapped. e.g. I browse to 'My Music / Album Artists / ABBA'. If I press the browser's back button I go to 'Album Artist', if I then interact with Material (e.g. open and close a context menu), then a second bacj can be trapped and I go to 'My Music' However, if in 'My Music / Album Artists / ABBA' and I press back twice it goes to 'Album Artists' and then leaves the Material page, and goes to whatever the browser was looking at before. I guess this kind of makes sense, as you would not want any old web page completely stopping you from going back.
To be honest I'm not 100% if there is much I can do about this, but I will investigate.

Thanks for looking into it!
On further investigation there are two gestures:

swiping left and right in the middle of the screen cycles through ‘Browse’ ‘Playing’ ‘Queue’ modes
swiping from the left edge of the screen is a universal ‘back’ gesture on iOS which isn’t working (either works with a very long lag or takes me to the ‘Playing’ screen rather than the previous menu).

I am using Material saved on the Home Screen - when I use it in safari, the back gesture (from the left edge of the screen) tries to go back to the previous site (same action as pressing the back button) - so it seems Material isn’t able to capture back actions in Safari?
I appreciate if it works on other platforms it may just be a Safari issue.

Swipe to change view is as designed - and has been this way for years.
Your other swipes are actually the browser's back button - I think this is now resolved in git for the next release, at least as far as I can test.

Seems much improved in my testing.

Not sure there is much more that can be done. As stated, 'browser back' seems to now be working for me - and I assume that's what's happening with iOS's side swipes (same as per Android).
However, seeing as you are also an iOS user, I noted an issue with background images not being updated correctly - see https://forums.slimdevices.com/forum/user-forums/3rd-party-software/106269-announce-material-skin?p=1729633#post1729633 @mikecappella seeing as (by your comment) you are using a git version, can you confirm if these now work correctly for you? Thanks.

@mikecappella Ah, I see you responded on the thread!

Closing, as I believe this to now be fixed for next release.

Thanks so much, can confirm this is fixed in 5.4.0
Back swipes from the edge of the screen now work perfectly most of the time, but sometimes are interpreted as both back and a quick navigation swipe to “Playing” (you can see the animation for back start but then it flicks to the Playing screen and cancels the back action). Is there a way to disable the swipes between modes? (‘Browse’’Playing’ ‘Queue’)
Thanks again, really appreciate it!

@CDrummond apologies, not sure if you get notifications for closed issues - thought it was better to add here than start a new issue.
Re my comment above, is it possible to disable small swipes left and right between Browse/Playing/Queue?

@tiprya For 5.4.1 Material ignores swipes starting in the first, or last, 48px.

@CDrummond ah amazing. I just upgraded and that works perfectly.
Thanks so much for all your work, really appreciate it


how to enter consistent fixed trajs that are offset from sargam

And for that matter, how to adjust them


Metric Logger Implementation

Should there be a logging that happens with metrics optionally instead of recording state for each piece of the trajectory?

From metrics meeting:

We might be better off not explicitly having a spec define out what is logged
Instead, if we have metaprogramming and at that time want to say Metric A, Metric D, Metric F are sent as logging, it could be passed an an array or something that says which metrics should be logged
I also could see some people wanting to have the option to define it in the spec instead of passing. In that case, there might be a secret / optional field that could be added that allows for defining out in the spec which metrics are going to be logged

Possibly add concept that metrics can be used similar to sensors


Farhan Ahmad Nurzi / Task - Refactor form components [Translation Key Extraction]

Changes:

...

Type of change

[ ] Bug fix
[ ] New feature
[ ] Update feature
[x] Refactor code
[ ] Translation to code
[ ] Translation to crowdin
[ ] Script configuration
[ ] Improve performance
[ ] Style only
[ ] Dependency update
[ ] Documentation update
[ ] Release

could u pls resolve the conflicts :pray:


chondrodystrophy

arising from #4024
chondrodystrophy (MP:0002657)
definition 'abnormal development of the cartilage primordia of long bones, resulting in abnormally short extremities but normal head and trunk'
has chondrodysplasia as an exact synonym but many sources indicate these are not the same thing
Does the current definition actually fir chondrodystrophy?
from http://www.animalabs.com/shop/dogs/inherited-diseases-dogs/chondrodystrophy-chondrodysplasia-canine/
'Chondrodystrophy in dogs is a common trait identified in many dogs’ breeds, characterized by shortened length of the limbs, which is a result of early changes in the structure of growth plates. The short-legged phenotype is known by two names: chondrodystrophy and chondrodysplasia. Chondrodysplasia is also known as canine dwarfism. Word ”chondro” come from cartilage, and ”dysplasia” means an abnormal growth, while word ”dystrophy” means degeneration of the tissue, in this case, of the cartilage. '
https://genocan.eu/product/chondrodysplasia/
Chondrodysplasia (CDPA) is a genetic disease causing abnormal growth of cartilage and early changes in the structure of growth plates. The affected dogs are generally characterized by a normal sized trunk and short limbs. Dogs with chondrodysplasia (CDPA) have short legs; this phenotype is characteristic for many breeds such as Welsh Corgi and Dachshund.
Chondrodystrophy (CDDY) is caused by a separate mutation, also includes a short-legged phenotype as well as abnormal premature degeneration of intervertebral discs leading to susceptibility to intervertebral disc herniation (IVDD).
https://vgl.ucdavis.edu/test/cddy-cdpa
Dogs with chondrodysplasia (CDPA) have short legs; this phenotype is characteristic of many breeds such as Corgis and Dachshunds. Chondrodystrophy (CDDY), caused by a separate mutation, also includes a short-legged phenotype as well as abnormal premature degeneration of intervertebral discs (also referred to as intervertebral disc disease, IVDD).

Also note that, currently, chondrodysplasia is used as a related synonym of chondrodystrophy (MP:0002657)