Skip to content

Call for testing ruff on channel latest/candidate #135

Closed

Description

@github-actions

A new version (0.17.0) of ruff was just pushed to the latest/candidate channel in the snap store. The following revisions are available.

CPU ArchitectureRevision
amd641709
arm641708
ppc64el1711
riscv641712
s390x1710

Automated testing

If configured, the snap will be installed in a VM, and any test results or screenshots will be posted to this issue as a comment shortly.

How to test it manually

  1. Stop the application if it was already running
  2. Upgrade to this version by running
snap refresh ruff --channel latest/candidate
  1. Start the app and test it out.
  2. Finally, add a comment below explaining whether this app is working, and include the output of the following command.
snap version; lscpu | grep Architecture; snap info ruff | grep installed

How to release it

Maintainers can promote this to stable by commenting /promote <rev>[,<rev>] latest/stable [done].

For example

  • To promote a single revision, run /promote <rev> latest/stable
  • To promote multiple revisions, run /promote <rev>,<rev> latest/stable
  • To promote a revision and close the issue, run /promote <rev>,<rev> latest/stable done

You can promote all revisions that were just built with:

/promote 1709,1708,1711,1712,1710 latest/stable done

Activity

  1. github-actions commented on Oct 14, 2026

    @github-actions
    Author

    Automated testing success.

    Full logs are available at https://github.com/snapcrafters/ruff/actions/runs/38064457516. The first 100, and last 100 lines of the log are displayed in the Summary below.

    Logs
    ruff 0.17.0 (5b27c1ccf 2026-10-09)
    ::endgroup::
    ::group::Help
    Ruff: An extremely fast Python linter and code formatter.
    
    Usage: ruff [OPTIONS] <COMMAND>
    
    Commands:
    check    Run Ruff on the given files or directories
    rule     Explain a rule (or all rules)
    config   List or describe the available configuration options
    linter   List all supported upstream linters
    clean    Clear any caches in the current directory and any subdirectories
    format   Run the Ruff formatter on the given files or directories
    server   Run the language server
    analyze  Run analysis over Python source code
    version  Display Ruff's version
    help     Print this message or the help of the given subcommand(s)
    
    Options:
    -h, --help
            Print help (see a summary with '-h')
    
    -V, --version
            Print version
    
    Log levels:
    -v, --verbose
            Enable verbose logging
    
    -q, --quiet
            Print diagnostics, but nothing else
    
    -s, --silent
            Disable all logging (but still exit with status code "1" upon detecting diagnostics)
    
    Global options:
        --config <CONFIG_OPTION>
            Either a path to a TOML configuration file (`pyproject.toml` or `ruff.toml`), or a TOML
            `<KEY> = <VALUE>` pair (such as you might find in a `ruff.toml` configuration file)
            overriding a specific configuration option (e.g., `--config "line-length = 100"` or
            `--config "format.quote-style = 'single'"`). Overrides of individual settings using this
            option always take precedence over all configuration files, including configuration files
            that were also specified using `--config`
    
        --isolated
            Ignore all configuration files
    
        --color <WHEN>
            Control when colored output is used
    
            Possible values:
            - auto:   Display colors if the output goes to an interactive terminal
            - always: Always display colors
            - never:  Never display colors
    
    For help with a specific command, see: `ruff help <command>`.
    ::endgroup::
    ::group::Rules:
    # airflow-variable-name-task-id-mismatch (AIR001)
    
    Derived from the **Airflow** linter.
    
    ## What it does
    Checks that the task variable name matches the `task_id` value for
    Airflow Operators.
    
    ## Why is this bad?
    When initializing an Airflow Operator, for consistency, the variable
    name should match the `task_id` value. This makes it easier to
    follow the flow of the Dag.
    
    ## Example
    ```python
    from airflow.operators import PythonOperator
    
    
    incorrect_name = PythonOperator(task_id="my_task")
    

    Use instead:

    from airflow.operators import PythonOperator
    
    
    my_task = PythonOperator(task_id="my_task")

    airflow-dag-no-schedule-argument (AIR002)

    Derived from the Airflow linter.

    What it does

    Checks for a DAG() class or @dag() decorator without an explicit
    schedule (or schedule_interval for Airflow 1) parameter.

    Why is this bad?

    The default value of the schedule parameter on Airflow 2 and
    schedule_interval on Airflow 1 is timedelta(days=1), which is almost
    never what a user is looking for. Airflow 3 changed the default value to None,

    (Logs truncated. See full logs at: https://github.com/snapcrafters/ruff/actions/runs/38064457516)

    | |______________________________^

    Found 155 errors (129 fixed, 26 remaining).
    38 files reformatted, 343 files left unchanged
    52 files reformatted, 329 files left unchanged
    ::endgroup::

    ::group::Repository: https://github.com/tiangolo/fastapi
    Cloning into 'ruff-snap-test-dcPaAEkj'...
    All checks passed!
    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial002_an_py310.py:11:1
    |
    11 | / class CommonQueryParams:
    12 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    13 | | self.q = q
    14 | | self.skip = skip
    15 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial002_py310.py:9:1
    |
    9 | / class CommonQueryParams:
    10 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    11 | | self.q = q
    12 | | self.skip = skip
    13 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial003_an_py310.py:11:1
    |
    11 | / class CommonQueryParams:
    12 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    13 | | self.q = q
    14 | | self.skip = skip
    15 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial003_py310.py:9:1
    |
    9 | / class CommonQueryParams:
    10 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    11 | | self.q = q
    12 | | self.skip = skip
    13 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial004_an_py310.py:11:1
    |
    11 | / class CommonQueryParams:
    12 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    13 | | self.q = q
    14 | | self.skip = skip
    15 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial004_py310.py:9:1
    |
    9 | / class CommonQueryParams:
    10 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    11 | | self.q = q
    12 | | self.skip = skip
    13 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/python_types/tutorial010_py310.py:1:1
    |
    1 | / class Person:
    2 | | def init(self, name: str):
    3 | | self.name = name
    | |________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> tests/test_jsonable_encoder.py:18:1
    |
    18 | / class Person:
    19 | | def init(self, name: str):
    20 | | self.name = name
    | |________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> tests/test_jsonable_encoder.py:23:1
    |
    23 | / class Pet:
    24 | | def init(self, owner: Person, name: str):
    25 | | self.owner = owner
    26 | | self.name = name
    | |________________________^

    Found 16 errors (7 fixed, 9 remaining).
    135 files reformatted, 2737 files left unchanged
    328 files reformatted, 2544 files left unchanged
    ::endgroup::

    
    </details>
    
    
  2. github-actions commented on Oct 14, 2026

    @github-actions
    Author

    Automated testing success.

    Full logs are available at https://github.com/snapcrafters/ruff/actions/runs/38064457516. The first 100, and last 100 lines of the log are displayed in the Summary below.

    Logs
    ruff 0.17.0 (5b27c1ccf 2026-10-09)
    ::endgroup::
    ::group::Help
    Ruff: An extremely fast Python linter and code formatter.
    
    Usage: ruff [OPTIONS] <COMMAND>
    
    Commands:
    check    Run Ruff on the given files or directories
    rule     Explain a rule (or all rules)
    config   List or describe the available configuration options
    linter   List all supported upstream linters
    clean    Clear any caches in the current directory and any subdirectories
    format   Run the Ruff formatter on the given files or directories
    server   Run the language server
    analyze  Run analysis over Python source code
    version  Display Ruff's version
    help     Print this message or the help of the given subcommand(s)
    
    Options:
    -h, --help
            Print help (see a summary with '-h')
    
    -V, --version
            Print version
    
    Log levels:
    -v, --verbose
            Enable verbose logging
    
    -q, --quiet
            Print diagnostics, but nothing else
    
    -s, --silent
            Disable all logging (but still exit with status code "1" upon detecting diagnostics)
    
    Global options:
        --config <CONFIG_OPTION>
            Either a path to a TOML configuration file (`pyproject.toml` or `ruff.toml`), or a TOML
            `<KEY> = <VALUE>` pair (such as you might find in a `ruff.toml` configuration file)
            overriding a specific configuration option (e.g., `--config "line-length = 100"` or
            `--config "format.quote-style = 'single'"`). Overrides of individual settings using this
            option always take precedence over all configuration files, including configuration files
            that were also specified using `--config`
    
        --isolated
            Ignore all configuration files
    
        --color <WHEN>
            Control when colored output is used
    
            Possible values:
            - auto:   Display colors if the output goes to an interactive terminal
            - always: Always display colors
            - never:  Never display colors
    
    For help with a specific command, see: `ruff help <command>`.
    ::endgroup::
    ::group::Rules:
    # airflow-variable-name-task-id-mismatch (AIR001)
    
    Derived from the **Airflow** linter.
    
    ## What it does
    Checks that the task variable name matches the `task_id` value for
    Airflow Operators.
    
    ## Why is this bad?
    When initializing an Airflow Operator, for consistency, the variable
    name should match the `task_id` value. This makes it easier to
    follow the flow of the Dag.
    
    ## Example
    ```python
    from airflow.operators import PythonOperator
    
    
    incorrect_name = PythonOperator(task_id="my_task")
    

    Use instead:

    from airflow.operators import PythonOperator
    
    
    my_task = PythonOperator(task_id="my_task")

    airflow-dag-no-schedule-argument (AIR002)

    Derived from the Airflow linter.

    What it does

    Checks for a DAG() class or @dag() decorator without an explicit
    schedule (or schedule_interval for Airflow 1) parameter.

    Why is this bad?

    The default value of the schedule parameter on Airflow 2 and
    schedule_interval on Airflow 1 is timedelta(days=1), which is almost
    never what a user is looking for. Airflow 3 changed the default value to None,

    (Logs truncated. See full logs at: https://github.com/snapcrafters/ruff/actions/runs/38064457516)

    | |______________________________^

    Found 155 errors (129 fixed, 26 remaining).
    38 files reformatted, 343 files left unchanged
    52 files reformatted, 329 files left unchanged
    ::endgroup::

    ::group::Repository: https://github.com/tiangolo/fastapi
    Cloning into 'ruff-snap-test-3EMAKMEw'...
    All checks passed!
    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial002_an_py310.py:11:1
    |
    11 | / class CommonQueryParams:
    12 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    13 | | self.q = q
    14 | | self.skip = skip
    15 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial002_py310.py:9:1
    |
    9 | / class CommonQueryParams:
    10 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    11 | | self.q = q
    12 | | self.skip = skip
    13 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial003_an_py310.py:11:1
    |
    11 | / class CommonQueryParams:
    12 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    13 | | self.q = q
    14 | | self.skip = skip
    15 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial003_py310.py:9:1
    |
    9 | / class CommonQueryParams:
    10 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    11 | | self.q = q
    12 | | self.skip = skip
    13 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial004_an_py310.py:11:1
    |
    11 | / class CommonQueryParams:
    12 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    13 | | self.q = q
    14 | | self.skip = skip
    15 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/dependencies/tutorial004_py310.py:9:1
    |
    9 | / class CommonQueryParams:
    10 | | def init(self, q: str | None = None, skip: int = 0, limit: int = 100):
    11 | | self.q = q
    12 | | self.skip = skip
    13 | | self.limit = limit
    | |__________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> docs_src/python_types/tutorial010_py310.py:1:1
    |
    1 | / class Person:
    2 | | def init(self, name: str):
    3 | | self.name = name
    | |________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> tests/test_jsonable_encoder.py:18:1
    |
    18 | / class Person:
    19 | | def init(self, name: str):
    20 | | self.name = name
    | |________________________^

    class-as-data-structure: Class could be dataclass or namedtuple
    --> tests/test_jsonable_encoder.py:23:1
    |
    23 | / class Pet:
    24 | | def init(self, owner: Person, name: str):
    25 | | self.owner = owner
    26 | | self.name = name
    | |________________________^

    Found 16 errors (7 fixed, 9 remaining).
    135 files reformatted, 2737 files left unchanged
    328 files reformatted, 2544 files left unchanged
    ::endgroup::

    
    </details>
    
    
  3. jnsgruk commented on Oct 14, 2026

    @jnsgruk
    Member

    /promote 1709,1708,1711,1712,1710 latest/stable done

  4. github-actions commented on Oct 14, 2026

    @github-actions
    Author

    The following revisions were released to the latest/stable channel: 1709,1708,1711,1712,1710.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions