diff --git a/.all-contributorsrc b/.all-contributorsrc index 673cdcff..e6dfb928 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -49,7 +49,7 @@ "login": "ktkachov-arm", "name": "ktkachov-arm", "avatar_url": "https://avatars.githubusercontent.com/u/74917949?v=4", - "profile": "https://github.com/ktkachov-arm", + "profile": "", "contributions": [ "code", "content", @@ -284,7 +284,7 @@ "login": "tmatheson-arm", "name": "tmatheson-arm", "avatar_url": "https://avatars.githubusercontent.com/u/76168689?v=4", - "profile": "https://github.com/tmatheson-arm", + "profile": "", "contributions": [ "code" ] @@ -311,7 +311,7 @@ "login": "andrewcarlotti", "name": "Andrew Carlotti", "avatar_url": "https://avatars.githubusercontent.com/u/11681428?v=4", - "profile": "https://github.com/andrewcarlotti", + "profile": "", "contributions": [ "review" ] @@ -392,7 +392,7 @@ "login": "rockdreamer", "name": "Claudio Bantaloukas", "avatar_url": "https://avatars.githubusercontent.com/u/111884?v=4", - "profile": "https://www.rdfm.org/", + "profile": "https://rdfm.org/", "contributions": [ "code" ] diff --git a/.github/scripts/check_links.py b/.github/scripts/check_links.py new file mode 100644 index 00000000..ad35fdf2 --- /dev/null +++ b/.github/scripts/check_links.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: Copyright 2026 Arm Limited and/or its affiliates +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed 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. + +import subprocess +import sys +import tempfile +import xml.etree.ElementTree as ET +from pathlib import Path +from urllib.parse import urlparse + + +CONFIG_FILE = Path(".github/workflows/markdown-link-check.json") + + +def testcase_properties(testcase: ET.Element) -> dict[str, str]: + properties: dict[str, str] = {} + + properties_element = testcase.find("properties") + if properties_element is None: + return properties + + for prop in properties_element.findall("property"): + name = prop.get("name") + value = prop.get("value") + + if name is not None and value is not None: + properties[name] = value + + return properties + + +def main() -> int: + if len(sys.argv) != 2: + print( + f"Usage: {Path(sys.argv[0]).name} ", + file=sys.stderr, + ) + return 2 + + markdown_file = Path(sys.argv[1]) + + with tempfile.NamedTemporaryFile( + suffix=".xml", + delete=False, + ) as report: + report_path = Path(report.name) + + cmd = [ + "markdown-link-check", + "--reporters", + "junit", + "--junit-output", + str(report_path), + "--config", + str(CONFIG_FILE), + str(markdown_file), + ] + + proc = subprocess.run( + cmd, + text=True, + capture_output=True, + check=False, + ) + + if proc.stdout: + print(proc.stdout, end="") + + if proc.stderr: + print(proc.stderr, end="", file=sys.stderr) + + try: + root = ET.parse(report_path).getroot() + except (ET.ParseError, OSError) as error: + print( + f"Could not read markdown-link-check report for " + f"{markdown_file}: {error}", + file=sys.stderr, + ) + return proc.returncode if proc.returncode != 0 else 2 + finally: + report_path.unlink(missing_ok=True) + + failed = False + + for testcase in root.findall(".//testcase"): + properties = testcase_properties(testcase) + + url = properties.get("url", testcase.get("name", "unknown")) + status = properties.get("status", "unknown") + status_code = properties.get("statusCode") + + parsed_url = urlparse(url) + + is_ignored_developer_arm_403 = ( + parsed_url.hostname == "developer.arm.com" + and status == "dead" + and status_code == "403" + ) + + if is_ignored_developer_arm_403: + print(f"IGNORED (403 from developer.arm.com): {url}") + continue + + failure = testcase.find("failure") + error = testcase.find("error") + + if failure is not None or error is not None: + failed = True + print( + f"BROKEN ({status_code or status}): {url}", + file=sys.stderr, + ) + + return 1 if failed else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 37f3e1b6..7a191e97 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.1.7 - - uses: gaurav-nelson/github-action-markdown-link-check@v1 - with: - config-file: '.github/workflows/markdown-link-check.json' + - name: Install markdown-link-check + run: npm install -g markdown-link-check + - name: Check links + run: | + find . -name '*.md' -print0 | \ + xargs -0 -n 1 python3 .github/scripts/check_links.py diff --git a/.github/workflows/markdown-link-check.json b/.github/workflows/markdown-link-check.json index f28711c4..e52a54cd 100644 --- a/.github/workflows/markdown-link-check.json +++ b/.github/workflows/markdown-link-check.json @@ -2,6 +2,9 @@ "ignorePatterns": [ { "pattern": "^https://developer.arm.com/architectures/instruction-sets/intrinsics/" + }, + { + "pattern": "^#" } ] } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d42f1a1f..bd641d4e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -95,7 +95,7 @@ will retain the copyright. # All contributors This project follows the [allcontributors -guidelines](https://allcontributors.org/docs/en/overview). We assume +guidelines](https://allcontributors.org/en/reference/). We assume that contributors are happy to be added to the [list of contributors in the main README file](README.md#contributors-). Please let us know explicitly if that is not the case in the PR or in the issue you have diff --git a/README.md b/README.md index 2029b04e..d261e466 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ before it was released as an open source project. ## Contributors ✨ -Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): +Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/en/reference/emoji-key/)): @@ -92,7 +92,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Matt
Matt

