[Feature] Add the ability to specify a kubeconfig and disable service account token mounting in helm chart

ISSUE TYPE

Feature Pull Request

SUMMARY
This provides the ability to directly specify a kubeconfig for botkube to use when installing via helm. In addition, it adds a value that will disable service account token mounting. This provides the ability to run botkube against other clusters that it is not currently running in.

@bhavin192 any thoughts on this PR?

@sudermanjr could you please attach --dry-run --debug output of helm install with the options you proposed set?

helm install --debug --dry-run  botkube ./ --set kubeconfig.enabled=true --set kubeconfig.existingSecret=kubeconfig-supersecret | tee /tmp/output.txt

cat output.txt

NAME: botkube
LAST DEPLOYED: Wed Nov 24 10:51:31 2021
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
kubeconfig:
  enabled: true
  existingSecret: kubeconfig-supersecret

COMPUTED VALUES:
affinity: {}
automountServiceAccountToken: true
communications:
  discord:
    botid: DISCORD_BOT_ID
    channel: DISCORD_CHANNEL_ID
    enabled: false
    notiftype: short
    token: DISCORD_TOKEN
  elasticsearch:
    awsSigning:
      awsRegion: us-east-1
      enabled: false
      roleArn: ""
    enabled: false
    index:
      name: botkube
      replicas: 0
      shards: 1
      type: botkube-event
    password: ELASTICSEARCH_PASSWORD
    server: ELASTICSEARCH_ADDRESS
    skipTLSVerify: false
    username: ELASTICSEARCH_USERNAME
  existingSecretName: ""
  mattermost:
    botName: BotKube
    channel: MATTERMOST_CHANNEL
    enabled: false
    notiftype: short
    team: MATTERMOST_TEAM
    token: MATTERMOST_TOKEN
    url: MATTERMOST_SERVER_URL
  slack:
    channel: SLACK_CHANNEL
    enabled: false
    notiftype: short
    token: SLACK_API_TOKEN
  teams:
    appID: APPLICATION_ID
    appPassword: APPLICATION_PASSWORD
    enabled: false
    notiftype: short
    port: 3978
  webhook:
    enabled: false
    url: WEBHOOK_URL
config:
  recommendations: true
  resources:
  - events:
    - create
    - delete
    - error
    name: v1/pods
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/services
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - update
    - delete
    - error
    name: apps/v1/deployments
    namespaces:
      ignore:
      - null
      include:
      - all
    updateSetting:
      fields:
      - spec.template.spec.containers[*].image
      - status.availableReplicas
      includeDiff: true
  - events:
    - create
    - update
    - delete
    - error
    name: apps/v1/statefulsets
    namespaces:
      ignore:
      - null
      include:
      - all
    updateSetting:
      fields:
      - spec.template.spec.containers[*].image
      - status.readyReplicas
      includeDiff: true
  - events:
    - create
    - delete
    - error
    name: networking.k8s.io/v1beta1/ingresses
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/nodes
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/namespaces
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/persistentvolumes
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/persistentvolumeclaims
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/configmaps
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - update
    - delete
    - error
    name: apps/v1/daemonsets
    namespaces:
      ignore:
      - null
      include:
      - all
    updateSetting:
      fields:
      - spec.template.spec.containers[*].image
      - status.numberReady
      includeDiff: true
  - events:
    - create
    - update
    - delete
    - error
    name: batch/v1/jobs
    namespaces:
      ignore:
      - null
      include:
      - all
    updateSetting:
      fields:
      - spec.template.spec.containers[*].image
      - status.conditions[*].type
      includeDiff: true
  - events:
    - create
    - delete
    - error
    name: rbac.authorization.k8s.io/v1/roles
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: rbac.authorization.k8s.io/v1/rolebindings
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: rbac.authorization.k8s.io/v1/clusterrolebindings
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: rbac.authorization.k8s.io/v1/clusterroles
    namespaces:
      ignore:
      - null
      include:
      - all
  settings:
    clustername: not-configured
    configwatcher: true
    kubectl:
      commands:
        resources:
        - deployments
        - pods
        - namespaces
        - daemonsets
        - statefulsets
        - storageclasses
        - nodes
        verbs:
        - api-resources
        - api-versions
        - cluster-info
        - describe
        - diff
        - explain
        - get
        - logs
        - top
        - auth
      defaultNamespace: default
      enabled: false
      restrictAccess: false
    upgradeNotifier: true
  ssl:
    enabled: false
containerSecurityContext:
  allowPrivilegeEscalation: false
  privileged: false
  readOnlyRootFilesystem: true
extraAnnotations: {}
extraEnv: null
fullnameOverride: ""
image:
  pullPolicy: IfNotPresent
  registry: ghcr.io
  repository: infracloudio/botkube
  tag: v0.12.3
ingress:
  annotations:
    kubernetes.io/ingress.class: nginx
  create: false
  host: HOST
  tls:
    enabled: false
    secretName: ""
  urlPath: /
kubeconfig:
  base64Config: ""
  enabled: true
  existingSecret: kubeconfig-supersecret
logLevel: info
nameOverride: ""
nodeSelector: {}
podSecurityPolicy:
  enabled: false
priorityClassName: ""
rbac:
  create: true
  rules:
  - apiGroups:
    - '*'
    resources:
    - '*'
    verbs:
    - get
    - watch
    - list
replicaCount: 1
resources: {}
securityContext:
  runAsGroup: 101
  runAsUser: 101
service:
  name: metrics
  port: 2112
  targetPort: 2112
serviceAccount:
  annotations: {}
  create: true
serviceMonitor:
  enabled: false
  interval: 10s
  labels: {}
  path: /metrics
  port: metrics
tolerations: []

HOOKS:
MANIFEST:
---
# Source: botkube/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: botkube-sa
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
automountServiceAccountToken: true
---
# Source: botkube/templates/communicationsecret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: botkube-communication-secret
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
stringData:
  comm_config.yaml: |
    # Communication settings
    communications:
      discord:
        botid: DISCORD_BOT_ID
        channel: DISCORD_CHANNEL_ID
        enabled: false
        notiftype: short
        token: DISCORD_TOKEN
      elasticsearch:
        awsSigning:
          awsRegion: us-east-1
          enabled: false
          roleArn: ""
        enabled: false
        index:
          name: botkube
          replicas: 0
          shards: 1
          type: botkube-event
        password: ELASTICSEARCH_PASSWORD
        server: ELASTICSEARCH_ADDRESS
        skipTLSVerify: false
        username: ELASTICSEARCH_USERNAME
      existingSecretName: ""
      mattermost:
        botName: BotKube
        channel: MATTERMOST_CHANNEL
        enabled: false
        notiftype: short
        team: MATTERMOST_TEAM
        token: MATTERMOST_TOKEN
        url: MATTERMOST_SERVER_URL
      slack:
        channel: SLACK_CHANNEL
        enabled: false
        notiftype: short
        token: SLACK_API_TOKEN
      teams:
        appID: APPLICATION_ID
        appPassword: APPLICATION_PASSWORD
        enabled: false
        notiftype: short
        port: 3978
      webhook:
        enabled: false
        url: WEBHOOK_URL
---
# Source: botkube/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: botkube-configmap
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
data:
  resource_config.yaml: |
    recommendations: true
    resources:
    - events:
      - create
      - delete
      - error
      name: v1/pods
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/services
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - update
      - delete
      - error
      name: apps/v1/deployments
      namespaces:
        ignore:
        - null
        include:
        - all
      updateSetting:
        fields:
        - spec.template.spec.containers[*].image
        - status.availableReplicas
        includeDiff: true
    - events:
      - create
      - update
      - delete
      - error
      name: apps/v1/statefulsets
      namespaces:
        ignore:
        - null
        include:
        - all
      updateSetting:
        fields:
        - spec.template.spec.containers[*].image
        - status.readyReplicas
        includeDiff: true
    - events:
      - create
      - delete
      - error
      name: networking.k8s.io/v1beta1/ingresses
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/nodes
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/namespaces
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/persistentvolumes
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/persistentvolumeclaims
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/configmaps
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - update
      - delete
      - error
      name: apps/v1/daemonsets
      namespaces:
        ignore:
        - null
        include:
        - all
      updateSetting:
        fields:
        - spec.template.spec.containers[*].image
        - status.numberReady
        includeDiff: true
    - events:
      - create
      - update
      - delete
      - error
      name: batch/v1/jobs
      namespaces:
        ignore:
        - null
        include:
        - all
      updateSetting:
        fields:
        - spec.template.spec.containers[*].image
        - status.conditions[*].type
        includeDiff: true
    - events:
      - create
      - delete
      - error
      name: rbac.authorization.k8s.io/v1/roles
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: rbac.authorization.k8s.io/v1/rolebindings
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: rbac.authorization.k8s.io/v1/clusterrolebindings
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: rbac.authorization.k8s.io/v1/clusterroles
      namespaces:
        ignore:
        - null
        include:
        - all
    settings:
      clustername: not-configured
      configwatcher: true
      kubectl:
        commands:
          resources:
          - deployments
          - pods
          - namespaces
          - daemonsets
          - statefulsets
          - storageclasses
          - nodes
          verbs:
          - api-resources
          - api-versions
          - cluster-info
          - describe
          - diff
          - explain
          - get
          - logs
          - top
          - auth
        defaultNamespace: default
        enabled: false
        restrictAccess: false
      upgradeNotifier: true
    ssl:
      enabled: false
---
# Source: botkube/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: botkube-clusterrole
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
rules:
  - apiGroups:
    - '*'
    resources:
    - '*'
    verbs:
    - get
    - watch
    - list
---
# Source: botkube/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: botkube-clusterrolebinding
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: botkube-clusterrole
subjects:
- kind: ServiceAccount
  name: botkube-sa
  namespace: default
---
# Source: botkube/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: botkube
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
    component: controller
    app: botkube
spec:
  replicas: 1
  selector:
    matchLabels:
      component: controller
      app: botkube
  template:
    metadata:
      labels:
        component: controller
        app: botkube
      annotations:
        checksum/config: d2d55e6497f3096e662d5b13373c7e2b66fd8269793fbe27c9848be31a5dd0a7
    spec:
      serviceAccountName: botkube-sa
      containers:
        - name: botkube
          image: "ghcr.io/infracloudio/botkube:v0.12.3"
          imagePullPolicy: IfNotPresent
          securityContext:
            allowPrivilegeEscalation: false
            privileged: false
            readOnlyRootFilesystem: true

          volumeMounts:
            - name: config-volume
              mountPath: "/config"
            - name: kubeconfig
              mountPath: "/.kube"

          env:
            - name: CONFIG_PATH
              value: "/config/"
            - name: LOG_LEVEL
              value: "info"
            - name: METRICS_PORT
              value: "2112"
            - name: KUBECONFIG
              value: "/.kube/config"
      volumes:
        - name: config-volume
          projected:
            sources:
            - configMap:
                name: botkube-configmap
            - secret:
                name: botkube-communication-secret
        - name: kubeconfig
          secret:
            secretName: kubeconfig-supersecret

      securityContext:
        runAsUser: 101
        runAsGroup: 101

