Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
8ab6361
feat(projectconfig): accept [tests] and [test-groups] schema in confi…
bhagyapathak Jul 1, 2026
c5fb905
Strengthen test metadata validation and reference integrity checks
bhagyapathak Jul 2, 2026
23e5447
chore(release): add release tools to mage (#254)
dmcilvaney Jul 1, 2026
5a03dd5
build(deps): bump the dependabot-gomod-minor group across 1 directory…
dependabot[bot] Jul 2, 2026
33e0b5c
build(deps): bump actions/checkout from 6.0.3 to 7.0.0 in the dependa…
dependabot[bot] Jul 2, 2026
b7a1318
build(deps): bump golang.org/x/net from 0.54.0 to 0.55.0 (#266)
dependabot[bot] Jul 6, 2026
53c1af5
build(deps): bump the dependabot-gomod-tools-security group across 2 …
dependabot[bot] Jul 6, 2026
ae390fc
feat(cli): add history command to show changes made to components (#212)
dmcilvaney Jul 6, 2026
5917bdf
feat(overlays): handle empty sections explicitly (#208)
dmcilvaney Jul 6, 2026
8ce989c
feat: in verbose mode have mock print all output (#231)
dmcilvaney Jul 7, 2026
c83c8c8
feat(source-files): add custom origin type for mock-based source gene…
Tonisal-byte Jul 8, 2026
c6e7441
ci: add python linters to cover future python code (#225)
dmcilvaney Jul 8, 2026
d472992
refactor(overlays): Rework OverlayMetadata to use typed URLRef list c…
liunan-ms Jul 7, 2026
299c55d
refactor(overlays): rename azl-dep-missing-workaround to azl-temp-wor…
liunan-ms Jul 9, 2026
58cb484
feat(config): add optional metadata to component groups
liunan-ms Jun 23, 2026
349f214
fix: repair main after component-groups metadata + overlay-metadata A…
liunan-ms Jul 10, 2026
8925fdb
build(deps): bump the dependabot-gomod-minor group with 3 updates (#267)
dependabot[bot] Jul 10, 2026
4aa3d00
feat(source-files): generative source dependencies (#271)
Tonisal-byte Jul 13, 2026
af8c411
fix(mcp): fix issues with the MCP server mode (#272)
dmcilvaney Jul 13, 2026
6188a64
feat(projectconfig): accept [tests] and [test-groups] schema in confi…
bhagyapathak Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .devcontainer/Dockerfile.AZL-3.0
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ FROM mcr.microsoft.com/azurelinux/base/core:3.0

# Install required packages
RUN tdnf -y update && \
tdnf -y install ca-certificates dnf dnf-utils which gh git golang gawk tar shadow-utils sudo tree bash-completion moby-engine moby-cli build-essential && \
tdnf -y install ca-certificates dnf dnf-utils which gh git golang gawk tar shadow-utils sudo tree bash-completion moby-engine moby-cli build-essential python3-pip nodejs && \
tdnf clean all

# Install ruff and pyright for Python linting/formatting/type-checking
# (used by 'mage check python' / 'mage fix python'). pyright requires node (installed above).
RUN pip3 install --no-cache-dir ruff pyright

# Define the 'll' alias for all users
RUN echo 'alias ll="ls -lah"' >> /etc/profile.d/aliases.sh && \
chmod +x /etc/profile.d/aliases.sh && \
Expand Down
4 changes: 4 additions & 0 deletions .devcontainer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ The dev container uses the `azl_dev_3.0` image defined in `Dockerfile.AZL-3.0`.
- Go development tools,
- Mage build system,
- golangci-lint,
- ruff and pyright (plus Node.js, required by pyright) for Python linting/formatting/type-checking,
- required development dependencies for VS Code.

## Getting Started
Expand Down Expand Up @@ -47,6 +48,9 @@ The dev container automatically installs these VS Code extensions:
- JSON Language Features - JSON editing support
- markdownlint - Markdown linting
- YAML Language Support - YAML editing support
- Ruff (charliermarsh.ruff) - Python linting/formatting
- Pylance (ms-python.vscode-pylance) - Python type checking
- EditorConfig (editorconfig.editorconfig) - EditorConfig support

## Customization

Expand Down
7 changes: 6 additions & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,23 @@
"dockerfile": "Dockerfile.AZL-3.0",
"context": "."
},
"runArgs": ["--privileged"],
"runArgs": [
"--privileged"
],
// Features to add to the dev container. More info: https://containers.dev/features.
"features": {},
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"charliermarsh.ruff",
"davidanson.vscode-markdownlint",
"editorconfig.editorconfig",
"github.copilot-chat",
"github.copilot",
"github.vscode-pull-request-github",
"golang.go",
"ms-python.vscode-pylance",
"ms-vscode.vscode-json",
"redhat.vscode-yaml"
],
Expand Down
14 changes: 14 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,17 @@ updates:
update-types:
- "minor"
- "patch"

# git-cliff CLI (used by 'mage changelog'), pinned via a Cargo manifest so the
# version is visible to Dependabot and security scanners.
- package-ecosystem: "cargo"
directory: "/tools/git-cliff"
schedule:
interval: "weekly"
cooldown:
default-days: 7
groups:
dependabot-cargo-tools:
applies-to: version-updates
patterns:
- "*"
2 changes: 1 addition & 1 deletion .github/workflows/check-docs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Checkout sources
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/check-workflows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Install zizmor
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ jobs:
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Get go tools
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/devcontainer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Get go tools
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/generate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/license.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Get go tools
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/mod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Get go tools
Expand Down
35 changes: 35 additions & 0 deletions .github/workflows/python.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: "Python lint and type-check"
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
schedule:
# Run every night at 3:15am PST (11:15am UTC)
- cron: "15 11 * * *"

# Cancel in-progress runs of this workflow if a new run is triggered.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true

permissions: {}

jobs:
python:
name: "Lint and type-check"
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Get go tools
uses: ./.github/getgotools
- name: Install ruff and pyright
# ubuntu-latest ships Python and Node.js; pyright requires Node.
run: pip install ruff pyright
- name: Run mage check python
run: mage -v check python
2 changes: 1 addition & 1 deletion .github/workflows/static.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Get go tools
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Get go tools
Expand All @@ -41,7 +41,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Get go tools
Expand Down Expand Up @@ -77,7 +77,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Get go tools
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/testpublish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Get go tools
Expand Down
7 changes: 7 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"recommendations": [
"charliermarsh.ruff",
"editorconfig.editorconfig",
"ms-python.vscode-pylance"
]
}
22 changes: 20 additions & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,26 @@
"go.buildTags": "scenario",
"go.lintTool": "golangci-lint-v2",
"go.testTimeout": "5m",
"go.testFlags": ["-v"],
"go.testFlags": [
"-v"
],
// Lint rules for python
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.ruff": "explicit",
"source.organizeImports.ruff": "explicit",
"source.fixAll": "explicit",
"source.fixAll.pylance": "explicit"
}
},
"python.analysis.diagnosticsSource": "Pylance",
"python.missingPackage.severity": "Error",
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true,
"ruff.configuration": "${workspaceFolder}/ruff.toml",
"ruff.lint.enable": true,
"cSpell.words": [
"acarl",
"acobaugh",
Expand Down Expand Up @@ -132,4 +151,3 @@
"wrapcheck"
]
}

50 changes: 50 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Changelog

<!-- markdownlint-disable-file MD013 MD024 -->

All notable changes to `azldev` are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.0] - 2026-03-18

First tagged preview release of `azldev`, the developer CLI for the
[Azure Linux](https://github.com/microsoft/azurelinux) distro.

### Added

- **Project and metadata management.** Scaffold a project with `azldev project
init` or `project new`, then parse, resolve, and query the TOML metadata
(`azldev.toml`) that defines Azure Linux. Configuration merges built-in
defaults with project and user-level (XDG) files, is fully validated, and is
published as a JSON Schema via `azldev config generate-schema`.
- **Component inspection and locking.** List and inspect components with `azldev
component list` and `component query`, and import new ones with `component
add`. Deterministic component fingerprints and per-component lock files keep
builds reproducible; `component update` refreshes them with `--check-only`,
`--bump`, freshness-based skipping, a progress bar, and upstream-staleness
detection. `component changed` and `component diff-sources` report what moved.
- **Source preparation and spec rendering.** `component prepare-sources` and
`component render` produce build-ready sources and specs through a
`mock`-based batch pipeline, synthesizing the git history that `rpmautospec`
needs and constructing dist-git from lock-file history. A rich overlay system
(spec search/replace, prepend/append lines, remove section or subpackage, file
and source replacement, per-file overlay files, and inline metadata)
customizes specs, with explicit release-calculation modes (`autorelease`,
`static`, and automatic). Source archives are fetched from lookaside caches.
- **Local package and image builds.** Build individual packages with `mock`
using `component build`, emitting RPMs and SRPMs into structured,
publish-channel-aware output directories. `azldev image` builds, customizes,
injects files into, boots, and runs LISA tests against Azure Linux images on a
local QEMU VM.
- **Package and repository queries.** Inspect binary package configuration with
`azldev package list` (including `--rpm-file`, debug-package synthesis, and
separate package/component group columns), and inspect or manage RPM
repositories with `azldev repo query`, backed by repo resources and repo-set
templates.
- **Command-line experience.** Shell completions for bash, zsh, fish, and
PowerShell; actionable hints on errors; global `--quiet`, `--verbose`, and
`--dry-run` flags with `table`, `json`, `csv`, and `markdown` output formats;
an embedded MCP server (`azldev advanced mcp`); and auto-generated CLI
reference documentation.
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# Azure Linux Dev Tools

[![Go Reference](https://pkg.go.dev/badge/github.com/microsoft/azure-linux-dev-tools.svg)](https://pkg.go.dev/github.com/microsoft/azure-linux-dev-tools)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)

Azure Linux Dev Tools is a collection of utilities useful for development
of the Azure Linux distro.

Expand Down Expand Up @@ -28,9 +31,12 @@ It supports:
1. Install `azldev`:

```console
go install github.com/microsoft/azure-linux-dev-tools/cmd/azldev@main
go install github.com/microsoft/azure-linux-dev-tools/cmd/azldev@latest
```

To pin a specific release instead of tracking the latest, replace `@latest`
with a version tag, e.g. `@v0.1.0`.

1. To ensure you can build using `mock` you must be a member of the `mock` group, e.g.:

```console
Expand Down Expand Up @@ -62,6 +68,10 @@ Please see our [Contribution Guidelines](./CONTRIBUTING.md) for our project.

For development setup and workflow, please consult our [Developer Guide](./docs/developer).

## Changelog

Notable changes for each release are recorded in the [changelog](./CHANGELOG.md).

## Getting Help

Have questions, found a bug, or need a new feature? Open an issue in our [GitHub repository](https://github.com/microsoft/azure-linux-dev-tools/issues/new/choose). For guidance on how to file an issue, see [how to report issues](https://aka.ms/azurelinux-reportissues).
Expand Down
Loading