💻 ValeriaDaneva
ValeriaDaneva

💻 🚇 👀 Francesco Petrogalli
Francesco Petrogalli

💻 👀 - ktkachov-arm
ktkachov-arm

💻 🖋 🚇 👀 + ktkachov-arm
ktkachov-arm
💻 🖋 🚇 👀 sallyarmneale
sallyarmneale

👀 Simon Tatham
Simon Tatham

👀 @@ -125,10 +125,10 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d bwmf2
bwmf2

💻 - tmatheson-arm
tmatheson-arm

💻 + tmatheson-arm
tmatheson-arm
💻 Anatoly Trosinenko
Anatoly Trosinenko

💻 Lucas Duarte Prates
Lucas Duarte Prates

💻 - Andrew Carlotti
Andrew Carlotti

👀 + Andrew Carlotti
Andrew Carlotti
👀 Alexandros Lamprineas
Alexandros Lamprineas

💻 Lukacma
Lukacma

📖 @@ -139,7 +139,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Kerry McLaughlin
Kerry McLaughlin

💻 Momchil Velikov
Momchil Velikov

💻 Yury Khrustalev
Yury Khrustalev

💻 - Claudio Bantaloukas
Claudio Bantaloukas

💻 + Claudio Bantaloukas
Claudio Bantaloukas

💻 Alfie Richards
Alfie Richards

💻 diff --git a/main/acle.md b/main/acle.md index 7d52575f..2496db92 100644 --- a/main/acle.md +++ b/main/acle.md @@ -534,23 +534,23 @@ This document refers to the following documents. * ARMARMv81 Arm, Armv8.1 Extension, [The ARMv8-A architecture and its ongoing - development](http://community.arm.com/groups/processors/blog/2014/12/02/the-armv8-a-architecture-and-its-ongoing-development) + development](https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/the-armv8-a-architecture-and-its-ongoing-development) * ARMARMv82 Arm, Armv8.2 Extension, [Armv8-A architecture - evolution](https://community.arm.com/groups/processors/blog/2016/01/05/armv8-a-architecture-evolution) + evolution](https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/armv8-a-architecture-evolution) * ARMARMv83 Arm, Armv8.3 Extension, [Armv8-A architecture: 2016 - additions](https://community.arm.com/processors/b/blog/posts/armv8-a-architecture-2016-additions) + additions](https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/armv8-a-architecture-2016-additions) * ARMARMv84 Arm, Armv8.4 Extension, [Introducing 2017’s extensions to the Arm - Architecture](https://community.arm.com/processors/b/blog/posts/introducing-2017s-extensions-to-the-arm-architecture) + Architecture](https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/introducing-2017s-extensions-to-the-arm-architecture) * ARMARMv85 Arm, Armv8.5 Extension, [Arm A-Profile Architecture Developments 2018: - Armv8.5-A](https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/arm-a-profile-architecture-2018-developments-armv85a) + Armv8.5-A](https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-2018-developments-armv85a) * ARMv7M Arm, Arm Architecture Reference Manual (7-M), Arm DDI 0403C @@ -560,7 +560,7 @@ This document refers to the following documents. * Bfloat16 Arm, [BFloat16 processing for Neural Networks on - Armv8-A](https://community.arm.com/developer/ip-products/processors/b/ml-ip-blog/posts/bfloat16-processing-for-neural-networks-on-armv8_2d00_a) + Armv8-A](https://developer.arm.com/community/arm-community-blogs/b/ai-blog/posts/bfloat16-processing-for-neural-networks-on-armv8_2d00_a) * C11 ISO, Standard C (based on draft N1570), ISO/IEC 9899:2011 diff --git a/main/design_documents/__ARM_FEATURE_MOPS.md b/main/design_documents/__ARM_FEATURE_MOPS.md index e4f8adb6..eec6c8a8 100644 --- a/main/design_documents/__ARM_FEATURE_MOPS.md +++ b/main/design_documents/__ARM_FEATURE_MOPS.md @@ -1,6 +1,6 @@ # Design Document for `__ARM_FEATURE_MOPS` -Following the announcement of the [2021 Architecture Extensions](https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/arm-a-profile-architecture-developments-2021), +Following the announcement of the [2021 Architecture Extensions](https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2021), we are extending the ACLE to add support for the new instructions that standardise the memcpy family of operations, which were introduced in Armv8.8-A and Armv9.3-A.