# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates

version: 2
updates:
  - package-ecosystem: "maven"
    directory: "/"
    commit-message:
      prefix: "build"
      prefix-development: "build"
      include: "scope"
    schedule:
      interval: "daily"
    ignore:
      # Jetty >= 10 requires jdk 11
      - dependency-name: "org.eclipse.jetty:jetty-maven-plugin"
        versions:
          - ">= 10.0.0"
      - dependency-name: "org.apache.myfaces.core:myfaces-api"
        versions:
          - ">= 3.0.0"
      - dependency-name: "org.apache.myfaces.core:myfaces-impl"
        versions:
          - ">= 3.0.0"
      - dependency-name: "org.glassfish:jakarta.faces"
        versions:
          - ">= 3.0.0"
      - dependency-name: "jakarta.inject:jakarta.inject-api"
        versions:
          - ">= 2.0.0"
      - dependency-name: "jakarta.servlet:jakarta.servlet-api"
        versions:
          - ">= 5.0.0"
      - dependency-name: "jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api"
        versions:
          - ">= 2.0.0"
      - dependency-name: "jakarta.validation:jakarta.validation-api"
        versions:
          - ">= 3.0.0"
      - dependency-name: "jakarta.el:jakarta.el-api"
        versions:
          - ">= 4.0.0"
      - dependency-name: "jakarta.annotation:jakarta.annotation-api"
        versions:
          - ">= 2.0.0"
      - dependency-name: "org.glassfish:jakarta.json"
        versions:
          - ">= 2.0.0"
      - dependency-name: "org.jboss.weld.servlet:weld-servlet-shaded"
        versions:
          - ">= 4.0.0"
      - dependency-name: "org.hibernate.validator:hibernate-validator"
        versions:
          - ">= 7.0.0"
      - dependency-name: "org.antlr:stringtemplate"
        versions:
          - ">= 4.0.0"
      - dependency-name: "org.apache.maven.plugins:maven-checkstyle-plugin"
        versions:
          - ">=3.1.0"
      - dependency-name: "org.apache.maven.plugins:maven-enforcer-plugin"
        versions:
          - ">= 3.0.0"


  - package-ecosystem: "maven"
    directory: "/"
    target-branch: "tobago-4.x"
    commit-message:
      prefix: "build"
      prefix-development: "build"
      include: "scope"
    schedule:
      interval: "daily"
    ignore:
      - dependency-name: "com.sun.faces:jsf-api"
      - dependency-name: "com.sun.faces:jsf-impl"
      # Jetty >= 10 requires jdk 11
      - dependency-name: "org.eclipse.jetty:jetty-maven-plugin"
        versions:
          - ">= 10.0.0"
      - dependency-name: "org.apache.myfaces.core:myfaces-api"
        versions:
          - ">= 2.1.0"
      - dependency-name: "org.apache.myfaces.core:myfaces-impl"
        versions:
          - ">= 2.1.0"
      - dependency-name: "org.glassfish:jakarta.faces"
        versions:
          - ">= 3.0.0"
      - dependency-name: "jakarta.inject:jakarta.inject-api"
        versions:
          - ">= 2.0.0"
      - dependency-name: "jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api"
        versions:
          - ">= 2.0.0"
      - dependency-name: "jakarta.validation:jakarta.validation-api"
        versions:
          - ">= 3.0.0"
      - dependency-name: "jakarta.el:jakarta.el-api"
        versions:
          - ">= 4.0.0"
      - dependency-name: "jakarta.annotation:jakarta.annotation-api"
        versions:
          - ">= 2.0.0"
      - dependency-name: "org.glassfish:jakarta.json"
        versions:
          - ">= 2.0.0"
      - dependency-name: "org.jboss.weld.servlet:weld-servlet-shaded"
        versions:
          - ">= 4.0.0"
      - dependency-name: "org.hibernate:hibernate-validator"
        versions:
          - ">= 5.0.0"
      - dependency-name: "org.hibernate.validator:hibernate-validator"
        versions:
          - ">= 7.0.0"
      - dependency-name: "org.antlr:stringtemplate"
        versions:
          - ">= 4.0.0"
      - dependency-name: "org.apache.tomcat:tomcat-el-api"
        versions:
          - ">= 10.0.0"
      - dependency-name: "org.apache.tomcat:tomcat-jasper-el"
        versions:
          - ">= 10.0.0"
      - dependency-name: "org.apache.maven.plugins:maven-checkstyle-plugin"
        versions:
          - ">=3.1.0"
      - dependency-name: "org.apache.maven.plugins:maven-enforcer-plugin"
        versions:
          - ">= 3.0.0"

  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      # Check for updates to GitHub Actions every day
      interval: "daily"

  - package-ecosystem: "github-actions"
    directory: "/"
    target-branch: "tobago-4.x"
    schedule:
      # Check for updates to GitHub Actions every day
      interval: "daily"

  - package-ecosystem: "npm"
    # Look for `package.json` and `lock` files in the `root` directory
    directory: "/tobago-theme"
    commit-message:
      prefix: "build"
      prefix-development: "build"
      include: "scope"
    # Check the npm registry for updates every day (weekdays)
    schedule:
      interval: "daily"
  - package-ecosystem: "npm"
    directory: "/tobago-example/tobago-example-demo"
    commit-message:
      prefix: "build"
      prefix-development: "build"
      include: "scope"
    schedule:
      interval: "daily"
