even more renovate work
This commit is contained in:
@@ -9,6 +9,11 @@
|
||||
"matchManagers": ["docker", "helm-values"],
|
||||
"commitMessageTopic": "OCI-image {{depName}}",
|
||||
"prefix": "chore(container)"
|
||||
},
|
||||
{
|
||||
"matchManagers": ["helm"],
|
||||
"commitMessageTopic": "chart {{depName}}",
|
||||
"prefix": "chore(helm)"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
"semanticCommitScope": "helm",
|
||||
"versioning": "semver",
|
||||
"bumpVersion": true,
|
||||
"commitMessageTopic": "chart {{depName}}",
|
||||
"prefix": "chore(helm-deps)",
|
||||
"updateTypes": ["major", "minor", "patch"], // Allow updates for all version types
|
||||
"pinDigests": false, // Set to false to not pin digest references
|
||||
"branchPrefix": "helm-",
|
||||
|
||||
@@ -1,653 +0,0 @@
|
||||
{
|
||||
semanticCommits: "enabled",
|
||||
extends: ["helpers:pinGitHubActionDigests"],
|
||||
dependencyDashboard: true,
|
||||
dependencyDashboardTitle: "Renovate Dashboard 🤖",
|
||||
suppressNotifications: ["prIgnoreNotification"],
|
||||
commitMessageTopic: "{{depName}}",
|
||||
commitMessageExtra: "to {{newVersion}}",
|
||||
commitMessageSuffix: "By Renovate",
|
||||
rebaseWhen: "conflicted",
|
||||
prConcurrentLimit: 150,
|
||||
"ignorePaths": ["archive/**"],
|
||||
timezone: "Europe/Amsterdam",
|
||||
pinDigests: true,
|
||||
automerge: false,
|
||||
gitAuthor: "TrueCharts-Admin <bot@truecharts.org>",
|
||||
"helm-values": {
|
||||
fileMatch: [
|
||||
"charts/.+/.*values\\.yaml$",
|
||||
"charts/.+/SCALE/.*_values\\.yaml$",
|
||||
],
|
||||
},
|
||||
helmv3: { fileMatch: ["charts/.+/Chart\\.yaml$"] },
|
||||
packageRules: [
|
||||
{
|
||||
// Bundle Github Actions
|
||||
matchManagers: ["github-actions"],
|
||||
groupName: "Github-Actions",
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
// Setup datasources for dep updates
|
||||
matchDatasources: ["helm"],
|
||||
matchManagers: ["helmv3"],
|
||||
commitMessageTopic: "Helm chart {{depName}}",
|
||||
ignorePaths: ["charts/unstable/**"],
|
||||
autoApprove: true,
|
||||
},
|
||||
{
|
||||
// Global docker datasource settings
|
||||
matchDatasources: ["docker"],
|
||||
enabled: true,
|
||||
pinDigests: true,
|
||||
automerge: false,
|
||||
autoApprove: true,
|
||||
separateMinorPatch: true,
|
||||
ignorePaths: ["charts/unstable/**", "charts/system/**"],
|
||||
commitMessageTopic: "container image {{depName}}",
|
||||
commitMessageExtra: "to {{#if isSingleVersion}}v{{{newVersion}}}{{else}}{{{newValue}}}{{/if}}@{{newDigestShort}}",
|
||||
},
|
||||
{
|
||||
// Setup datasources for github actions
|
||||
matchManagers: ["github-actions"],
|
||||
excludePackageNames: ["stefanzweifel/git-auto-commit-action"],
|
||||
labels: ["automerge"],
|
||||
automerge: true,
|
||||
autoApprove: true,
|
||||
},
|
||||
{
|
||||
// Catch to prevent stable updates
|
||||
automerge: false,
|
||||
labels: ["update/ignored"],
|
||||
groupName: "ignored",
|
||||
matchFileNames: [
|
||||
"charts/system/**",
|
||||
"charts/unstable/**",
|
||||
"charts/dev/**",
|
||||
"templates/app/**",
|
||||
],
|
||||
commitMessageTopic: "Ignored Updates",
|
||||
autoApprove: false,
|
||||
},
|
||||
//
|
||||
// Helm Deps
|
||||
// Ensure System Apps aren't automerged after many upstream fuckups
|
||||
{
|
||||
matchDatasources: ["helm"],
|
||||
automerge: false,
|
||||
labels: ["update/helm/system"],
|
||||
groupName: "helm system",
|
||||
matchFileNames: ["charts/system/**"],
|
||||
autoApprove: false,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["helm"],
|
||||
matchUpdateTypes: ["major"],
|
||||
automerge: false,
|
||||
bumpVersion: "major",
|
||||
labels: ["update/helm/dependency/major"],
|
||||
groupName: "helm dependency major",
|
||||
matchFileNames: ["charts/dependency/**"],
|
||||
autoApprove: false,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["helm"],
|
||||
automerge: true,
|
||||
matchUpdateTypes: ["minor"],
|
||||
bumpVersion: "minor",
|
||||
labels: ["update/helm/dependency/minor", "automerge"],
|
||||
matchFileNames: ["charts/dependency/**"],
|
||||
groupName: "helm dependency minor",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["helm"],
|
||||
automerge: true,
|
||||
matchUpdateTypes: ["patch"],
|
||||
bumpVersion: "patch",
|
||||
labels: ["update/helm/dependency/patch", "automerge"],
|
||||
matchFileNames: ["charts/dependency/**"],
|
||||
groupName: "helm dependency patch",
|
||||
},
|
||||
//
|
||||
// Helm Charts
|
||||
//
|
||||
{
|
||||
matchDatasources: ["helm"],
|
||||
matchUpdateTypes: ["major"],
|
||||
bumpVersion: "major",
|
||||
enabled: true,
|
||||
labels: ["update/helm/general/major"],
|
||||
automerge: false,
|
||||
groupName: "helm general major",
|
||||
matchFileNames: [
|
||||
"charts/stable/**",
|
||||
"charts/incubator/**",
|
||||
"charts/premium/**",
|
||||
"charts/system/**",
|
||||
],
|
||||
autoApprove: false,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["helm"],
|
||||
automerge: true,
|
||||
enabled: true,
|
||||
matchUpdateTypes: ["minor"],
|
||||
bumpVersion: "minor",
|
||||
labels: ["update/helm/general/minor", "automerge"],
|
||||
groupName: "helm general minor",
|
||||
matchFileNames: [
|
||||
"charts/stable/**",
|
||||
"charts/incubator/**",
|
||||
"charts/premium/**",
|
||||
// "charts/system/**",
|
||||
],
|
||||
},
|
||||
{
|
||||
matchDatasources: ["helm"],
|
||||
automerge: true,
|
||||
enabled: true,
|
||||
matchUpdateTypes: ["digest", "patch", "pin"],
|
||||
bumpVersion: "patch",
|
||||
labels: ["update/helm/general/non-major", "automerge"],
|
||||
groupName: "helm general non-major",
|
||||
matchFileNames: [
|
||||
"charts/stable/**",
|
||||
"charts/incubator/**",
|
||||
"charts/premium/**",
|
||||
// "charts/system/**",
|
||||
],
|
||||
},
|
||||
//
|
||||
// Tag updates for semantic tags
|
||||
//
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchUpdateTypes: ["major"],
|
||||
bumpVersion: "minor",
|
||||
enabled: true,
|
||||
labels: ["update/docker/general/major"],
|
||||
matchFileNames: [
|
||||
"charts/dependency/**",
|
||||
"charts/stable/**",
|
||||
"charts/incubator/**",
|
||||
"charts/premium/**",
|
||||
"charts/system/**",
|
||||
],
|
||||
autoApprove: false,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
automerge: true,
|
||||
matchUpdateTypes: ["minor"],
|
||||
bumpVersion: "minor",
|
||||
enabled: true,
|
||||
labels: ["update/docker/general/non-major", "automerge"],
|
||||
matchFileNames: [
|
||||
"charts/dependency/**",
|
||||
"charts/stable/**",
|
||||
"charts/incubator/**",
|
||||
"charts/premium/**",
|
||||
// "charts/system/**",
|
||||
],
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
automerge: true,
|
||||
matchUpdateTypes: ["patch", "digest", "pin"],
|
||||
bumpVersion: "patch",
|
||||
enabled: true,
|
||||
labels: ["update/docker/general/non-major", "automerge"],
|
||||
matchFileNames: [
|
||||
"charts/dependency/**",
|
||||
"charts/stable/**",
|
||||
"charts/incubator/**",
|
||||
"charts/premium/**",
|
||||
// "charts/system/**",
|
||||
],
|
||||
},
|
||||
//
|
||||
// Tag tccr.io/truecharts based on semver
|
||||
//
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "semver",
|
||||
matchPackagePrefixes: ["tccr.io/truecharts"],
|
||||
},
|
||||
//
|
||||
// Tag semantic version type based on regex
|
||||
//
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>14)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["tccr.io/tccr/postgresql"],
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^v(?<major>\\d{2})(?<minor>\\d{2})(?<patch>\\d{2})$",
|
||||
matchPackageNames: ["photoprism"],
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^v(?<major>\\d{4})-(?<minor>\\d{2})$",
|
||||
matchPackageNames: ["rssbridge/rss-bridge"],
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{2})\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["linuxserver/heimdall"],
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^v(?<major>\\d+)-(?<minor>\\d+)$",
|
||||
matchPackagePrefixes: ["jupyter"],
|
||||
groupName: "jupyter",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["altran1502/immich"],
|
||||
groupName: "immich",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["portainer"],
|
||||
groupName: "portainer",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["m1k1o/neko"],
|
||||
groupName: "neko",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["ghcr.io/mriedmann/humhub-"],
|
||||
groupName: "humhub",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["lscr.io/linuxserver/webtop"],
|
||||
groupName: "webtop",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["lscr.io/linuxserver/rdesktop"],
|
||||
groupName: "rdesktop",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["tccr.io/tccr/metallb"],
|
||||
groupName: "metallb",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["zabbix/zabbix"],
|
||||
groupName: "zabbix",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["vikunja"],
|
||||
groupName: "vikunja",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["mltooling/ml-workspace"],
|
||||
groupName: "ml-workspace",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["itzg/bungeecord"],
|
||||
groupName: "bungeecord",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["tccr.io/tccr/nextcloud-"],
|
||||
groupName: "nextcloud",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["itzg/minecraft-java"],
|
||||
groupName: "minecraft-java",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["reallibrephotos/librephotos"],
|
||||
groupName: "librephotos",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["tombursch/kitchenowl"],
|
||||
groupName: "kitchenowl",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["ghcr.io/goauthentik/"],
|
||||
groupName: "authentik",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["cwq1913/lama-cleaner"],
|
||||
groupName: "lama-cleaner",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["docspell/"],
|
||||
groupName: "docspell",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["datarhei/restreamer"],
|
||||
groupName: "restreamer",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["penpotapp/"],
|
||||
groupName: "penpot",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackagePrefixes: ["jasongdove/ersatztv"],
|
||||
groupName: "ersatztv",
|
||||
},
|
||||
// matchPackagePatterns
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>14)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackagePatterns: ["^bitnami/postgresql$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{4})-(?<minor>\\d{2})-(?<patch>\\d{2})$",
|
||||
matchPackagePatterns: ["^.*oznu\\/homebridge$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)$",
|
||||
matchPackagePatterns: ["^jupyter\\/.+$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-ubuntu$",
|
||||
matchPackagePatterns: ["^zabbix\\/zabbix-.*$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^stable-(?<major>\\d{1})(?<minor>\\d{1})(?<patch>\\d{2}).*$",
|
||||
matchPackagePatterns: ["^jitsi\\/.*$"],
|
||||
groupName: "jitsi",
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^latest-(?<major>\\d{4})-(?<minor>\\d{2})-(?<patch>\\d{2})$",
|
||||
matchPackagePatterns: ["^wangqiru/ttrss$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackagePatterns: ["^penpot\\/.*$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^\\d+-jammy-(?<compatibility>(full|lite))-v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackagePatterns: ["^.+\\/koush\\/scrypted$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^version-(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-.*$",
|
||||
matchPackagePatterns: ["^.*linuxserver\\/deluge$"],
|
||||
automerge: true,
|
||||
},
|
||||
// matchPackageNames
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-postgres-tomcat$",
|
||||
matchPackageNames: ["xwiki"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^version-(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["fireflyiii/core"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-\\d+\\.\\d+\\.\\d+$",
|
||||
matchPackageNames: ["netboxcommunity/netbox"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{2})(?<minor>\\d{2})(?<patch>\\d{2})$",
|
||||
matchPackageNames: ["photoprism/photoprism"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["cloudflare/cloudflared"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^version-(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["linuxserver/calibre-web"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^postgresql-v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["ghcr.io/umami-software/umami"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^version-v(?<major>\\d+)\\.(?<minor>\\d+)\\.?(?<patch>\\d*)$",
|
||||
matchPackageNames: ["linuxserver/mylar3"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^[a-z0-9]{9}-v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-go\\d+\\.\\d+\\.\\d+$",
|
||||
matchPackageNames: ["storjlabs/storagenode"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-php8\\.0-apache$",
|
||||
matchPackageNames: ["joyqi/typecho"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^v\\.(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["difegue/lanraragi"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^RELEASE\\.(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)T\\d+-\\d+-\\d+Z$",
|
||||
matchPackageNames: ["minio/minio"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^RELEASE\\.(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)T\\d+-\\d+-\\d+Z$",
|
||||
matchPackageNames: ["minio/mc"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^apache-(?<major>\\d+)\\.(?<minor>\\d+)\\.?(?<patch>\\d*)-prod$",
|
||||
matchPackageNames: ["kimai/kimai2"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)$",
|
||||
matchPackageNames: ["rssbridge/rss-bridge"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)$",
|
||||
matchPackageNames: ["alexta69/metube"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^focal-(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["codeproject/senseai-server"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^latest-(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)$",
|
||||
matchPackageNames: ["wangqiru/ttrss"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)(-\\d+)?$",
|
||||
matchPackageNames: ["kiwix/kiwix-serve"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-omnibus$",
|
||||
matchPackageNames: ["ghcr.io/analogj/scrutiny"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)$",
|
||||
matchPackageNames: ["diygod/rsshub"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-amd64(nvidia)?$",
|
||||
matchPackageNames: ["blakeblackshear/frigate"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{1,4})\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["kopia/kopia"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{4})\\.(?<minor>\\d{1,2})\\.(?<patch>\\d{1,2).*$",
|
||||
matchPackageNames: ["alicevision/meshroom"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{4})\\.(?<minor>\\d{1,2})\\.(?<patch>\\d{1,2})$",
|
||||
matchPackageNames: ["itzg/bungeecord"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^java8-(?<major>\\d{4})\\.(?<minor>\\d{1,2})\\.(?<patch>\\d{1,2})$",
|
||||
matchPackageNames: ["itzg/bungeecord"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^java11-(?<major>\\d{4})\\.(?<minor>\\d{1,2})\\.(?<patch>\\d{1,2})$",
|
||||
matchPackageNames: ["itzg/bungeecord"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^java17-(?<major>\\d{4})\\.(?<minor>\\d{1,2})\\.(?<patch>\\d{1,2})$",
|
||||
matchPackageNames: ["itzg/bungeecord"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{4})\\.(?<minor>d{1,2})\\.(?<patch>\\d{1,2})(-java\\d{1,2}.*)?$",
|
||||
matchPackageNames: ["itzg/minecraft-server"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{4})(?<minor>\\d{2})(?<patch>\\d{2})$",
|
||||
matchPackageNames: ["ankicommunity/anki-sync-server"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)-jdk17$",
|
||||
matchPackageNames: ["jenkins/jenkins"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^x64-v(?<major>\\d*)\\.(?<minor>\\d*)\\.(?<patch>\\d*)$",
|
||||
matchPackageNames: ["housewrecker/gaps"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d*)\\.(?<minor>\\d*)\\.(?<patch>\\d*)-\\d*$",
|
||||
matchPackageNames: ["sameersbn/apt-cacher-ng"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^v3-3\\.(?<major>\\d*)\\.(?<minor>\\d*)\\.(?<patch>\\d*)$",
|
||||
matchPackageNames: ["ghcr.io/hotio/whisparr"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^release-(?<major>\\d*)\\.(?<minor>\\d*)$",
|
||||
matchPackageNames: ["mattermost/mattermost-premium-edition"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-.+$",
|
||||
matchPackageNames: ["corentinth/it-tools"],
|
||||
automerge: true,
|
||||
},
|
||||
//
|
||||
// Version strategies
|
||||
//
|
||||
// Versioning for linuxserver two-three digit container versions
|
||||
{
|
||||
matchPackagePatterns: ["^linuxserver\\/", "^deepquestai\\/"],
|
||||
versioning: "regex:^(?<compatibility>.*?(\\d+\\.)??)(?<major>\\d+)\\.(?<minor>\\d+)\\.?(?<patch>\\d+)?(-r?p?\\d)?$",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "loose",
|
||||
matchPackageNames: [
|
||||
"ghcr.io/onedr0p/plex",
|
||||
"ghcr.io/onedr0p/qbittorrent",
|
||||
"sirfragalot/hyperion.ng",
|
||||
],
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackageNames: [
|
||||
"quay.io/helmpack/chart-releaser",
|
||||
"jnorwood/helm-docs",
|
||||
"quay.io/git-chglog/git-chglog",
|
||||
],
|
||||
automerge: false,
|
||||
matchUpdateTypes: ["major", "minor", "patch", "digest", "pin"],
|
||||
labels: ["renovate/image", "ci"],
|
||||
},
|
||||
],
|
||||
}
|
||||
Vendored
-364
@@ -1,364 +0,0 @@
|
||||
{
|
||||
semanticCommits: "enabled",
|
||||
extends: ["helpers:pinGitHubActionDigests"],
|
||||
dependencyDashboard: true,
|
||||
dependencyDashboardTitle: "Renovate Dashboard 🤖",
|
||||
suppressNotifications: ["prIgnoreNotification"],
|
||||
commitMessageTopic: "{{depName}}",
|
||||
commitMessageExtra: "to {{newVersion}}",
|
||||
commitMessageSuffix: "",
|
||||
rebaseWhen: "conflicted",
|
||||
prConcurrentLimit: 25,
|
||||
pinDigests: true,
|
||||
automerge: true,
|
||||
gitAuthor: "TrueCharts-Admin <bot@truecharts.org>",
|
||||
packageRules: [
|
||||
// Setup datasources for github actions
|
||||
{
|
||||
matchManagers: ["github-actions"],
|
||||
commitMessageTopic: "github-action {{depName}} [skip ci]",
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
enabled: true,
|
||||
automerge: true,
|
||||
matchUpdateTypes: ["major", "minor", "patch", "digest", "pin"],
|
||||
pinDigests: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
semanticCommitScope: "images",
|
||||
separateMinorPatch: true,
|
||||
automerge: true,
|
||||
},
|
||||
// Add labels according to package and update types
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchUpdateTypes: ["major"],
|
||||
commitMessagePrefix: "feat(images)!: ",
|
||||
labels: ["renovate/image", "dep/major", "automerge"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchUpdateTypes: ["minor"],
|
||||
semanticCommitType: "feat",
|
||||
labels: ["renovate/image", "dep/minor", "automerge"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchUpdateTypes: ["patch"],
|
||||
semanticCommitType: "fix",
|
||||
labels: ["renovate/image", "dep/patch", "automerge"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchUpdateTypes: ["digest"],
|
||||
semanticCommitType: "fix",
|
||||
labels: ["renovate/image", "dep/digest", "automerge"],
|
||||
automerge: true,
|
||||
},
|
||||
// matchPackagePatterns
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>14)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackagePatterns: ["^bitnami/postgresql$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{4})-(?<minor>\\d{2})-(?<patch>\\d{2})$",
|
||||
matchPackagePatterns: ["^.*oznu\\/homebridge$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)$",
|
||||
matchPackagePatterns: ["^jupyter\\/.+$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-ubuntu$",
|
||||
matchPackagePatterns: ["^zabbix\\/zabbix-.*$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^stable-(?<major>\\d{1})(?<minor>\\d{1})(?<patch>\\d{2}).*$",
|
||||
matchPackagePatterns: ["^jitsi\\/.*$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackagePatterns: ["^penpot\\/.*$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^\\d*-jammy-(?<variant>.+)-v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackagePatterns: ["^.+\\/koush\\/scrypted$"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^version-(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-.*$",
|
||||
matchPackagePatterns: ["^.*linuxserver\\/deluge$"],
|
||||
automerge: true,
|
||||
},
|
||||
// matchPackageNames
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-postgres-tomcat$",
|
||||
matchPackageNames: ["xwiki"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^version-(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["fireflyiii/core"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-\\d+\\.\\d+\\.\\d+$",
|
||||
matchPackageNames: ["netboxcommunity/netbox"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{2})(?<minor>\\d{2})(?<patch>\\d{2})$",
|
||||
matchPackageNames: ["photoprism/photoprism"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["cloudflare/cloudflared"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^version-(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["linuxserver/calibre-web"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^version-v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["linuxserver/heimdall"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^postgresql-v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["ghcr.io/umami-software/umami"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^version-v(?<major>\\d+)\\.(?<minor>\\d+)\\.?(?<patch>\\d*)$",
|
||||
matchPackageNames: ["linuxserver/mylar3"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^[a-z0-9]{9}-v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-go\\d+\\.\\d+\\.\\d+$",
|
||||
matchPackageNames: ["storjlabs/storagenode"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-php8\\.0-apache$",
|
||||
matchPackageNames: ["joyqi/typecho"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^v\\.(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["difegue/lanraragi"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^RELEASE\\.(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)T\\d+-\\d+-\\d+Z$",
|
||||
matchPackageNames: ["minio/minio"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^RELEASE\\.(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)T\\d+-\\d+-\\d+Z$",
|
||||
matchPackageNames: ["minio/mc"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^apache-(?<major>\\d+)\\.(?<minor>\\d+)\\.?(?<patch>\\d*)-prod$",
|
||||
matchPackageNames: ["kimai/kimai2"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)$",
|
||||
matchPackageNames: ["rssbridge/rss-bridge"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)$",
|
||||
matchPackageNames: ["alexta69/metube"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^focal-(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["codeproject/senseai-server"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^latest-(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)$",
|
||||
matchPackageNames: ["wangqiru/ttrss"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)(-\\d+)?$",
|
||||
matchPackageNames: ["kiwix/kiwix-serve"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-omnibus$",
|
||||
matchPackageNames: ["ghcr.io/analogj/scrutiny"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)-(?<minor>\\d+)-(?<patch>\\d+)$",
|
||||
matchPackageNames: ["diygod/rsshub"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-amd64(nvidia)?$",
|
||||
matchPackageNames: ["blakeblackshear/frigate"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{1,4})\\.(?<minor>\\d+)\\.(?<patch>\\d+)$",
|
||||
matchPackageNames: ["kopia/kopia"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{4})\\.(?<minor>\\d{1,2})\\.(?<patch>\\d{1,2).*$",
|
||||
matchPackageNames: ["alicevision/meshroom"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{4})\\.(?<minor>\\d{1,2})\\.(?<patch>\\d{1,2})$",
|
||||
matchPackageNames: ["itzg/bungeecord"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^java8-(?<major>\\d{4})\\.(?<minor>\\d{1,2})\\.(?<patch>\\d{1,2})$",
|
||||
matchPackageNames: ["itzg/bungeecord"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^java11-(?<major>\\d{4})\\.(?<minor>\\d{1,2})\\.(?<patch>\\d{1,2})$",
|
||||
matchPackageNames: ["itzg/bungeecord"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^java17-(?<major>\\d{4})\\.(?<minor>\\d{1,2})\\.(?<patch>\\d{1,2})$",
|
||||
matchPackageNames: ["itzg/bungeecord"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{4})\\.(?<minor>d{1,2})\\.(?<patch>\\d{1,2})(-java\\d{1,2}.*)?$",
|
||||
matchPackageNames: ["itzg/minecraft-server"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d{4})(?<minor>\\d{2})(?<patch>\\d{2})$",
|
||||
matchPackageNames: ["ankicommunity/anki-sync-server"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)-jdk17$",
|
||||
matchPackageNames: ["jenkins/jenkins"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^x64-v(?<major>\\d*)\\.(?<minor>\\d*)\\.(?<patch>\\d*)$",
|
||||
matchPackageNames: ["housewrecker/gaps"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d*)\\.(?<minor>\\d*)\\.(?<patch>\\d*)-\\d*$",
|
||||
matchPackageNames: ["sameersbn/apt-cacher-ng"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^release-(?<major>\\d*)\\.(?<minor>\\d*)$",
|
||||
matchPackageNames: ["mattermost/mattermost-enterprise-edition"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)-.+$",
|
||||
matchPackageNames: ["corentinth/it-tools"],
|
||||
automerge: true,
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
automerge: true,
|
||||
matchUpdateTypes: ["major", "minor", "patch", "digest", "pin"],
|
||||
},
|
||||
//
|
||||
// Version strategies
|
||||
//
|
||||
// Versioning for linuxserver two-three digit container versions
|
||||
{
|
||||
matchPackagePatterns: ["^linuxserver\\/", "^deepquestai\\/"],
|
||||
versioning: "regex:^(?<compatibility>.*?(\\d+\\.)??)(?<major>\\d+)\\.(?<minor>\\d+)\\.?(?<patch>\\d+)?(-r?p?\\d)?$",
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
versioning: "loose",
|
||||
matchPackageNames: [
|
||||
"ghcr.io/onedr0p/plex",
|
||||
"ghcr.io/onedr0p/qbittorrent",
|
||||
"sirfragalot/hyperion.ng",
|
||||
],
|
||||
},
|
||||
{
|
||||
matchDatasources: ["docker"],
|
||||
matchPackageNames: [
|
||||
"quay.io/helmpack/chart-releaser",
|
||||
"jnorwood/helm-docs",
|
||||
"quay.io/git-chglog/git-chglog",
|
||||
],
|
||||
automerge: false,
|
||||
matchUpdateTypes: ["major", "minor", "patch", "digest", "pin"],
|
||||
labels: ["renovate/image", "ci"],
|
||||
},
|
||||
],
|
||||
}
|
||||
Reference in New Issue
Block a user