Repository: open-telemetry/semantic-conventions
Pull request #2080: [chore] Make build fully support podman-is-docker.
Author: login: michaelsafyan
Created: 2025-04-09T15:29:37Z | Merged: 2025-04-15T22:22:34Z

Fixes #2052 #1571

## Changes

Updates the build machinery to:

 - Always specify the container repository
 - Always specify user/group parameters when using mount points which require local file access
 - Always specify `PODMAN_USERNS=keep-id` when using the user/group parameters

Also adds a GitHub workflow aimed at regression-proofing the podman-is-docker support.

## Merge requirement checklist

* [X] [CONTRIBUTING.md](https://github.com/open-telemetry/semantic-conventions/blob/main/CONTRIBUTING.md) guidelines followed.
* [X] Change log entry added, according to the guidelines in [When to add a changelog entry](https://github.com/open-telemetry/semantic-conventions/blob/main/CONTRIBUTING.md#when-to-add-a-changelog-entry).
  * If your PR does not need a change log, start the PR title with `[chore]`
* [N/A] [schema-next.yaml](https://github.com/open-telemetry/semantic-conventions/blob/main/schema-next.yaml) updated with changes to existing conventions.


Linked issue #2052: Build operation "make check" fails with "podman-is-docker"
There appear to be a few issues:

 1. `markdown-lint-check` references local files but doesn't use `$(DOCKER_USER_IS_HOST_USER_ARG)`
 2. Container `lycheeverse/lychee` is not prefixed (should add "docker.io/" prefix)
 3. `table-check` references local files but doesn't use `$(DOCKER_USER_IS_HOST_USER_ARG)`
 4. `check-policies`  references local files but doesn't use `$(DOCKER_USER_IS_HOST_USER_ARG)`
 5. `compatibility-check` references local files but doesn't use `$(DOCKER_USER_IS_HOST_USER_ARG)`
 6. `schema_check.sh` uses unqualified container (`otel/build-tool-schemas`); needs `docker.io/` prefix.
 7. `schema_check.sh` omits necessary user parameters given reference to local files

It would be ideal to not only fix this issue, but to add a GitHub workflow that attempts to build the "Makefile" in an environment that uses "podman-is-docker" to ensure ongoing build compatibility with podman.

Diff:
diff --git a/.github/workflows/build-system-check.yml b/.github/workflows/build-system-check.yml
new file mode 100644
index 0000000000..b197b1959c
--- /dev/null
+++ b/.github/workflows/build-system-check.yml
@@ -0,0 +1,103 @@
+name: Build System Check
+
+on:
+  push:
+   paths:
+   - 'Makefile'
+   - 'dependencies.Dockerfile'
+   - 'internal/tools/**'
+  pull_request:
+   paths:
+   - 'Makefile'
+   - 'dependencies.Dockerfile'
+   - 'internal/tools/**'
+
+jobs:
+
+  # Ensure that invoking "make" without a specific build target will succeed.
+  make-default-target:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        container-runner: ["docker", "podman"]
+    steps:
+    - name: install podman and podman-docker
+      if: ${{ matrix.container-runner == 'podman' }}
+      run: sudo apt-get install podman podman-docker
+
+    - name: check out code
+      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+    - name: install dependencies
+      run: npm install
+
+    - name: invoke make
+      run: make
+      env:
+        LYCHEE_GITHUB_TOKEN: ${{ github.token }}
+
+
+  # The "CONTRIBUTING.md" guide provides these make targets for regenerating the files;
+  # ensure that the steps in the "CONTRIBUTING.md" guide continue to work.
+  make-generation-from-contributing-guide:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        container-runner: ["docker", "podman"]
+    steps:
+    - name: install podman and podman-docker
+      if: ${{ matrix.container-runner == 'podman' }}
+      run: sudo apt-get install podman podman-docker
+
+    - name: check out code
+      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+    - name: install dependencies
+      run: npm install
+
+    - name: invoke make
+      run: make table-generation attribute-registry-generation
+
+  # The "CONTRIBUTING.md" guide provides these make targets for verifying the policies;
+  # ensure that the steps in the "CONTRIBUTING.md" guide continue to work.
+  make-check-policies-from-contributing-guide:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        container-runner: ["docker", "podman"]
+    steps:
+    - name: install podman and podman-docker
+      if: ${{ matrix.container-runner == 'podman' }}
+      run: sudo apt-get install podman podman-docker
+
+    - name: check out code
+      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+    - name: install dependencies
+      run: npm install
+
+    - name: invoke make
+      run: make check-policies
+
+  # The "CONTRIBUTING.md" guide provides these make targets for doing a last minute full
+  # check over the entire repo before attempting to send a PR. Make sure this succeeds.
+  make-check-from-contributing-guide:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        container-runner: ["docker", "podman"]
+    steps:
+    - name: install podman and podman-docker
+      if: ${{ matrix.container-runner == 'podman' }}
+      run: sudo apt-get install podman podman-docker
+
+    - name: check out code
+      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+    - name: install dependencies
+      run: npm install
+
+    - name: invoke make
+      run: make check
+      env:
+        LYCHEE_GITHUB_TOKEN: ${{ github.token }}
diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index 00ae63b924..35ed404368 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -46,6 +46,8 @@ jobs:
 
     - name: run markdown-link-check
       run: make markdown-link-check
+      env:
+        LYCHEE_GITHUB_TOKEN: ${{ github.token }}
 
   markdown-toc-check:
     runs-on: ubuntu-latest
@@ -74,14 +76,16 @@ jobs:
   semantic-conventions:
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+    - name: check out code
+      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
     - name: verify semantic convention tables
       run: make table-check
 
   semantic-conventions-registry:
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+    - name: check out code
+      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
     - name: verify registry tables
       run: |
         make attribute-registry-generation
@@ -90,7 +94,8 @@ jobs:
   schemas-check:
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+    - name: check out code
+      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
     - name: verify schemas
       run: make schema-check
 
@@ -106,14 +111,16 @@ jobs:
   policies-check:
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+    - name: check out code
+      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
     - name: verify semantic conventions yaml definitions
       run: make check-policies
 
   polices-test:
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+    - name: check out code
+      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
     - name: verify semantic conventions yaml definitions
       run: make test-policies
 
diff --git a/Makefile b/Makefile
index dff3ce2179..b3bc3242e1 100644
--- a/Makefile
+++ b/Makefile
@@ -10,6 +10,13 @@ else
 	SED ?= sed
 endif
 
+
+ifeq ($(LYCHEE_GITHUB_TOKEN),)
+  LYCHEE_GITHUB_TOKEN_ARG :=
+else:
+  LYCHEE_GITHUB_TOKEN_ARG := --env GITHUB_TOKEN=$(LYCHEE_GITHUB_TOKEN)
+endif
+
 TOOLS_DIR := $(PWD)/internal/tools
 
 MARKDOWN_LINK_CHECK_ARG= # pass extra arguments such as --exclude '^http'
@@ -27,6 +34,7 @@ CONTAINER_REPOSITORY=docker.io
 WEAVER_CONTAINER_REPOSITORY=$(CONTAINER_REPOSITORY)
 SEMCONVGEN_CONTAINER_REPOSITORY=$(CONTAINER_REPOSITORY)
 OPA_CONTAINER_REPOSITORY=$(CONTAINER_REPOSITORY)
+LYCHEE_CONTAINER_REPOSITORY=$(CONTAINER_REPOSITORY)
 
 # Versioned, non-qualified references to containers used in this Makefile.
 # These are parsed from dependencies.Dockerfile so dependabot will autoupdate
@@ -34,6 +42,7 @@ OPA_CONTAINER_REPOSITORY=$(CONTAINER_REPOSITORY)
 VERSIONED_WEAVER_CONTAINER_NO_REPO=$(shell cat dependencies.Dockerfile | awk '$$4=="weaver" {print $$2}')
 VERSIONED_SEMCONVGEN_CONTAINER_NO_REPO=$(shell cat dependencies.Dockerfile | awk '$$4=="semconvgen" {print $$2}')
 VERSIONED_OPA_CONTAINER_NO_REPO=$(shell cat dependencies.Dockerfile | awk '$$4=="opa" {print $$2}')
+VERSIONED_LYCHEE_CONTAINER_NO_REPO=$(shell cat dependencies.Dockerfile | awk '$$4=="lychee" {print $$2}')
 
 # Fully qualified references to containers used in this Makefile. These
 # include the container repository, so that the build will work with tools
@@ -46,7 +55,7 @@ VERSIONED_OPA_CONTAINER_NO_REPO=$(shell cat dependencies.Dockerfile | awk '$$4==
 WEAVER_CONTAINER=$(WEAVER_CONTAINER_REPOSITORY)/$(VERSIONED_WEAVER_CONTAINER_NO_REPO)
 SEMCONVGEN_CONTAINER=$(SEMCONVGEN_CONTAINER_REPOSITORY)/$(VERSIONED_SEMCONVGEN_CONTAINER_NO_REPO)
 OPA_CONTAINER=$(OPA_CONTAINER_REPOSITORY)/$(VERSIONED_OPA_CONTAINER_NO_REPO)
-
+LYCHEE_CONTAINER=$(LYCHEE_CONTAINER_REPOSITORY)/$(VERSIONED_LYCHEE_CONTAINER_NO_REPO)
 
 CHECK_TARGETS=install-tools markdownlint misspell table-check compatibility-check \
 			schema-check check-file-and-folder-names-in-docs
@@ -121,22 +130,23 @@ normalized-link-check:
 
 .PHONY: markdown-link-check
 markdown-link-check: normalized-link-check
-    # pinning lychee to 0.18.1
 	$(DOCKER_RUN) --rm \
-		--mount 'type=bind,source=$(PWD),target=/home/repo' \
-		lycheeverse/lychee:sha-2aa22f8 \
+	    $(DOCKER_USER_IS_HOST_USER_ARG) \
+		--mount 'type=bind,source=$(PWD),target=/home/repo' $(LYCHEE_GITHUB_TOKEN_ARG) \
+		$(LYCHEE_CONTAINER) \
 		--config home/repo/.lychee.toml \
 		--root-dir /home/repo \
 		--verbose \
+		--timeout=60 \
 		$(MARKDOWN_LINK_CHECK_ARG) \
 		home/repo
 
 .PHONY: markdown-link-check-changelog-preview
 markdown-link-check-changelog-preview:
-    # pinning lychee to 0.18.1
 	$(DOCKER_RUN) --rm \
-		--mount 'type=bind,source=$(PWD),target=/home/repo' \
-		lycheeverse/lychee:sha-2aa22f8 \
+	   $(DOCKER_USER_IS_HOST_USER_ARG) \
+		--mount 'type=bind,source=$(PWD),target=/home/repo' $(LYCHEE_GITHUB_TOKEN_ARG) \
+		$(LYCHEE_CONTAINER) \
 		--config /home/repo/.lychee.toml \
 		--root-dir /home/repo \
 		--verbose \
@@ -212,6 +222,7 @@ attribute-registry-generation:
 .PHONY: table-check
 table-check:
 	$(DOCKER_RUN) --rm \
+     	$(DOCKER_USER_IS_HOST_USER_ARG) \
 		--mount 'type=bind,source=$(PWD)/templates,target=/home/weaver/templates,readonly' \
 		--mount 'type=bind,source=$(PWD)/model,target=/home/weaver/source,readonly' \
 		--mount 'type=bind,source=$(PWD)/docs,target=/home/weaver/target,readonly' \
@@ -300,6 +311,10 @@ LATEST_RELEASED_SEMCONV_VERSION := $(shell git ls-remote --tags https://github.c
 .PHONY: check-policies
 check-policies:
 	$(DOCKER_RUN) --rm \
+	    $(DOCKER_USER_IS_HOST_USER_ARG) \
+		--env USER=weaver \
+		--env HOME=/home/weaver \
+		-v $(shell mktemp -d):/home/weaver/.weaver \
 		--mount 'type=bind,source=$(PWD)/policies,target=/home/weaver/policies,readonly' \
 		--mount 'type=bind,source=$(PWD)/model,target=/home/weaver/source,readonly' \
 		${WEAVER_CONTAINER} registry check \
@@ -310,7 +325,7 @@ check-policies:
 # Test rego policies
 .PHONY: test-policies
 test-policies:
-	$(DOCKER_RUN) --rm -v $(PWD)/policies:/policies -v $(PWD)/policies_test:/policies_test \
+	$(DOCKER_RUN) --rm $(DOCKER_USER_IS_HOST_USER_ARG) -v $(PWD)/policies:/policies -v $(PWD)/policies_test:/policies_test \
 	${OPA_CONTAINER} test \
     --var-values \
 	--explain fails \
@@ -321,5 +336,5 @@ test-policies:
 # once github action requirements are updated.
 .PHONY: compatibility-check
 compatibility-check:
-	$(DOCKER_RUN) --rm -v $(PWD)/model:/source -v $(PWD)/docs:/spec --pull=always \
+	$(DOCKER_RUN) --rm $(DOCKER_USER_IS_HOST_USER_ARG) -v $(PWD)/model:/source -v $(PWD)/docs:/spec --pull=always \
 		$(SEMCONVGEN_CONTAINER) --continue-on-validation-errors -f /source compatibility --previous-version $(LATEST_RELEASED_SEMCONV_VERSION)
diff --git a/README.md b/README.md
index ac8d2e8e97..e3bcc626bf 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # <img src="https://opentelemetry.io/img/logos/opentelemetry-logo-nav.png" alt="OpenTelemetry Icon" width="45" height=""> OpenTelemetry Semantic Conventions
 
-[![Checks](https://github.com/open-telemetry/semantic-conventions/workflows/Checks/badge.svg?branch=main)](https://github.com/open-telemetry/semantic-conventions/actions?query=workflow%3A%22Checks%22+branch%3Amain)
+[![Checks](https://github.com/open-telemetry/semantic-conventions/workflows/Checks/badge.svg)](https://github.com/open-telemetry/semantic-conventions/actions?query=workflow%3A%22Checks%22+branch%3Amain)
 [![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/open-telemetry/semantic-conventions.svg?logo=opentelemetry&&color=f5a800&label=Latest%20release)](https://github.com/open-telemetry/semantic-conventions/releases/latest)
 [![Specification Version](https://img.shields.io/badge/OTel_specification_version-v1.44.0-blue?logo=opentelemetry&color=f5a800)](https://github.com/open-telemetry/opentelemetry-specification/releases/tag/v1.44.0)
 
diff --git a/dependencies.Dockerfile b/dependencies.Dockerfile
index 015dbaa363..3672733dc5 100644
--- a/dependencies.Dockerfile
+++ b/dependencies.Dockerfile
@@ -11,3 +11,6 @@ FROM openpolicyagent/opa:1.3.0@sha256:e02dc1957f7a4195f0724762269dfe3309f1334462
 # Semconv gen is used for backwards compatibility checks.
 # TODO(jsuereth): Remove this when no longer used.
 FROM otel/semconvgen:0.25.0@sha256:9df7b8cbaa732277d64d0c0a8604d96bb6f5a36d0e96338cba5dced720c16485 AS semconvgen
+
+# Lychee is used for checking links in documentation.
+FROM lycheeverse/lychee:sha-2aa22f8@sha256:07abefbbc446f9987f9a1f05016e620983c7c70889ee5a1fd00a749d8f53352e AS lychee
\ No newline at end of file
diff --git a/internal/tools/schema_check.sh b/internal/tools/schema_check.sh
index 779fd957e8..33d354d586 100755
--- a/internal/tools/schema_check.sh
+++ b/internal/tools/schema_check.sh
@@ -84,8 +84,10 @@ for file in $schemas_dir/*; do
     exit 2
   fi
 
-  docker run -v $schemas_dir:/schemas \
-  		otel/build-tool-schemas:$BUILD_TOOL_SCHEMAS_VERSION --file /schemas/$ver --version=$ver
+  PODMAN_USERNS=keep-id docker run \
+      -u $(id -u):$(id -g) \
+      -v $schemas_dir:/schemas \
+  		docker.io/otel/build-tool-schemas:$BUILD_TOOL_SCHEMAS_VERSION --file /schemas/$ver --version=$ver
 
   echo "OK"
 done


Reviews:
user: login: trask
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-09T20:43:33Z
user: login: trask
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-09T21:04:16Z
user: login: trask
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-09T21:05:35Z
user: login: michaelsafyan
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-09T21:08:26Z
user: login: trask
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-09T21:12:09Z
user: login: michaelsafyan
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-09T21:17:05Z
user: login: michaelsafyan
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-09T21:17:41Z
user: login: trask
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-10T01:52:55Z
user: login: michaelsafyan
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-10T15:51:57Z
user: login: michaelsafyan
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-10T15:52:15Z
user: login: michaelsafyan
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-10T15:52:31Z
user: login: lmolkova
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-10T20:30:36Z

Review comments:
diff_hunk: @@ -86,13 +95,33 @@ jobs:
         make attribute-registry-generation
         git diff --exit-code './docs/attributes-registry/*.md' || (echo 'Attribute registry markdown is out of date, please run "make attribute-registry-generation" and commit the changes in this PR.' && exit 1)
 
+  semantic-conventions-registry-podman:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v1
+    - name: install podman and podman-docker
+      run: sudo apt-get install podman podman-docker
+    - name: verify registry tables
+      run: |
+        make attribute-registry-generation
+        git diff --exit-code './docs/attributes-registry/*.md' || (echo 'Attribute registry markdown is out of date, please run "make attribute-registry-generation" and commit the changes in this PR.' && exit 1)
path: .github/workflows/checks.yml
user: login: trask
body: what do you think of using a matrix build (e.g. podman `false`/`true`) to avoid the worry of keeping these jobs synchronized?
created_at: 2025-04-09T20:43:33Z
author_association: MEMBER
diff_hunk: @@ -122,19 +123,22 @@ normalized-link-check:
 .PHONY: markdown-link-check
 markdown-link-check: normalized-link-check
 	$(DOCKER_RUN) --rm \
+	    $(DOCKER_USER_IS_HOST_USER_ARG) \
 		--mount 'type=bind,source=$(PWD),target=/home/repo' \
-		lycheeverse/lychee \
+		$(LYCHEE_CONTAINER) \
 		--config home/repo/.lychee.toml \
 		--root-dir /home/repo \
 		--verbose \
+		--timeout=60 \
path: Makefile
user: login: trask
body: thanks, we just started seeing timeout errors recently, which maybe aligns with this release: https://github.com/lycheeverse/lychee-action/releases/tag/v2.4.0, though I can't see anything in the change log for https://github.com/lycheeverse/lychee/releases/tag/lychee-v0.18.1 to explain it

I'm wondering if retries are no longer occurring after a timeout, but this is a good idea to increase from the default 20s to see if that helps 👍 
created_at: 2025-04-09T21:04:16Z
author_association: MEMBER
diff_hunk: @@ -122,19 +123,22 @@ normalized-link-check:
 .PHONY: markdown-link-check
 markdown-link-check: normalized-link-check
 	$(DOCKER_RUN) --rm \
+	    $(DOCKER_USER_IS_HOST_USER_ARG) \
 		--mount 'type=bind,source=$(PWD),target=/home/repo' \
-		lycheeverse/lychee \
+		$(LYCHEE_CONTAINER) \
 		--config home/repo/.lychee.toml \
 		--root-dir /home/repo \
 		--verbose \
+		--timeout=60 \
path: Makefile
user: login: trask
body: I'm going to re-run the CI check a few times on your PR to see if we get consistently better results now...
created_at: 2025-04-09T21:05:34Z
author_association: MEMBER
diff_hunk: @@ -122,19 +123,22 @@ normalized-link-check:
 .PHONY: markdown-link-check
 markdown-link-check: normalized-link-check
 	$(DOCKER_RUN) --rm \
+	    $(DOCKER_USER_IS_HOST_USER_ARG) \
 		--mount 'type=bind,source=$(PWD),target=/home/repo' \
-		lycheeverse/lychee \
+		$(LYCHEE_CONTAINER) \
 		--config home/repo/.lychee.toml \
 		--root-dir /home/repo \
 		--verbose \
+		--timeout=60 \
path: Makefile
user: login: michaelsafyan
body: Thanks. Good to know that this is likely unrelated to this change. I was wondering if it was related to GNU throttling traffic from GitHub (rather than anything to do with the lychee dependency).
created_at: 2025-04-09T21:08:26Z
author_association: CONTRIBUTOR
diff_hunk: @@ -4,10 +4,18 @@ on:
   push:
   pull_request:
 
-jobs:
+jobs:  
+
   markdownlint:
     runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        container-runner: ["docker", "podman"]
     steps:
+    - name: install podman and podman-docker
+      if: ${matrix.container-runner}=="podman"
path: .github/workflows/checks.yml
user: login: trask
body: (I think...)
```suggestion
      if: ${{ matrix.container-runner == 'podman' }}
```
created_at: 2025-04-09T21:12:09Z
author_association: MEMBER
diff_hunk: @@ -4,10 +4,18 @@ on:
   push:
   pull_request:
 
-jobs:
+jobs:  
+
   markdownlint:
     runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        container-runner: ["docker", "podman"]
     steps:
+    - name: install podman and podman-docker
+      if: ${matrix.container-runner}=="podman"
path: .github/workflows/checks.yml
user: login: michaelsafyan
body: Thanks! Updated.
created_at: 2025-04-09T21:17:05Z
author_association: CONTRIBUTOR
diff_hunk: @@ -86,13 +95,33 @@ jobs:
         make attribute-registry-generation
         git diff --exit-code './docs/attributes-registry/*.md' || (echo 'Attribute registry markdown is out of date, please run "make attribute-registry-generation" and commit the changes in this PR.' && exit 1)
 
+  semantic-conventions-registry-podman:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v1
+    - name: install podman and podman-docker
+      run: sudo apt-get install podman podman-docker
+    - name: verify registry tables
+      run: |
+        make attribute-registry-generation
+        git diff --exit-code './docs/attributes-registry/*.md' || (echo 'Attribute registry markdown is out of date, please run "make attribute-registry-generation" and commit the changes in this PR.' && exit 1)
path: .github/workflows/checks.yml
user: login: michaelsafyan
body: Done. Switched to using the matrix mechanism. Thanks for the tip.
created_at: 2025-04-09T21:17:41Z
author_association: CONTRIBUTOR
diff_hunk: @@ -4,10 +4,18 @@ on:
   push:
   pull_request:
 
-jobs:
+jobs:  
+
path: .github/workflows/checks.yml
user: login: trask
body: ```suggestion
jobs:
```
created_at: 2025-04-10T01:47:17Z
author_association: MEMBER
diff_hunk: @@ -36,15 +44,23 @@ jobs:
 
   markdown-link-check:
     runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        container-runner: ["docker", "podman"]
     steps:
     - name: check out code
       uses: actions/checkout@v2
 
     - name: install dependencies
       run: npm install
 
+    - name: install podman and podman-docker
+      if: ${{ matrix.container-runner == 'podman' }}
+      run: sudo apt-get install podman podman-docker
+
     - name: run markdown-link-check
       run: make markdown-link-check
+      timeout-minutes: 5
path: .github/workflows/checks.yml
user: login: trask
body: I think it's ok to leave this off
```suggestion
```
created_at: 2025-04-10T01:48:04Z
author_association: MEMBER
diff_hunk: @@ -122,19 +123,22 @@ normalized-link-check:
 .PHONY: markdown-link-check
 markdown-link-check: normalized-link-check
 	$(DOCKER_RUN) --rm \
+	    $(DOCKER_USER_IS_HOST_USER_ARG) \
 		--mount 'type=bind,source=$(PWD),target=/home/repo' \
-		lycheeverse/lychee \
+		$(LYCHEE_CONTAINER) \
 		--config home/repo/.lychee.toml \
 		--root-dir /home/repo \
 		--verbose \
+		--timeout=60 \
path: Makefile
user: login: trask
body: unfortunately I'm still seeing sporadic timeouts, but let's keep this change anyways 👍
created_at: 2025-04-10T01:52:34Z
author_association: MEMBER
diff_hunk: @@ -4,10 +4,18 @@ on:
   push:
   pull_request:
 
-jobs:
+jobs:  
+
path: .github/workflows/checks.yml
user: login: michaelsafyan
body: Done. Removed trailing whitespace.
created_at: 2025-04-10T15:51:57Z
author_association: CONTRIBUTOR
diff_hunk: @@ -36,15 +44,23 @@ jobs:
 
   markdown-link-check:
     runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        container-runner: ["docker", "podman"]
     steps:
     - name: check out code
       uses: actions/checkout@v2
 
     - name: install dependencies
       run: npm install
 
+    - name: install podman and podman-docker
+      if: ${{ matrix.container-runner == 'podman' }}
+      run: sudo apt-get install podman podman-docker
+
     - name: run markdown-link-check
       run: make markdown-link-check
+      timeout-minutes: 5
path: .github/workflows/checks.yml
user: login: michaelsafyan
body: Done. Removed this line.
created_at: 2025-04-10T15:52:15Z
author_association: CONTRIBUTOR
diff_hunk: @@ -122,19 +123,22 @@ normalized-link-check:
 .PHONY: markdown-link-check
 markdown-link-check: normalized-link-check
 	$(DOCKER_RUN) --rm \
+	    $(DOCKER_USER_IS_HOST_USER_ARG) \
 		--mount 'type=bind,source=$(PWD),target=/home/repo' \
-		lycheeverse/lychee \
+		$(LYCHEE_CONTAINER) \
 		--config home/repo/.lychee.toml \
 		--root-dir /home/repo \
 		--verbose \
+		--timeout=60 \
path: Makefile
user: login: michaelsafyan
body: Thanks. Left as-is.
created_at: 2025-04-10T15:52:31Z
author_association: CONTRIBUTOR

PR comments:
user: login: trask
created_at: 2025-04-09T16:45:28Z
body: @michaelsafyan just a heads up it looks like the new workflow is failing
author_association: MEMBER
user: login: michaelsafyan
created_at: 2025-04-09T17:28:47Z
body: Thanks, @trask ! Looking into the cause...
author_association: CONTRIBUTOR
user: login: lmolkova
created_at: 2025-04-10T22:23:29Z
body: Do we have to run two copies of each check in the CI? It's especially problematic for the link check which is long and we know people are blocking link checker (presumably for being spammy).

The one that's really useful locally is  `make table-generation attribute-registry-generation`, i.e. `semantic-conventions`  in the CI - if we can test it works with both, it'd be very unlikely for others to be broken.

So I'd propose to run `semantic-conventions` with podman and docker and keep the rest on docker. 
author_association: MEMBER
user: login: michaelsafyan
created_at: 2025-04-15T17:42:28Z
body: > Do we have to run two copies of each check in the CI? It's especially problematic for the link check which is long and we know people are blocking link checker (presumably for being spammy).
> 
> The one that's really useful locally is `make table-generation attribute-registry-generation`, i.e. `semantic-conventions` in the CI - if we can test it works with both, it'd be very unlikely for others to be broken.
> 
> So I'd propose to run `semantic-conventions` with podman and docker and keep the rest on docker.

That's fair feedback, @lmolkova .

I've created a separate workflow file that is executed only when the components of the build system change for exercising podman, which I think should address the concern of this adding too much overhead in normal processes.

This new workflow does, however, execute all of the steps that are present in the "CONTRIBUTING.md" guide. My concern with omitting some of the steps is that it then becomes easy to break/block some of the processes/workflows that might be used during local development for those using podman.
author_association: CONTRIBUTOR
user: login: trask
created_at: 2025-04-15T19:55:43Z
body: not sure what's going on with CI, closing and re-opening to kick it
author_association: MEMBER
user: login: lmolkova
created_at: 2025-04-15T19:59:39Z
body: the names of the checks have changed but we still have old names in the branch protection rules as required. Wonder if we can preserve the old check names? Otherwise I can go and update them
author_association: MEMBER
user: login: lmolkova
created_at: 2025-04-15T20:04:08Z
body: ah, the latest commit refactors  how checks are done, but I don't think it does all the checks we used to run. 
Is there a need for it?

Can we have one check that validates basic features with podman, but leave the rest intact?
author_association: MEMBER
user: login: michaelsafyan
created_at: 2025-04-15T20:28:25Z
body: > ah, the latest commit refactors how checks are done, but I don't think it does all the checks we used to run. Is there a need for it?
> 
> Can we have one check that validates basic features with podman, but leave the rest intact?

All the original checks in `checks.yml` are still there, but there was a stray line added and removed which may have broken the YAML config for it. I just undid that, which should hopefully fix the GitHub workflow.
author_association: CONTRIBUTOR
user: login: lmolkova
created_at: 2025-04-15T20:43:13Z
body: thanks a lot @michaelsafyan !
author_association: MEMBER