helm install --debug --dry-run  botkube ./ --set kubeconfig.enabled=true --set kubeconfig.base64Config=VEhJUyBJUyBBIEtVQkVDT05GSUc= | tee /tmp/output.txt

NAME: botkube
LAST DEPLOYED: Wed Nov 24 10:53:18 2021
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
kubeconfig:
  base64Config: VEhJUyBJUyBBIEtVQkVDT05GSUc=
  enabled: true

COMPUTED VALUES:
affinity: {}
automountServiceAccountToken: true
communications:
  discord:
    botid: DISCORD_BOT_ID
    channel: DISCORD_CHANNEL_ID
    enabled: false
    notiftype: short
    token: DISCORD_TOKEN
  elasticsearch:
    awsSigning:
      awsRegion: us-east-1
      enabled: false
      roleArn: ""
    enabled: false
    index:
      name: botkube
      replicas: 0
      shards: 1
      type: botkube-event
    password: ELASTICSEARCH_PASSWORD
    server: ELASTICSEARCH_ADDRESS
    skipTLSVerify: false
    username: ELASTICSEARCH_USERNAME
  existingSecretName: ""
  mattermost:
    botName: BotKube
    channel: MATTERMOST_CHANNEL
    enabled: false
    notiftype: short
    team: MATTERMOST_TEAM
    token: MATTERMOST_TOKEN
    url: MATTERMOST_SERVER_URL
  slack:
    channel: SLACK_CHANNEL
    enabled: false
    notiftype: short
    token: SLACK_API_TOKEN
  teams:
    appID: APPLICATION_ID
    appPassword: APPLICATION_PASSWORD
    enabled: false
    notiftype: short
    port: 3978
  webhook:
    enabled: false
    url: WEBHOOK_URL
config:
  recommendations: true
  resources:
  - events:
    - create
    - delete
    - error
    name: v1/pods
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/services
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - update
    - delete
    - error
    name: apps/v1/deployments
    namespaces:
      ignore:
      - null
      include:
      - all
    updateSetting:
      fields:
      - spec.template.spec.containers[*].image
      - status.availableReplicas
      includeDiff: true
  - events:
    - create
    - update
    - delete
    - error
    name: apps/v1/statefulsets
    namespaces:
      ignore:
      - null
      include:
      - all
    updateSetting:
      fields:
      - spec.template.spec.containers[*].image
      - status.readyReplicas
      includeDiff: true
  - events:
    - create
    - delete
    - error
    name: networking.k8s.io/v1beta1/ingresses
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/nodes
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/namespaces
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/persistentvolumes
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/persistentvolumeclaims
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: v1/configmaps
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - update
    - delete
    - error
    name: apps/v1/daemonsets
    namespaces:
      ignore:
      - null
      include:
      - all
    updateSetting:
      fields:
      - spec.template.spec.containers[*].image
      - status.numberReady
      includeDiff: true
  - events:
    - create
    - update
    - delete
    - error
    name: batch/v1/jobs
    namespaces:
      ignore:
      - null
      include:
      - all
    updateSetting:
      fields:
      - spec.template.spec.containers[*].image
      - status.conditions[*].type
      includeDiff: true
  - events:
    - create
    - delete
    - error
    name: rbac.authorization.k8s.io/v1/roles
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: rbac.authorization.k8s.io/v1/rolebindings
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: rbac.authorization.k8s.io/v1/clusterrolebindings
    namespaces:
      ignore:
      - null
      include:
      - all
  - events:
    - create
    - delete
    - error
    name: rbac.authorization.k8s.io/v1/clusterroles
    namespaces:
      ignore:
      - null
      include:
      - all
  settings:
    clustername: not-configured
    configwatcher: true
    kubectl:
      commands:
        resources:
        - deployments
        - pods
        - namespaces
        - daemonsets
        - statefulsets
        - storageclasses
        - nodes
        verbs:
        - api-resources
        - api-versions
        - cluster-info
        - describe
        - diff
        - explain
        - get
        - logs
        - top
        - auth
      defaultNamespace: default
      enabled: false
      restrictAccess: false
    upgradeNotifier: true
  ssl:
    enabled: false
containerSecurityContext:
  allowPrivilegeEscalation: false
  privileged: false
  readOnlyRootFilesystem: true
extraAnnotations: {}
extraEnv: null
fullnameOverride: ""
image:
  pullPolicy: IfNotPresent
  registry: ghcr.io
  repository: infracloudio/botkube
  tag: v0.12.3
ingress:
  annotations:
    kubernetes.io/ingress.class: nginx
  create: false
  host: HOST
  tls:
    enabled: false
    secretName: ""
  urlPath: /
kubeconfig:
  base64Config: VEhJUyBJUyBBIEtVQkVDT05GSUc=
  enabled: true
  existingSecret: ""
logLevel: info
nameOverride: ""
nodeSelector: {}
podSecurityPolicy:
  enabled: false
priorityClassName: ""
rbac:
  create: true
  rules:
  - apiGroups:
    - '*'
    resources:
    - '*'
    verbs:
    - get
    - watch
    - list
replicaCount: 1
resources: {}
securityContext:
  runAsGroup: 101
  runAsUser: 101
service:
  name: metrics
  port: 2112
  targetPort: 2112
serviceAccount:
  annotations: {}
  create: true
serviceMonitor:
  enabled: false
  interval: 10s
  labels: {}
  path: /metrics
  port: metrics
tolerations: []

HOOKS:
MANIFEST:
---
# Source: botkube/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: botkube-sa
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
automountServiceAccountToken: true
---
# Source: botkube/templates/communicationsecret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: botkube-communication-secret
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
stringData:
  comm_config.yaml: |
    # Communication settings
    communications:
      discord:
        botid: DISCORD_BOT_ID
        channel: DISCORD_CHANNEL_ID
        enabled: false
        notiftype: short
        token: DISCORD_TOKEN
      elasticsearch:
        awsSigning:
          awsRegion: us-east-1
          enabled: false
          roleArn: ""
        enabled: false
        index:
          name: botkube
          replicas: 0
          shards: 1
          type: botkube-event
        password: ELASTICSEARCH_PASSWORD
        server: ELASTICSEARCH_ADDRESS
        skipTLSVerify: false
        username: ELASTICSEARCH_USERNAME
      existingSecretName: ""
      mattermost:
        botName: BotKube
        channel: MATTERMOST_CHANNEL
        enabled: false
        notiftype: short
        team: MATTERMOST_TEAM
        token: MATTERMOST_TOKEN
        url: MATTERMOST_SERVER_URL
      slack:
        channel: SLACK_CHANNEL
        enabled: false
        notiftype: short
        token: SLACK_API_TOKEN
      teams:
        appID: APPLICATION_ID
        appPassword: APPLICATION_PASSWORD
        enabled: false
        notiftype: short
        port: 3978
      webhook:
        enabled: false
        url: WEBHOOK_URL
---
# Source: botkube/templates/kubeconfig.yaml
apiVersion: v1
kind: Secret
metadata:
  name: botkube-kubeconfig
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
data:
  config: VEhJUyBJUyBBIEtVQkVDT05GSUc=
---
# Source: botkube/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: botkube-configmap
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
data:
  resource_config.yaml: |
    recommendations: true
    resources:
    - events:
      - create
      - delete
      - error
      name: v1/pods
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/services
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - update
      - delete
      - error
      name: apps/v1/deployments
      namespaces:
        ignore:
        - null
        include:
        - all
      updateSetting:
        fields:
        - spec.template.spec.containers[*].image
        - status.availableReplicas
        includeDiff: true
    - events:
      - create
      - update
      - delete
      - error
      name: apps/v1/statefulsets
      namespaces:
        ignore:
        - null
        include:
        - all
      updateSetting:
        fields:
        - spec.template.spec.containers[*].image
        - status.readyReplicas
        includeDiff: true
    - events:
      - create
      - delete
      - error
      name: networking.k8s.io/v1beta1/ingresses
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/nodes
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/namespaces
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/persistentvolumes
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/persistentvolumeclaims
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: v1/configmaps
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - update
      - delete
      - error
      name: apps/v1/daemonsets
      namespaces:
        ignore:
        - null
        include:
        - all
      updateSetting:
        fields:
        - spec.template.spec.containers[*].image
        - status.numberReady
        includeDiff: true
    - events:
      - create
      - update
      - delete
      - error
      name: batch/v1/jobs
      namespaces:
        ignore:
        - null
        include:
        - all
      updateSetting:
        fields:
        - spec.template.spec.containers[*].image
        - status.conditions[*].type
        includeDiff: true
    - events:
      - create
      - delete
      - error
      name: rbac.authorization.k8s.io/v1/roles
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: rbac.authorization.k8s.io/v1/rolebindings
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: rbac.authorization.k8s.io/v1/clusterrolebindings
      namespaces:
        ignore:
        - null
        include:
        - all
    - events:
      - create
      - delete
      - error
      name: rbac.authorization.k8s.io/v1/clusterroles
      namespaces:
        ignore:
        - null
        include:
        - all
    settings:
      clustername: not-configured
      configwatcher: true
      kubectl:
        commands:
          resources:
          - deployments
          - pods
          - namespaces
          - daemonsets
          - statefulsets
          - storageclasses
          - nodes
          verbs:
          - api-resources
          - api-versions
          - cluster-info
          - describe
          - diff
          - explain
          - get
          - logs
          - top
          - auth
        defaultNamespace: default
        enabled: false
        restrictAccess: false
      upgradeNotifier: true
    ssl:
      enabled: false
---
# Source: botkube/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: botkube-clusterrole
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
rules:
  - apiGroups:
    - '*'
    resources:
    - '*'
    verbs:
    - get
    - watch
    - list
---
# Source: botkube/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: botkube-clusterrolebinding
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: botkube-clusterrole
subjects:
- kind: ServiceAccount
  name: botkube-sa
  namespace: default
---
# Source: botkube/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: botkube
  labels:
    app.kubernetes.io/name: botkube
    helm.sh/chart: botkube-v0.12.3
    app.kubernetes.io/instance: botkube
    app.kubernetes.io/managed-by: Helm
    component: controller
    app: botkube
spec:
  replicas: 1
  selector:
    matchLabels:
      component: controller
      app: botkube
  template:
    metadata:
      labels:
        component: controller
        app: botkube
      annotations:
        checksum/config: d2d55e6497f3096e662d5b13373c7e2b66fd8269793fbe27c9848be31a5dd0a7
    spec:
      serviceAccountName: botkube-sa
      containers:
        - name: botkube
          image: "ghcr.io/infracloudio/botkube:v0.12.3"
          imagePullPolicy: IfNotPresent
          securityContext:
            allowPrivilegeEscalation: false
            privileged: false
            readOnlyRootFilesystem: true

          volumeMounts:
            - name: config-volume
              mountPath: "/config"
            - name: kubeconfig
              mountPath: "/.kube"

          env:
            - name: CONFIG_PATH
              value: "/config/"
            - name: LOG_LEVEL
              value: "info"
            - name: METRICS_PORT
              value: "2112"
            - name: KUBECONFIG
              value: "/.kube/config"
      volumes:
        - name: config-volume
          projected:
            sources:
            - configMap:
                name: botkube-configmap
            - secret:
                name: botkube-communication-secret
        - name: kubeconfig
          secret:
            secretName: botkube-kubeconfig

      securityContext:
        runAsUser: 101
        runAsGroup: 101

Hey @sudermanjr, the CI failure is blocking the merge. Could you please take a look?

@PrasadG193 the Build is failing on a go mod issue, which definitely has nothing to do with the chart. Not sure how to help here

@sudermanjr I've fixed the issue in develop, could you please rebase your PR?

done


Wildcard MySQL Queries

Hi,
This isn't really an issue, but a suggestion (unless it is already available and I missed it in the docs). Say I wanted to do a search in a MySQL database. How can this be achieved? For instance, how would the following SQL query be done?
SELECT * FROM Customer WHERE firstName LIKE "%Austin%";
As far as I know, you can only do exact searching, like in the following example:

Thank you in advance. If this is not yet a feature, it would be awesome to add it in the future. :)

Hi @amkomatzftx,
This should be possible with something like:
try conn.select()
    .all()
    .from(Planet.self)
    .where(\Planet.name, .like, "%Earth%")
    .all(decoding: Planet.self)
    .wait()

We could consider offering an operator for this (something like ~~) to provide better parity with ==. In Fluent, we have the following operators:

op
value

~=
"%string"

=~
"string%"

~~
"%string%"

Ahh, I see. Thank you very much.


Suggestion: Supplemental Usage info and helpful tips for newer users

After some fiddling around I did eventually get things to work as intended. At first, running the app as suggested with no query attached will attempt to read every "system:filetype is video" in your entire library. For users with +1000 webm/mp4 files this results in a queue several days long.  I found that adding arguments like --query="system:duration < 2s" were especially helpful for initial prototyping and later narrowing searches down. I suggest including this by default or at least mentioning it on the usage page.
I'd also like to suggest a few tips since few (if any) users have used the duplicate processing function for video files before now. Most of this is common knowledge but including it for context and clarity seems appropriate.

Most duplicate videos scraped from various boorus will be re-encoded or compressed copies (usually in webm format) that have been scraped from other websites that likely compressed it for streaming purposes. This process is lossy at best - resulting in progressively lower quality copies of the same file being distributed across these websites.
A source-quality file will almost always be a much larger size and/or higher bitrate mp4 or webm
When sorting files in the duplicate processor; be wary of same-quality alts or a creators updated/corrected release (usually dated the following month)
Many 3rd party edits will simply add or replace audio
Most booru style websites compress videos to webm, so finding the mp4 version of a video likely means it has not been compressed - indicating it is a source-quality file. This has been true in every instance I've found, but there may be websites that still re-encode videos in mp4
Occasionally some chad will take a source quality file and interleave it to a higher framerate with better compression settings/codec. This results in a source-quality video but with a perceived higher framerate. These versions can be smaller in filesize by as much as 30%!
Most authors distribute higher quality versions of their content to paid supporters, usually omitting their watermark. Files without watermarks are almost always higher quality as a result.

Thanks for the suggestions.
The defaults should remain as simple as possible. By adding more constraining defaults, I would need to add a parameter to remove defaults which makes people have to read more documentation, read more of the --help, etc. I want things to be as simple, and more importantly as straightforward as possible. There is no magic here; if you have 100k video files you will have to hash all of them if you want to sort them all for duplicates. How you choose to do that is and should be up to you.
I would like to improve the chunking while processing, more specifically the perceptual hashing. But those improvements would probably be silent to the user. There's no getting around hashing the videos you want to hash. But, if there are issues with things like running out of memory, crashes, etc that would be a legitimate concern and should be reported to me with as much information as possible.
I will add some tips about video comparison, but really it's just if one looks better than the other then archive that.  People who care more about what videos they want to save probably have already invested the time into learning those things. The Hydrus duplicates page already has far more information than I would like to write. I'll add a link to it in Usage or the FAQ.
What fiddling around did you have to do to get the program working if you remember? I want the documentation to be as clear as possible since people already have to go through the hassle of installing WSL. I will probably end up adding a script to install WSL and the program for users who just want it to work.

I want the documentation to be as clear as possible since people already have to go through the hassle of installing WSL. I will probably end up adding a script to install WSL and the program for users who just want it to work.

Yeah, that might be helpful. Nothing I've tried to do has allowed me to run this under WSL. I absolutely cannot seem to get a functioning version of Python above 3.9 on Ubuntu 20.04.

Yeah, that might be helpful. Nothing I've tried to do has allowed me to run this under WSL. I absolutely cannot seem to get a functioning version of Python above 3.9 on Ubuntu 20.04.

Try this guide. Ubuntu should come with Python 3.10 by default though, so I'm guessing you installed your distro a while ago?
I can't stand Ubuntu's package management (and therefore 99% of Ubuntu) so I probably can't help you much past that.

In regards to WSL

You need to disable NTFS compression on the folder C:\Users\username\AppData\Local\Temp Otherwise networking may not initialize. Dunno if this bug was fixed or not.
If you don't use WSL very often and get errors trying to install dependencies; It's because you haven't apt-get install update&upgrade in a while
SSL error upon launch was due to the program preferring HTTPS over HTTP (which it should) Enable HTTPS in the Hydrus client-api settings

In regards to WSL
* You need to disable NTFS compression on the folder C:\Users\username\AppData\Local\Temp Otherwise networking may not initialize. Dunno if this bug was fixed or not.

* If you don't use WSL very often and get errors trying to install dependencies; It's because you haven't apt-get install update&upgrade in a while

* SSL error upon launch was due to the program preferring HTTPS over HTTP (which it should) Enable HTTPS in the Hydrus client-api settings

Interesting. I've always read that it's not good to use NTFS compression in general for a number of reasons, so I've never tried it, ESPECIALLY on entire drives. I don't trust it. Check out this project to compress specific directories if you're interested, it's really good!
I'll tell users to update and upgrade before installation like every other program does.
SSL is already on the Wiki under Usage, but I just added a second bullet clarifying.

Try this guide.

I did try deadsnakes. Got 3.10 installed, but couldn't get it to work. Couldn't get pip to install to it.

I'm guessing you installed your distro a while ago?

A few years, actually.

I'll tell users to update and upgrade before installation like every other program does.

I did that, too. Didn't advance Python versions for me. sudo apt update && sudo apt upgrade -y


Add button to enable/disable storage pool

Description:
CloudStack API does support to enable/disable Storage pools via command updateStoragePool; however, neither the legacy UI nor CloudStack Primate add such action button.
With that said, this PR adds a button to call the  updateStoragePool API command with the enabled parameter set to true (for enabling) or false (Disabling).
Screenshots:
Storage enabled

added pause-circle button

Pop-up so ADMIN can cancel or proceed with operation

Storage disabled

added play-circle button

Pop-up so ADMIN can cancel or proceed with operation

@blueorangutan package

@GabrielBrascher a Jenkins job has been kicked to build primate packages. I'll keep you posted as I make progress.

Packaging result: :heavy_check_mark:centos :heavy_check_mark:debian :heavy_check_mark:archive.
QA: http://primate-qa.cloudstack.cloud:8080/client/pr/874 (JID-3699)

@blueorangutan package

@GabrielBrascher a Jenkins job has been kicked to build primate packages. I'll keep you posted as I make progress.

Thanks for the review @davidjumani! Code has been updated.

Packaging result: :heavy_check_mark:centos :heavy_check_mark:debian :heavy_check_mark:archive.
QA: http://primate-qa.cloudstack.cloud:8080/client/pr/874 (JID-3706)


Support matrices of user-defined types better.

Do the equivalent of https://github.com/d-gamedev-team/gfm/commit/e9f0635567b8b7ad58092fd44f6d0a0fb02d88ed for matrices too.
Generally the is expression should be replaced by the corresponding std.trait

Seems to work with 59bf10ac21d55614afe4850b22028928abf6a089


Added "-D__STDC_FORMAT_MACROS" flag to the cmake build system. Appare…

…ntly we need this flag to get Legion built on some systems

This is related to the issue:
https://github.com/StanfordLegion/legion/issues/181

@ipdemes : I don't think this will work.  On the systems with this issue, this define must be set before
the first #include of inttypes.h, which may come before any legion header is parsed in an application
that includes other headers.  I'm pretty sure it needs to be on the compilation command line for
application source files to work in all cases.

I think legion should define __STDC_FORMAT_MACROS in the headers, which use inttype.h and friends.

@junghans That's what we started with.  It works as long as the application code that is including legion.h hasn't already included inttypes.h (directly or indirectly).  The __STDC_FORMAT_MACROS macro must be defined before the first include of inttypes.h, no matter where it is, and a command line parameter is the only way to guarantee that.

You could error out if  _INTTYPES_H is defined without __STDC_FORMAT_MACROS before including inttypes.h in runtime/legion/legion_utilities.h. Something like:
#ifndef __STDC_FORMAT_MACROS
#ifdef  _INTTYPES_H
#error Legion need to be build with -D__STDC_FORMAT_MACROS
#endif
#else
#define __STDC_FORMAT_MACROS
#endif
#include <inttypes.h>

Plus, with all these defines legion really needs a pkg-config file.

@streichler, @junghans  : this commit actually fixes an error we see without __STDC_FORMAT_MACROS on one of our clusters (Darwin). I think this works because legion_defines.h gets included before any other legion header file is included.  I have just double-checked it this morning.

I'll merge this for now, but it sounds like you're just getting lucky.  I'll look into fixing it "right"
(i.e. eliminating the need for this define in application code at all, unless it also uses the format
macros).

@streichler : thank you. Do you have any test/example in legion that might  break? I can try  to check it out with cmake.


proposal: slices: add CollectN with preallocated size.

Proposal Details
As discussed in #61900, it's a shame that slices.Collect(maps.Keys(m)) and slices.Sorted(maps.Keys(m)) don't preallocate the size of m. You can work around it by writing slices.Sorted(slices.Append(make([]T, 0, len(m)), maps.Keys(m))), but that's kind of ugly.
I propose adding func CollectN[S ~[]T, T any](seq iter.Seq[T], minsize int) S to slices that just returns Append(make([]T, 0, minsize), seq). It would help with map keys but also other container types where you know the length in advance or can at least make a good guess.
Sorting map keys more efficiently would look like keys := slices.CollectN(maps.Keys(m), len(m); slices.Sort(keys).

Sorting map keys more efficiently would look like keys := slices.CollectN(maps.Keys(m), len(m); slices.Sort(keys).

I guess we'd rather change the implementation of slices.Sorted to use CollectN internally? But maybe not.
That said, the function signature is not particularly nice. I guess (sorry, no evidence) that the majority of use cases is around the functions of maps.KeysSlice() and maps.ValuesSlice(). If that's the case, then remaining cases could be covered as above by:
slices.Append(make([]K,0, len(m)), seq)

Are there other wide-spread cases that need to be covered?

The name gives me more maxsize than minsize vibes.

ChatGPT suggests the name slices.CollectWithCapacity. Seems little long. CollectWithCap?

I guess we'd rather change the implementation of slices.Sorted to use CollectN internally? But maybe not.

I don't understand. Are you suggesting adding slices.SortedWithCap? It wouldn't be possible to use CollectWithCap internally since Sorted couldn't know the minimum length.
Sorted is just Collect+Sort, so I don't see the point of making a bunch of variations on it. If you need better Collecting, then use CollectWithCap, if not, use plain Sorted.

Are there other wide-spread cases that need to be covered?

I think this would be a good general purpose tool. You could use it with a hypothetical container/set type, for example, or if we ever genericize container/list and container/heap. I have a generic deque type I would have used this with if it had existed.

I have a generic deque type I would have used this with if it had existed.

I still assume (sorry), that we'll have 90% maps keys/values.

I am rehashing arguments that have already been made, but this whole API which is more mental load on the programmer and more places to make mistake wouldn't need to exists if the iter form was an interface instead of a function then we could extend it conditionally:
package iter

type Seq[V any] interface {
	Iter(yield func(V) bool)
}
type Seq2[K, V any] interface {
	Iter(yield func(K, V) bool)
}

// Len can be implemented by [Seq] and [Seq2] as optional features.
type Len interface {
	// Len returns how many calls to yield Iter will do if ok == true.
	// To be a correct implementation it MUST do n many calls, no more no less.
	// When ok == false the length is not known.
	Len() (n int, ok bool)
}

// Cap can be implemented by [Seq] and [Seq2] as optional features.
type Cap interface {
	// Cap returns how many calls to yield Iter could do if ok == true.
	// To be a correct implementation it MUST do at most n many calls, no more.
	// When ok == false the capacity is not known.
	Cap() (n int, ok bool)
}

package slices

import "iter"

func Collect[V any](i iter.Seq[V]) []V {
	var sizeHint int
	var hasSizeHint bool
	if l, ok := i.(iter.Len); ok {
		sizeHint, hasSizeHint = l.Len()
	}
	if !hasSizeHint {
		if l, ok := i.(iter.Cap); ok {
			sizeHint, hasSizeHint = l.Cap()
		}
	}
	if !hasSizeHint {
		sizeHint = 0
	}
	r := make([]V, 0, sizeHint)
	for v := range i {
		r = append(r, v) // if you actually submitted this code to std you probably would want hardening against buggy iterators that return wrong .Len and .Cap.
	}
	return r
}

Having it be optionally implemented would make this so much better, and more generally anything where you sometime can do some extra optimizations if you know the size ahead of time.

@Jorropo

I am rehashing arguments that have already been made

Please don't.
@fzipp @earthboundkid I would suggest the name "hint" or "sizehint" for the parameter, as it takes the same role as the size hint parameter for make with maps: It has no impact on the semantics or correctness of the program, but makes it more efficient if given correctly.

Like @fzipp above, to me the name CollectN suggests "collect up to N elements into a slice."
And as others have observed we can already do this using slices.AppendSeq.
I think this function  might be premature at this point.

If an iterator must be used, consider adding a slices.CollectInto function for preallocation need.

@zigo101 That sounds like the existing slices.AppendSeq.

I think it would be okay to put this proposal on hold for six months while we get used to using iterators in production.

@earthboundkid You can use nstd.CollectMapKeys now. :D

That's sort of what I mean. We can just use our personal iteration libraries for six months or so then regroup and see if we mostly want CollectWithCap (because we need to collect a lot of other containers into slices) or mostly want maps.KeySlice or maps.KeysSorted etc. based on real world usage. It's a little theoretical for now, although I have started doing some stuff with x/net/html iterators in production.

It might be a bad idea to put "slices.Collect" in std.

Imho it is very unfortunate that something as simple and often used as exp/maps/Keys() should become something as unobvious
keys := slices.CollectN(maps.Keys(m), len(m))

Majority of use cases is probably better addressed adding dedicated functions for maps.Keys and slices.Values.

If the main concern is about efficiently iterating over sorted keys of a map (and possibly its associated values), wouldn't it be addressed by the addition of the following functions (only with perhaps better names) to the maps package?
func Sorted[M ~map[K]V, K cmp.Ordered, V any](m M) iter.Seq2[K, V] {
	return func(yield func(K, V) bool) {
		// We can do better than slices.Sorted(maps.Keys(m))
		// since we already know the number of keys.
		keys := make([]K, 0, len(m))
		for k := range m {
			keys = append(keys, k)
		}
		slices.Sort(keys)
		for _, k := range slices.Sorted(maps.Keys(m)) {
			if !yield(k, m[k]) {
				return
			}
		}
	}
}

func SortedFunc[M ~map[K]V, K comparable, V any](m M, cmp func(K, K) int) iter.Seq2[K, V] {
	return func(yield func(K, V) bool) {
		// We can do better than slices.SortedFunc(maps.Keys(m), cmp)
		// since we already know the number of keys.
		keys := make([]K, 0, len(m))
		for k := range m {
			keys = append(keys, k)
		}
		slices.SortFunc(keys, cmp)
		for _, k := range keys {
			if !yield(k, m[k]) {
				return
			}
		}
	}
}

func SortedStableFunc[M ~map[K]V, K comparable, V any](m M, cmp func(K, K) int) iter.Seq2[K, V] {
	return func(yield func(K, V) bool) {
		// We can do better than slices.SortedStableFunc(maps.Keys(m), cmp)
		// since we already know the number of keys.
		keys := make([]K, 0, len(m))
		for k := range m {
			keys = append(keys, k)
		}
		slices.SortStableFunc(keys, cmp)
		for _, k := range keys {
			if !yield(k, m[k]) {
				return
			}
		}
	}
}

The need for slices.CollectN would become moot, IMO.


External dependencies upgrade - Spring Boot 2.7.9 and Spring Cloud 2021.0.5

Updates external dependencies to align with Spring Boot version 2.7.9 from 2.7.8 and Spring Cloud version 2021.0.5 from 2021.0.5.
Release notesSourced from spring-boot releases.   🐞  Bug Fixes Maven Plugin's PropertiesMergingResourceTransformer closes InputStream when it should not do so #34063 Actuator Health web endpoint broken with Gson and Java 17 #34030 Dependency management for Mongo's Java Driver is incomplete #33941 Using devtools with Reactive application results in slower restarts #33855 Spies are not reset after test execution when using @SpyBean #33830 Properties Migrator does not detect properties of Map type that are marked as deprecated #27854   📔  Documentation Updated documentation for @ConfigurationProperties bean naming rules #34029 Restore "Use Jedis Instead of Lettuce" how-to documentation #33994 Add Redis application properties example #33965 Use Maven Central for release downloads in CLI installation documentation #33962 Actuator section is missing from documentation overview #33932 Add Javadoc since to OperationParameter.getAnnotation() #33914 Document additional configuration that is required for spring.mvc.throw-exception-if-no-handler-found=true to be effective #31660   🔨  Dependency Upgrades Upgrade to ActiveMQ 5.16.6 #34238 Upgrade to Byte Buddy 1.12.23 #34239 Upgrade to Dropwizard Metrics 4.2.16 #34240 Upgrade to Elasticsearch 7.17.9 #34241 Upgrade to Glassfish JAXB 2.3.8 #34242 Upgrade to Groovy 3.0.15 #34243 Upgrade to Hibernate 5.6.15.Final #34244 Upgrade to Jackson Bom 2.13.5 #34245 Upgrade to Jaybird 4.0.9.java8 #34246 Upgrade to Lombok 1.18.26 #34247 Upgrade to Micrometer 1.9.8 #34141 Upgrade to Netty 4.1.89.Final #34248 Upgrade to Reactor Bom 2020.0.28 #34142 Upgrade to Spring AMQP 2.4.10 #34321 Upgrade to Spring Batch 4.3.8 #34143 Upgrade to Spring Data Bom 2021.2.8 #34144 Upgrade to Spring HATEOAS 1.5.3 #34249 Upgrade to Spring Security 5.7.7 #34145 Upgrade to Undertow 2.2.23.Final #34250
This PR is created by GitHub Actions: https://github.com/Azure/spring-cloud-azure-tools/actions/runs/4277661242

@alzimmermsft please help take a look

/check-enforcer-override

/check-enforcer override


Create a new theme: Adagio

Create a new theme: Adagio

What you are providing in your git repo is not a theme, but rather a full hexo site.
A theme repo should only contain the folder adagio in your current repo


README need to be updated

log rotation section is out of date, since https://github.com/lestrrat/go-file-rotatelogs has been updated and exported new APIs.
For example:
rotatelogs.New("/path/to/access_log.%Y%m%d%H%M")

fixed in v2.3


Array of enums

This is probably not solvable, but a solution for an array of enums would be nice, right now it shows an array of ints.

Huh. Didn't even know this was possible knowing Enums can't be set as types anywhere else in GDScript. I'll put this on the planned feature list, though. Thank you!

I do not know if it's possible, I just threw this in.

Export hint strings for enum arrays contain all enum values, sooooooo... 😉

Ping!


⚠ Bofrost.lu has degraded performance

In 2af5c3d, Bofrost.lu (https://www.bofrost.lu) experienced degraded performance:

HTTP code: 200
Response time: 1206 ms

Resolved: Bofrost.lu performance has improved in 1942ff9.


How to get the most deterministic and consistent output

Hello, I'm using llama-cpp-python on colab free with Mistral-7B GGUF fine-tuned variations.
I need to have the most determined and consistent output every time with the same prompt because my use cases are simple multi-shots.
Prompt example:
Do this and that according to my requests.

Q: case
A: desired result
Q: case
A: desired result
Q: case
A: desired result
Q: case
A:

I tried temp 0, top_k=1, top_p=0, and fixed seed as below. But the output is different every time.
from llama_cpp import Llama
llm = Llama(
    model_path= model_path,
    # n_batch=n_batch,
    n_threads=2, # CPU cores
    n_batch=4096, # Should be between 1 and n_ctx, consider the amount of VRAM in your GPU.
    n_gpu_layers=50, # Change this value based on your model and your GPU VRAM pool.
    n_ctx=4096, # Context window
    verbose=True,
    seed=42,
    use_mlock=True,
    temperature=0,
    top_k=1,
    top_p=0,
)

output = llm(prompt, max_tokens=2048, stop=["Q:"], echo=False)

What exactly are the parameters for consistent output with no creativity?

that's probably because you set the parameters in the model loading part.. try something like the following:
from llama_cpp import Llama

model_path = 'mistral-7b-instruct-v0.1.Q4_K_M.gguf'

llm = Llama(
    model_path=model_path,
    # n_batch=n_batch,
    # n_threads=2, # CPU cores
    n_batch=4096, # Should be between 1 and n_ctx, consider the amount of VRAM in your GPU.
    n_gpu_layers=-1, # Change this value based on your model and your GPU VRAM pool.
    n_ctx=4096, # Context window
    verbose=True,
    use_mlock=True,
)

prompt = '[INST] hi there, write me 3 random quotes [/INST]'

output = llm(prompt, max_tokens=2048, echo=False, temperature=0, seed=42)

print(output["choices"][0]["text"].strip())

temp=0 should be enough btw, you shouldn't need a seed


easy-rsa 3.0 by default for FreeBSD

easy-rsa2 was removed from FreeBSD ports tree, see:
https://svnweb.freebsd.org/ports?view=revision&revision=r504939
switch to easy-rsa 3, tested on FreeBSD 12.0-RELEASE, FreeBSD 13-CURENT

Thansk for the PR @olevole. Could you add the supported FreeBSD versions into the metadata.json?

@olevole can you take a look at the failing spec tests?

@bastelfreak Yeah, I have already seen. It takes some work, I'm in the process


Fix all recommended Lighthouse checks

      // TODO: Fix all recommended Lighthouse checks

https://github.com/tugrulates/blog-code/blob/22d1c4b24ce5478f5f067c882507640b04722b7c/tests/lighthouserc.js#L10

Fixed all except staggered loads for JS. I will get to performance issues later. Here is the current batch of improvements:
#101,  #120 contrast fixes
#104, #109 more a11y
#119, #123 security headers


cannot get the child controls

I am trying with pywinauto to work with SAP...
Through the code below, successfully connect with the app and the tab area in the BOM dialog could be found
import pywinauto
from pywinauto.application import Application

app = Application().connect(title_re=".*SAP Logon.*")
bom_dlg = app.window(title_re=".*BOM.*")
bom_dlg.print_control_identifiers(depth=2)
bottom = bom_dlg[u'Afx:5DF50000:1008']
bottom.draw_outline()

Then to get the controls under the tab area, I tried to print out the child elements with
bottom.print_control_identifiers(depth=2)
it gives out
Afx:5DF50000:1008 - ''    (L615, T197, R1292, B631)
<pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B37C30>
[u'', u'1', u'0', u'Afx:5DF50000:1008']
child_window(class_name="Afx:5DF50000:1008")
   |
   | Custom Container Class - 'Custom  Container'    (L618, T205, R1289, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B37B50>
   | [u'Custom  Container', u'Custom  Container1', u'Custom Container Class1', u'Custom Container Class0', u'Custom Container Class', u'Custom  ContainerCustom Container Class0', u'Custom  ContainerCustom Container Class1', u'Custom  Container0', u'Custom  ContainerCustom Container Class']
   | child_window(title="Custom  Container", class_name="Custom Container Class")
   |
   | Shell Window Class - 'Control  Container'    (L618, T205, R1289, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B37790>
   | [u'Control  ContainerShell Window Class1', u'Control  ContainerShell Window Class0', u'Shell Window Class1', u'Shell Window Class0', u'Shell Window Class', u'Control  ContainerShell Window Class', u'Control  Container', u'Control  Container1', u'Control  Container0']
   | child_window(title="Control  Container", class_name="Shell Window Class")
   |
   | AfxOleControl100 - ''    (L618, T205, R1289, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B37F70>
   | [u'AfxOleControl1000', u'AfxOleControl1001', u'2', u'AfxOleControl100']
   | child_window(class_name="AfxOleControl100")
   |
   | AfxMDIFrame100 - ''    (L618, T205, R1289, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B37FD0>
   | [u'AfxMDIFrame100', u'3']
   | child_window(class_name="AfxMDIFrame100")
   |
   | AfxFrameOrView100 - ''    (L618, T205, R772, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B377D0>
   | [u'4', u'AfxFrameOrView1001', u'AfxFrameOrView1000', u'AfxFrameOrView100']
   | child_window(class_name="AfxFrameOrView100")
   |
   | Custom Container Class - 'Custom  Container'    (L618, T205, R772, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B377F0>
   | [u'Custom Container Class2', u'Custom  ContainerCustom Container Class2', u'Custom  Container2']
   | child_window(title="Custom  Container", class_name="Custom Container Class")
   |
   | Shell Window Class - 'Control  Container'    (L618, T205, R772, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B37830>
   | [u'Control  ContainerShell Window Class2', u'Shell Window Class2', u'Control  Container2']
   | child_window(title="Control  Container", class_name="Shell Window Class")
   |
   | AfxOleControl100 - ''    (L618, T205, R772, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B37870>
   | [u'AfxOleControl1002', u'5']
   | child_window(class_name="AfxOleControl100")
   |
   | SAPTreeList - 'SAP's Advanced Treelist'    (L619, T206, R771, B604)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B37450>
   | [u'SAPTreeList', u"SAP's Advanced Treelist", u"SAP's Advanced TreelistSAPTreeList"]
   | child_window(title="SAP's Advanced Treelist", class_name="SAPTreeList")
   |
   | ScrollBar - ''    (L619, T604, R754, B621)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B378B0>
   | [u'6', u'ScrollBar']
   | child_window(class_name="ScrollBar")
   |
   | AfxFrameOrView100 - ''    (L776, T205, R1289, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B378F0>
   | [u'7', u'AfxFrameOrView1002']
   | child_window(class_name="AfxFrameOrView100")
   |
   | Custom Container Class - 'Custom  Container'    (L776, T205, R1289, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B37930>
   | [u'Custom  ContainerCustom Container Class3', u'Custom Container Class3', u'Custom  Container3']
   | child_window(title="Custom  Container", class_name="Custom Container Class")
   |
   | Shell Window Class - 'Control  Container'    (L776, T205, R1289, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B37390>
   | [u'Control  ContainerShell Window Class3', u'Shell Window Class3', u'Control  Container3']
   | child_window(title="Control  Container", class_name="Shell Window Class")
   |
   | SAPImage - ''    (L776, T205, R1289, B622)
   | <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x04B2B0F0>
   | [u'8', u'SAPImage']
   | child_window(class_name="SAPImage")

To access the child, I tried several methods,

getitem

bottom[u'AfxOleControl1000'].draw_outline()

it raise error:
  File "C:\usr\work\SAPScript\pywinauto\test_pywinauto.py", line 32, in <module>
    bottom[u'AfxOleControl1000'].draw_outline()
  File "c:\usr\Python27\lib\site-packages\pywinauto\application.py", line 304, in __getitem__
    raise AttributeError(message)
AttributeError: The control does not have a __getitem__ method for item access (i.e. ctrl[key]) so maybe you have requested this in error?

child_window

Traceback (most recent call last):
  File "C:\usr\work\SAPScript\pywinauto\test_pywinauto.py", line 32, in <module>
    bottom.child_window(class_name="AfxOleControl100").draw_outline()
  File "c:\usr\Python27\lib\site-packages\pywinauto\application.py", line 346, in __getattribute__
    ctrls = self.__resolve_control(self.criteria)
  File "c:\usr\Python27\lib\site-packages\pywinauto\application.py", line 239, in __resolve_control
    raise e.original_exception
pywinauto.findwindows.ElementNotFoundError: {'class_name': 'AfxOleControl100', 'top_level_only': False, 'parent': <pywinauto.win32_element_info.HwndElementInfo object at 0x04A262F0>, 'backend': u'win32'}

Even tried to get the child control_id and find with it, cannot find it also.

for child in bottom.children():
    pywinauto.findwindows.find_element(control_id=child.control_id(), parent=bom_dlg).draw_outline()

  File "C:\usr\work\SAPScript\pywinauto\test_pywinauto.py", line 38, in <module>
    pywinauto.findwindows.find_element(control_id=child.control_id()).draw_outline()
  File "c:\usr\Python27\lib\site-packages\pywinauto\findwindows.py", line 87, in find_element
    raise ElementNotFoundError(kwargs)
pywinauto.findwindows.ElementNotFoundError: {'control_id': 92062304}

Any idea on what's wrong with my code or any workaround to get the controls?

I'm having a lot of similar problems with a competing windows financial system.
Even "print_control_identifiers()" crashes on me.
My temporary solution. Ignore the children where I don't have access by catching all errors.
    mywin = findwindows.find_windows(title='REMOVEDNAMEOFSOFTWARE')

    if not mywin:
        print('Software not found.')
        continue

    for handle in mywin:
        print('\nhandle {}'.format(handle))
        try:
            app = Application().connect(handle=handle)
            mywin = app.window(handle=handle)
        except (pywintypes.error, RuntimeError) as e:
            # runtimerror if handle does not exist
            print ('{}'.format(e))
            continue

        try:
            print(mywin)
            print(mywin.texts())
            restore = False

            for x in mywin.descendants():
                for y in x.texts():
                    print(y)
                if 'SEARCHTEXT REMOVED' in x.texts()[0]:
                    print('OK')
                    restore = True
        except InvalidWindowHandle as e:
            print ('{}'.format(e))
            pass

@hastelloy,  a window spec chain that you try tor create for accessing the u'AfxOleControl1000' control is too long. The main principle is "Dialog->Control" but in you case you created "Dialog->control->control".  (bom_dlg[u'Afx:5DF50000:1008'][u'AfxOleControl1000']) This is why you get the exception.  Try to access your control directly through the dialog: bom_dlg[u'AfxOleControl1000']

@mborus
your temp solution doesn't work for me because most of the texts of the controls are empty and I cann't find the control through this
@airelil
'bom_dlg[u'AfxOleControl1000'].draw_outline()'
Traceback (most recent call last):
  File "C:\usr\work\SAPScript\pywinauto\test_pywinauto.py", line 33, in <module>
    bom_dlg[u'AfxOleControl1000'].draw_outline()
  File "c:\usr\Python27\lib\site-packages\pywinauto\application.py", line 346, in __getattribute__
    ctrls = self.__resolve_control(self.criteria)
  File "c:\usr\Python27\lib\site-packages\pywinauto\application.py", line 239, in __resolve_control
    raise e.original_exception
pywinauto.findbestmatch.MatchError: Could not find 'AfxOleControl1000' in '[u'', u'ComboBox', u'Afx:5DF50000:8:00010003:00000010:00000000', u'1', u'0', u'3', u'2', u'AfxWnd100', u'4', u'7', u'6', u'9', u'5', u'Afx:5DF50000:1008', u'Afx:5DF50000:0:00010003:00000010:00000000', u'Edit', u'Button', u'AfxWnd1001', u'AfxWnd1000', u'AfxWnd1002', u'Button2', u'Button1', u'Button0', u'8', u'10', u'Afx:5DF50000:8:00010003:00000000:00000000']'

BTW
What is the right way to find a control in a complicated window except print_control_identifiers and draw_outline
FYI
below code is what recorded by the internal VBS recorder in SAP. Is this helpful for providing any information?
session.findById("wnd[0]/usr/tabsTABSTRIP_TBL/tabpTAB1/ssub%_SUBSCREEN_TBL:ZENGR_REP001_RELEASED_BOM:9001/chkP_MLVL").selected = true session.findById("wnd[0]/usr/tabsTABSTRIP_TBL/tabpTAB1/ssub%_SUBSCREEN_TBL:ZENGR_REP001_RELEASED_BOM:9001/ctxtS_MATNR-LOW").text = WScript.Arguments(0)
first line is for the 'Multilevel' checkbox
the second for the editbox of 'Material'

@hastelloy, maybe u'5'? It seems as it has been listed by print_control_identifiers in your first comment and in your last exception message.
Usually we use Inspect.exe utility from Ms to examine the controls hierarchy. It works in the native and UI Automation mode. So you can check which mode works better for your application and use the appropriate pywinauto backend (win32 or UIA)
PS: I suppose you work with pywinauto. 0.6

Hi @hastelloy, thanks for reporting this. It looks like a bug for me, but I need to investigate it in more details. I can try similar thing on our samples. But if you were provided simple MFC app reproducing exactly the same problems, it would be faster on our side.
@airelil just to be more precise... Inspect.exe can work in MSAA and UIA mode. MSAA is not the same as backend="win32" in pywinauto. Win32 controls can be examined with Spy++ tool shipped with Visual Studio (can be found through Start menu).

PS: I suppose you work with pywinauto. 0.6

depth=2 is not present in 0.5.4. So it's probably 0.6.0 or master branch at some moment.

@airelil @vasily-v-ryabov
tried with u'2' (corresponding to u'AfxOleControl1000'), it is not any control within the tab box,
anyway, u'AfxOleControl1000' should also be searchable since it is the identifier too, right?

Poor me... the SAP app is installed in company PC with strict IT restrictions (thanks for the great company, great productivity...) so got no chance to install Windows SDK to have Inspect.exe (could it be possible to have a standalone exe without the SDK?) . I searched another similar one Automation Spy. No controls could be found from the panel also.

Yes, I am using 0.60 through pip.
Will try to play with some other simple app to see if it could be reproduced...

could it be possible to have a standalone Inspect.exe without the SDK?

It can be copied from another machine. Standalone executable should work without any additional dlls.

got Inspect.exe, should be those control are not standard MFC controls? If it is true, I can only come back to use python calling the internal VBS recorded.
How found:	Focus
	hwnd=0x0001053E 32bit class="Afx:61EF0000:1008" style=0x56100000 ex=0x10
RuntimeId:	"[42.66878]"
BoundingRectangle:	{l:726 t:232 r:1322 b:619}
ProcessId:	5520
ControlType:	UIA_PaneControlTypeId (0xC371)
LocalizedControlType:	"pane"
Name:	""
AcceleratorKey:	[Not supported]
AccessKey:	""
HasKeyboardFocus:	true
IsKeyboardFocusable:	true
IsEnabled:	true
AutomationId:	"100"
ClassName:	"Afx:61EF0000:1008"
HelpText:	""
ClickablePoint:	[Not supported]
Culture:	[Not supported]
IsControlElement:	[Not supported]
IsContentElement:	[Not supported]
LabeledBy:	[Not supported]
IsPassword:	false
NativeWindowHandle:	0x1053E
ItemType:	[Not supported]
IsOffscreen:	false
Orientation:	[Not supported]
FrameworkId:	"Win32"
IsRequiredForForm:	[Not supported]
ItemStatus:	[Not supported]
AriaRole:	[Not supported]
AriaProperties:	[Not supported]
IsDataValidForForm:	[Not supported]
ControllerForProperty:	[Not supported]
DescribedBy:	[Not supported]
FlowsTo:	[Not supported]
ProviderDescription:	"[pid:6036,hwnd:0x1053E Main:Nested [pid:5520,hwnd:0x1053E Annotation(parent link):Microsoft: Annotation Proxy (unmanaged:uiautomationcore.dll); Main:Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]; Nonclient:Microsoft: Non-Client Proxy (unmanaged:uiautomationcore.dll); Hwnd(parent link):Microsoft: HWND Proxy (unmanaged:uiautomationcore.dll)]"
Value.IsReadOnly:	[Not supported]
Value.Value:	[Not supported]
RangeValue.Value:	[Not supported]
RangeValue.IsReadOnly:	[Not supported]
RangeValue.Minimum:	[Not supported]
RangeValue.Maximum:	[Not supported]
RangeValue.LargeChange:	[Not supported]
RangeValue.SmallChange:	[Not supported]
Scroll.HorizontalScrollPercent:	0.000000
Scroll.HorizontalViewSize:	71.121718
Scroll.VerticalScrollPercent:	0.000000
Scroll.VerticalViewSize:	100.000000
Scroll.HorizontallyScrollable:	true
Scroll.VerticallyScrollable:	false
Selection.Selection:	[Not supported]
Selection.CanSelectMultiple:	[Not supported]
Selection.IsSelectionRequired:	[Not supported]
Grid.RowCount:	[Not supported]
Grid.ColumnCount:	[Not supported]
GridItem.Row:	[Not supported]
GridItem.Column:	[Not supported]
GridItem.RowSpan:	[Not supported]
GridItem.ColumnSpan:	[Not supported]
GridItem.ContainingGrid:	[Not supported]
Dock.DockPosition:	[Not supported]
ExpandCollapse.ExpandCollapseState:	[Not supported]
MultipleView.CurrentView:	[Not supported]
MultipleView.SupportedViews:	[Not supported]
Window.CanMaximize:	[Not supported]
Window.CanMinimize:	[Not supported]
Window.WindowVisualState:	[Not supported]
Window.WindowInteractionState:	[Not supported]
Window.IsModal:	[Not supported]
Window.IsTopmost:	[Not supported]
SelectionItem.IsSelected:	[Not supported]
SelectionItem.SelectionContainer:	[Not supported]
Table.RowHeaders:	[Not supported]
Table.ColumnHeaders:	[Not supported]
Table.RowOrColumnMajor:	[Not supported]
Table.ItemRowHeaderItems:	[Not supported]
Table.ItemColumnHeaderItems:	[Not supported]
Toggle.ToggleState:	[Not supported]
Transform.CanMove:	[Not supported]
Transform.CanResize:	[Not supported]
Transform.CanRotate:	[Not supported]
IsDockPatternAvailable:	false
IsExpandCollapsePatternAvailable:	false
IsGridItemPatternAvailable:	false
IsGridPatternAvailable:	false
IsInvokePatternAvailable:	false
IsMultipleViewPatternAvailable:	false
IsRangeValuePatternAvailable:	false
IsScrollPatternAvailable:	true
IsScrollItemPatternAvailable:	false
IsSelectionItemPatternAvailable:	false
IsSelectionPatternAvailable:	false
IsTablePatternAvailable:	false
IsTableItemPatternAvailable:	false
IsTextPatternAvailable:	false
IsTogglePatternAvailable:	false
IsTransformPatternAvailable:	false
IsValuePatternAvailable:	false
IsWindowPatternAvailable:	false
IsItemContainerPatternAvailable:	false
IsVirtualizedItemPatternAvailable:	false
FirstChild:	[null]
LastChild:	[null]
Next:	(null) title bar
Previous:	"Please enter Material No." pane
Other Props:	Object has no additional properties
Children:	Container has no children
Ancestors:	"Released BOM Printout" window
	"Desktop" pane
	[ No Parent ]

One interesting thing, class of the tab panel looks like dynamic, but it is still assessible with the old class name, with the code
bom_dlg = app.window(title_re=".*BOM.*")
bom_dlg.print_control_identifiers(depth=2)
bottom = bom_dlg[u'Afx:5DF50000:1008']
# bottom.draw_outline()
bottom.print_control_identifiers(depth=2)

it prints out
Afx:61EF0000:1008 - ''    (L726, T232, R1322, B619)
<pywinauto.controls.hwndwrapper.HwndWrapper object at 0x0497E570>
[u'', u'Afx:61EF0000:1008', u'1', u'0']
child_window(class_name="Afx:61EF0000:1008")
   |
   | Custom Container Class - 'Custom  Container'    (L729, T240, R1316, B613)
   |  ....

__getitem__ access uses "best match" algorithm which is resistant to typos and small variations. bom_dlg[u'Afx:5DF50000:1008'] is an equivalent of bom_dlg.child_window(best_match=u'Afx:5DF50000:1008'). It can be matched against changed but similar class name.
Can you get the edit boxes and check boxes using Inspect.exe?

ok, best_match do a great job.

Can you get the edit boxes and check boxes using Inspect.exe?

No, can't. Maybe those are customized GUI controls and can't be recoginzed. Here I found an introduction on the SAP GUI.

@hastelloy, my guess is that you don't see any child controls because they are not belongs to the main application process. Maybe you should try to look around for other processes. Such as another SAP app or a explorer.exe

@hastelloy, any updates on it ?

@airelil, I have gone through all the processes, didn't find anything.
From the document of SAP, the area is called as GUIUserArea, my guess is the controls is encapsuled into this control and doesn't disclosed the child control as common. So this may due to some tricks of SAP, nothing to do with pywinauto...

OK, closing this since it's out of scope for accessibility technologies.


Upgrade add-on to Ember.js v5.8.1

Breaking
Upgrade add-on to ember-cli v5.8.1 (#190)
The new requirements are:

Ember.js v4.12 or above
Ember CLI v4.12 or above
Node.js v18 or above

Resolves #172 .
Closes #171 .
Closes #174 .
Closes #187 .
Closes #188 .
Closes #189 .

Can we move forward or I close this PR.


Type pop up blinking

When I hover over a variable or type, the pop up type information that is displayed blinks at the pace of the cursor blink.

Is it something different from what I see here, there is a blink on first hover :

Or are you getting consistent blinks i.e. it keeps blinking at the same pace as the cursor?

Same place under the cursor.  No time right now to capture it (what tool do you use btw?)

https://screentogif.codeplex.com/

I get this from time to time as well. Will see if I can reproduce on purpose.

Have this as well. Windows 8.1, Atom 0.189.0, atom-typescript 2.9.0.
Here is a gif of it happening:

Bas, instead of blink you should have implemented marquee.

Bas, instead of blink you should have implemented marquee.

blink was a feature. I don't know why people don't get it. But okay if you prefer marquee:

This post is meant for humor.

@filipesilva questions:

are you getting this reliably?
Is there a 1:1 relationship between the blink rate and the cursor blink rate as originally suggested (yours seems to be much faster than the cursor blink rate)

Things I've ruled out:

window not being in focus. Doesn't reproduce it.

dependent on theme: Doesn't reproduce it.

dependent on font size: Doesn't reproduce it.

I haven't got a reliable reproduction yet.

Yesterday I installed atom-typescript, and had this problem immediately. Tried restarting and disabling all community packages, but it still seems to happen.
It does not seem to be tied with cursor refresh rate though, but it's tied to an icon at the bottom right:

It does not seem to be tied with cursor refresh rate though,

Cool. Might be a rendering issue.

but it's tied to an icon at the bottom right:

That icon is there to show if there is any TS processing stuff going on. Since there is going to be a new request for every "get tooltip" query that is expected. Its likely (strong) correlation not causation, but thanks for testing again. PS: the icon only got added recently :heart:

Anything else you'd like me to look into, just say the word. I'm trying to get into TypeScript and this plugin is just awesome :p

@filipesilva thanks for the kind words mate.
Does this blinking happen to you consistently or only sometimes?

Consistently. In fact, I've always had it since I installed the plugin.
On Mon, Apr 6, 2015, 00:40 Basarat Ali Syed<EMAIL_ADDRESS>wrote:

@filipesilva https://github.com/filipesilva thanks for the kind words
mate.
Does this blinking happen to you consistently or only sometimes?
—
Reply to this email directly or view it on GitHub
https://github.com/TypeStrong/atom-typescript/issues/149#issuecomment-89869343
.

Consistently.

OS? Windows or mac or linux?

Windows 8.1
On Mon, Apr 6, 2015, 09:25 Basarat Ali Syed<EMAIL_ADDRESS>wrote:

Consistently.
OS? Windows or mac or linux?
—
Reply to this email directly or view it on GitHub
https://github.com/TypeStrong/atom-typescript/issues/149#issuecomment-89973951
.

Similar thing is happening for me as well.  I'm also on Windows 8.1 if that helps.

I have not been able to reproduce this on purpose as of yet, and my blinking rate is definitely not as fast as @filipesilva but it happens commonly. Will continue testing; however I'm on Windows 7.

I am on windows 8.1 in the office so I don't think there is a correlation. Hopefully this will fix itself over time if we don't get a good repro.

Looking at the repo where I copied this logic from to see if its been reported there and indeed it has : https://github.com/chaika2013/ide-haskell/issues/44
Fixed there by returning if last show location is same as this show location : https://github.com/chaika2013/ide-haskell/commit/0a587358cf6e77ad56f9847dc8c1457044054862
The real issue is why is mousemove getting triggered and now I suspect its just dust particles in the mice.

I've my mouse settings at a high sensitivity, but I happened to try with
the touch pad and the same thing happened.
On Tue, Apr 7, 2015, 06:42 Basarat Ali Syed<EMAIL_ADDRESS>wrote:

Looking at the repo where I copied this logic from to see if its been
reported there and indeed it has : chaika2013/ide-haskell#44
https://github.com/chaika2013/ide-haskell/issues/44
Fixed there by returning if last show location is same as this show
location : chaika2013/ide-haskell@0a58735
https://github.com/chaika2013/ide-haskell/commit/0a587358cf6e77ad56f9847dc8c1457044054862
The real issue is why is mousemove getting triggered and now I suspect
its just dust particles in the mice.
—
Reply to this email directly or view it on GitHub
https://github.com/TypeStrong/atom-typescript/issues/149#issuecomment-90371328
.

I can confirm it works :D


slow query: return the same slow queries

Bug Report
Please answer these questions before submitting your issue. Thanks!
What did you do?

What did you expect to see?
What did you see instead?

What version of TiDB Dashboard are you using (./tidb-dashboard --version)?

This issue happens in the old version of TiDB/PD, doesn't happen in the 4.0.0 GA version.

It doesn't reproduce again in the above cluster, weird. Leave it open to keep an eye on it.


uib-rating ignoring readonly property on mobile devices

For some obscure reasons, readonly attribute is producing  undefined when used in a Cordova wrapper.
To be sure that was an issue, I replaced readonly by test in my view & changed uib-rating isolated scope to :
readonly: '=test',

and everything seems to work fine, both on mobile and browser.
My tests were made on iOS (cordova) and I bet Cordova webview considers readonly attribute as a reserved one and makes it produce undefined when accessed if element is not an input/textarea.
Here's my config :

Angular 1.4.7
Angular bootstrap 1.1.1
Cordova 6 & Cordova-ios 4

I can't really provide a plunkr as it only happens inside a Cordova webview.
Thus I will also fill a Cordova-ios issue stating what I found, in case renaming readonly to something else, like read-only, is not imaginable.
Cheers,
Ugo.

I'm not against renaming it to read-only - it's dangerous using attributes that have special meaning in the browser.
Would you be interested in filing a PR to rename it? Would mainly require readonly: '=?readOnly', and slight adjustments in the unit tests.

I'm really interested to do so, but wouldn't readonly: '=?readOnly' break things for those who use readonly for now ?

It would be a breaking change, correct - that is why I scheduled it for the 1.2 release. It is a minor breaking change, which I'm ok with.

Will do it tomorrow or so then !

Just noting, we just released 1.1.2 - 1.2.0 is next on our plate, so if you want to tackle this, try doing this when you can sometime in the next few weeks (within 2 weeks preferable on the safe side).


GPTSimpleVectorIndex Throwing Error

I'm experience the same issue with GPTSimpleVectorIndex that appeared in issue 617, but was not resolved. I tried the same simple test with the Paul Graham essay using a LLM from huggingface.
Below is a minimum working example, note that if I use a list index instead of the simple vector index everything runs fine.
from llama_index import GPTSimpleVectorIndex, SimpleDirectoryReader, PromptHelper, LLMPredictor, ServiceContext
import torch
from langchain.llms.base import LLM
from transformers import pipeline
from typing import Optional, List, Mapping, Any

# define prompt helper
# set maximum input size
max_input_size = 512
# set number of output tokens
num_output = 512
# set maximum chunk overlap
max_chunk_overlap = 20
prompt_helper = PromptHelper(max_input_size, num_output, max_chunk_overlap)

class CustomLLM(LLM):
    model_name = "t5-small"
    pipeline = pipeline("text2text-generation", model=model_name, device="cuda:0", model_kwargs={"torch_dtype":torch.bfloat16})

    def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
        response = self.pipeline(prompt)[0]["generated_text"]

        # only return newly generated tokens
        return response

    @property
    def _identifying_params(self) -> Mapping[str, Any]:
        return {"name_of_model": self.model_name}

    @property
    def _llm_type(self) -> str:
        return "custom"

llm_predictor = LLMPredictor(llm=CustomLLM())

service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper)

documents = SimpleDirectoryReader('data').load_data()
index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)

@g-benton the vector index still defaults to using openAI to generate embeddings during the index construction.
To you have access to openAI? If you want to use lo al hughingface embeddings, see this guide:
https://gpt-index.readthedocs.io/en/latest/how_to/customization/embeddings.html#custom-embeddings
You can set the embedding model to be anything from huggingface

same here, with 0.5.6

@javixeneize see my answer above 👍🏻

hi. I think the problem is the doc has been updated to llama_index, but not all the methods have been ported yet. if i use gpt_index instead, it works

@javixeneize llama index has all the same methods, it's actually the same package.
pip install --upgrade llama_index langchain should get everything updated for you

Hi
No... Methods like ServiceContext are not in llamaindex

@javixeneize I think you have some env issues, works fine for me

I'm getting below error when I try to ask the question in the query engine
TypeError: 'method' object is not iterable

@AGRocky how did you create the query engine and query?


[Failing Test]:  beam_PreCommit_Java_GCP_IO_Direct high possibility timeout

What happened?
When not timing out, the test takes ~30-40 min; or it timing out after 2 hour: https://ci-beam.apache.org/job/beam_PreCommit_Java_GCP_IO_Direct_Cron/
From the log, in the cases of timeout, the task gets stuck early:
17:53:23 > Task :sdks:java:io:google-cloud-platform:expansion-service:distZip
17:53:48 > Task :sdks:java:io:google-cloud-platform:test
17:53:53 > Task :sdks:java:io:google-cloud-platform:expansion-service:shadowJar
17:54:03 > Task :sdks:java:io:google-cloud-platform:expansion-service:startShadowScripts
17:54:03 > Task :sdks:java:io:google-cloud-platform:expansion-service:shadowDistTar
17:54:11 > Task :sdks:java:io:google-cloud-platform:expansion-service:shadowDistZip
17:54:11 > Task :sdks:java:io:google-cloud-platform:expansion-service:assemble
17:54:11 > Task :sdks:java:io:google-cloud-platform:expansion-service:analyzeClassesDependencies
17:54:11 > Task :sdks:java:io:google-cloud-platform:expansion-service:analyzeDependencies
17:54:11 > Task :sdks:java:io:google-cloud-platform:expansion-service:test NO-SOURCE
17:54:11 > Task :sdks:java:io:google-cloud-platform:expansion-service:check
17:54:11 > Task :sdks:java:io:google-cloud-platform:expansion-service:build
19:52:33 Build timed out (after 120 minutes). Marking the build as aborted.

Particularly, :sdks:java:io:google-cloud-platform:test is executing but :sdks:java:io:google-cloud-platform:integrationTest not yet started. Likely some unit test having race conditions.
Issue Failure
Failure: Test is flaky
Issue Priority
Priority: 2 (backlog / disabled test but we think the product is healthy)
Issue Components

[ ] Component: Python SDK
[x] Component: Java SDK
[ ] Component: Go SDK
[ ] Component: Typescript SDK
[ ] Component: IO connector
[ ] Component: Beam examples
[ ] Component: Beam playground
[ ] Component: Beam katas
[ ] Component: Website
[ ] Component: Spark Runner
[ ] Component: Flink Runner
[ ] Component: Samza Runner
[ ] Component: Twister2 Runner
[ ] Component: Hazelcast Jet Runner
[ ] Component: Google Cloud Dataflow Runner

Found one timeout flaky test: org.apache.beam.sdk.io.gcp.bigquery.BigQueryIOWriteTest.testTriggeredFileLoadsWithTempTablesToExistingNullSchemaTable

Still occurring: https://ci-beam.apache.org/view/PostCommit/job/beam_PreCommit_Java_GCP_IO_Direct_Cron/864/
org.apache.beam.sdk.io.gcp.bigquery.BigQueryIOWriteTest.testTriggeredFileLoadsWithTempTablesToExistingNullSchemaTable[1] timeout after 10 min.
Though less frequent.

See a log message
NFO: Ignoring failed deletion of file /tmp/junit1629866381724064800/files00010 which already does not exist.
java.nio.file.NoSuchFileException: /tmp/junit1629866381724064800/files00010

may be conflicting with other tests that deleted this file, and causing pipeline stuck

reopen this for tracking the (now flaky) timeout test testTriggeredFileLoadsWithTempTablesToExistingNullSchemaTable[1]


bugfix for high frequency time series in scaling.py, regarding issue …

…1257

[ X ] Closes #1257
[ X ] I am familiar with the contributing guidelines
[ X ] Tests added
[ X ] Updates entries to docs/sphinx/source/api.rst for API changes.
[ X ] Adds description and name entries in the appropriate "what's new" file in docs/sphinx/source/whatsnew for all changes. Includes link to the GitHub Issue with :issue:`num` or this Pull Request with :pull:`num`. Includes contributor name and/or GitHub username (link with :ghuser:`user`).
[ X ] New code is fully documented. Includes numpydoc compliant docstrings, examples, and comments where necessary.
[ X ] Pull request is nearly complete and ready for detailed review.
[x] Maintainer: Appropriate GitHub Labels and Milestone are assigned to the Pull Request and linked Issue.

When passing pvlib.scaling._compute_wavelet a pandas timeseries with a time resolution faster than 1s, the use of .seconds to calculate the time series delta_t produced an overflow error. It occurs because .seconds only computes integer values of seconds. I added a computation including microseconds to account for fractional seconds in this case.

I'm going to push an additional commit proposing a slight refactor to scaling.wvm. I have a use case for having a separate computation of the variability reduction factors used by the WVM. In a recent conference paper I was looking at how to apply the WVM in reverse to increase the spatial resolution. While I'm not proposing we include that reverse case (until such time as someone is able to generate more comprehensive published results for it), having a computation of the VR available would make it possible to do that calculation on your own with minimal re-writing of WVM code to perform those calculations. It has no impact on the existing WVM calculation, but I did write a test for the proposed new function.
If putting this change here is inappropriate, or this is an unwanted change, we can just unwind this commit and stick with the bugfix above.

The refactor makes the main function more readable, IMO. I'd keep it and if it supports future capability, all the better.

Sounds good, I will fix the stickler errors and squash the commits then.

Sorry about that, I think I got it.

@cwhanse can you merge if this is ready?

thanks @jranalli

No problem, thanks for including it!


Cannot set scheduled refresh for dataset in power bi cloud

The main dashboard CCO Power BI Dashboard looks great.
Is there is a way to set scheduled refresh for dataset in power bi?
See screenshot as seen in power bi cloud.(https://app.powerbi.com/groups/me/settings/datasets)

Hi Satish,
By any chance were you able to got the solution for Scheduled refresh for CCO dashboard in Power BI service?
Till now I was refreshing the dataset in PBI Desktop, but I need to do it in PBI service but got stuck there due to this Dynamic dataset.
Any help would be really great!
Thanks,
Prashant


cmd/gofmt: on every run, gofmt will add an extra level of indent to comment

(This new issue extracts a sub-issue that was originally mentioned in https://github.com/golang/go/issues/5128#issuecomment-66076842. After investigating the cause, I've realized this issue is different and smaller in scope than the original issue #5128, that's why I'm making this new issue.)
An instance of gofmt not being idempotent. Repeatedly invoking gofmt will add a level of indent to the b string line each time:
http://play.golang.org/p/Pwn4cOHtMN
I've identified the root cause in go/printer package (therefore the bug affects cmd/gofmt, go/format and go/printer packages). It's due to an unhandled edge case in stripCommonPrefix func.
It happens when a comment block consists of a first line with /*, 1 or more blank lines, last line with */. The internal prefix variable ends up never being set to a correct value before being used (it's not set at all, so it always has  zero value, the empty string). See https://github.com/golang/go/issues/5128#issuecomment-72396821 for more details.
I already have a fix and test cases done locally, I will submit a CL that closes this issue shortly.

CL is ready for review at https://go-review.googlesource.com/3684.


Use output manager protocol

Not ready yet. Doesn't show disabled outputs.
~~https://cgit.freedesktop.org/wayland/wayland-protocols/tree/unstable/xdg-output/xdg-output-unstable-v1.xml~~

https://github.com/swaywm/wlr-protocols/pull/23

https://github.com/swaywm/wlr-protocols/pull/38


refactor: use git.RepoInfo for all git repo related config

Signed-off-by: Meng JiaFeng<EMAIL_ADDRESS>Pre-Checklist
Note: please complete ALL items in the following checklist.

[x] I have read through the CONTRIBUTING.md documentation.
[x] My code has the necessary comments and documentation (if needed).
[x] I have added relevant tests

Description

use git.RepoInfo for all git repo-related config
delete useless code

Related Issues
close #1322
New Behavior (screenshots if needed)


NIFI-12473 Delete removeByPattern Methods from Cache Services

Summary
NIFI-12473 Deletes the removeByPattern methods from the DistributedCacheClientService interface and implementing classes. Some Cache Client Services do not support the method, and instead throw exceptions. Current components do not use this method, so removing it does not have any impact on current references to Cache Client Services.
Tracking
Please complete the following tracking steps prior to pull request creation.
Issue Tracking

[X] Apache NiFi Jira issue created

Pull Request Tracking

[X] Pull Request title starts with Apache NiFi Jira issue number, such as NIFI-00000
[X] Pull Request commit message starts with Apache NiFi Jira issue number, as such NIFI-00000

Pull Request Formatting

[X] Pull Request based on current revision of the main branch
[X] Pull Request refers to a feature branch with one commit containing changes

Verification
Please indicate the verification steps performed prior to pull request creation.
Build

[X] Build completed using mvn clean install -P contrib-check

[X] JDK 21

Licensing

[ ] New dependencies are compatible with the Apache License 2.0 according to the License Policy
[ ] New dependencies are documented in applicable LICENSE and NOTICE files

Documentation

[ ] Documentation formatting appears as expected in rendered files

Thank you for cleaning this up.  +1 assuming the checks run clean.


Does it support UEFI for RHEL-8.3?

Hi there,
Does the osbuild-composer support building UEFI image of RHEL-8.3? I installed the image builder in a UEFI KVM virtual machine and built a vhd image. But it cannot boot up in UEFI firmware.
Version:
osbuild-composer                                            x86_64                                     20.1-1.el8
Thanks!

osbuild (this repo) does support that, but it think this is not yet wired up in osbuild-composer yet. I am moving the issue over to composer.


Linux Support

What
Add initial linux support.
How

Add conditional compilation sections to get around the difference in bridging on Linux and Apple Platforms.

Testing
No test changes, until we can compile the library on Linux (this requires more work in Swift Foundation), tests cannot be compiled to see the differences.

+1


request to follow SemVer/mention it in README

Do you follow Semantic Versioning http://semver.org? If yes, can this be mentioned in README? If not, can you consider it?

@technoweenie can you reply?

Sure, Semver would be nice :+1: But I also don't maintain this gem :)

@pboling What are your thoughts? I am for it.

I am absolutely in favor of SemVer 2.0 going forward, and will add a mention to the Readme.  It has become an invaluable tool with the advent of services like Depfu.
@technoweenie do you happen to know how to get in contact with @sferik or @mbleigh to transfer ownership of the gem on RubyGems.org?  We can't release a new version until we get access there.


Add homepage spec.

First pass at homepage specs.
Functionality is largely based on cosm's mockups. As such, I have made some assumptions concerning functionality & UI. Specs may need refined as mockups change, more screen sizes are supported, etc.

Homepage spec revised. Removed announcement & news requirements; will be included in those relevant specs. Added personalization requirements.

More revisions. Fixed typos. Added clarifications.

Issue #70


Add-on doesnt work anymore

Title says it all

To add onto this, the developers pushed the merger thing you mentioned but now none of the worlds show up in the list.

yea I broke it should be ok now


[AOSP-pick] Rename properties that specify aspect file

Cherry pick AOSP commit acc58667d8d5a37593bb0b161a4df0628694e9cd.
locations in order to ignore any user configured values after a
workaround was suggested.
Bug: 379999838
Test: n/a
Change-Id: I4a00df094ad044c28802a83511a199624142e10f
AOSP: acc58667d8d5a37593bb0b161a4df0628694e9cd

Will break integration test here #7094, but just a matter of updating the names.


feat: added codeql- Security Analysis

Added codeql security analysis

Change Description

API Changes

[ ] API Changes

Documentation Additions

[ ] Documentation Additions

added workflow for security analysis


Update KeyHelper.sol and other affected contracts

Signed-off-by: Maksim Dimitrov<EMAIL_ADDRESS>Description:

Copies the contracts used for the acceptance tests in the relay
Updates the KeyHelper.sol:

Uses enums for KeyType and KeyValueType instead of magic numbers
Changes the KeyTypes constants to a mapping and moves it from HederaTokenService.sol to KeyHelper.sol
Refactors getKeyType and getKeyValueType

Related issue(s):
Fixes https://github.com/hashgraph/hedera-smart-contracts/issues/48
Fixes https://github.com/hashgraph/hedera-smart-contracts/issues/50
Notes for reviewer:

Checklist

[ ] Documented (Code comments, README, etc.)
[ ] Tested (unit, integration, etc.)

@dimitrovmaksim please adopt the directory structure that was being brought in by https://github.com/hashgraph/hedera-smart-contracts/pull/53/files.
You contract details are further along but the structure was useful


[stable/redis-ha] Add serviceMonitor resource object

Signed-off-by: Philippe Dagenais<EMAIL_ADDRESS>What this PR does / why we need it:
Following this PR (https://github.com/helm/charts/pull/14910).
I'm adding the serviceMonitor resource from the https://github.com/helm/charts/tree/master/stable/prometheus-redis-exporter chart.
A user might want to deploy everything that is needed to monitor the application within the same chart rather than deploying this chart (redis-ha) and the prometheus-redis-exporter chart.
These are the values that I added to the readme: https://github.com/helm/charts/pull/18518/files#diff-90d995e49ffa78848c1414023c10569bR89-R94
I also fixed the indentation of the values list
Checklist
[Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fields.]

[X] DCO signed
[X] Chart Version bumped
[X] Variables are documented in the README.md
[X] Title of the PR starts with chart name (e.g. [stable/mychartname])

/ok-to-test

/retest

/assign @dandydeveloper

@pgdagenais
Would you fix the conflicting file please?
stable/redis-ha/Chart.yaml

@zanhsieh Done! Thanks

/lgtm


corrected a typo

CC: @egoist

:tada: This PR is included in version 2.0.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Nek user params

Fix #73
As described in https://github.com/exabl/snek5000/issues/73#issuecomment-955718988
Still needs a bit a refactoring but the general idea is there.

@paugier, Yes I use user_params. I will review this today evening.

I need more time to review this. There is a lot of change here, and I hope it is a better internal API.

I will commit some minor changes (renaming some functions, comments, adding docs and tests) as I review the code.

I added a method _change_index_userparams to allow developers to change in downstream solvers (for example snek5000-abl) the indices of user parameters defined in snek5000 (as now params.output.history_points.write_interval).

Thanks for the help! At least it's better that what we had before!


Return http.Response from DownloadContents

This is the breaking change we discussed at: https://github.com/google/go-github/issues/1531#issuecomment-632666511
Fixes #1531

Ping @wesleimp - thank you!


Any roadmap support for Apple Silicon

Running a MBP M3 with Apple Silicon GPUs, any support coming or workarounds?

Are you running into issues today preventing you from using Apple Silicon?
For local models, the sample uses Ollama, so whatever hardware it supports is what the sample supports. Looks like that includes Apple as well based on their documentation.
For OpenAI models, hardware support doesn't matter since the models don't run locally.

I am also facing a lot of problems with Python and running the aspire projects under Apple Silicon. I did a few changes to be able to run the the project like

in E2ETest.csproj
and

in  src/PythonInference/PythonInference.pyproj
and under
this two libraries can't be installed  with Apple silicon
intel-openmp==2021.4.0
mkl==2021.4.0