ci: Fix Linux container naming and add actionlint to pre-commit hooks (#13)
* Fix container tagging in Docker workflow * ci: Add actionlint to GitHub Actions workflows * Fix actionlint syntax error in macro-test workflow
This commit is contained in:
@@ -31,7 +31,7 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
run: |
|
run: |
|
||||||
TAG="${GITHUB_REF#refs/tags/}"
|
TAG="${GITHUB_REF#refs/tags/}"
|
||||||
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Validate semantic versioning format (v1.2.3 or v1.2.3-prerelease)
|
# Validate semantic versioning format (v1.2.3 or v1.2.3-prerelease)
|
||||||
if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
||||||
@@ -41,24 +41,26 @@ jobs:
|
|||||||
|
|
||||||
# Extract version without 'v' prefix
|
# Extract version without 'v' prefix
|
||||||
VERSION="${TAG#v}"
|
VERSION="${TAG#v}"
|
||||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Extract major.minor for additional tag
|
# Extract major.minor for additional tag
|
||||||
MAJOR_MINOR=$(echo "$VERSION" | cut -d. -f1,2)
|
MAJOR_MINOR=$(echo "$VERSION" | cut -d. -f1,2)
|
||||||
echo "major_minor=$MAJOR_MINOR" >> $GITHUB_OUTPUT
|
echo "major_minor=$MAJOR_MINOR" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Extract major for additional tag
|
# Extract major for additional tag
|
||||||
MAJOR=$(echo "$VERSION" | cut -d. -f1)
|
MAJOR=$(echo "$VERSION" | cut -d. -f1)
|
||||||
echo "major=$MAJOR" >> $GITHUB_OUTPUT
|
echo "major=$MAJOR" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Check if this is a prerelease
|
# Check if this is a prerelease
|
||||||
if [[ "$TAG" =~ -[a-zA-Z0-9.]+ ]]; then
|
if [[ "$TAG" =~ -[a-zA-Z0-9.]+ ]]; then
|
||||||
echo "is_prerelease=true" >> $GITHUB_OUTPUT
|
echo "is_prerelease=true" >> "$GITHUB_OUTPUT"
|
||||||
|
IS_PRERELEASE="true"
|
||||||
else
|
else
|
||||||
echo "is_prerelease=false" >> $GITHUB_OUTPUT
|
echo "is_prerelease=false" >> "$GITHUB_OUTPUT"
|
||||||
|
IS_PRERELEASE="false"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Parsed version: $VERSION (major: $MAJOR, major.minor: $MAJOR_MINOR, prerelease: ${{ steps.version.outputs.is_prerelease }})"
|
echo "Parsed version: $VERSION (major: $MAJOR, major.minor: $MAJOR_MINOR, prerelease: $IS_PRERELEASE)"
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: docker/setup-qemu-action@v3
|
||||||
@@ -129,19 +131,21 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate release summary
|
- name: Generate release summary
|
||||||
run: |
|
run: |
|
||||||
echo "## Docker Release Summary" >> $GITHUB_STEP_SUMMARY
|
{
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "## Docker Release Summary"
|
||||||
echo "**Version:** ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "**Prerelease:** ${{ steps.version.outputs.is_prerelease }}" >> $GITHUB_STEP_SUMMARY
|
echo "**Version:** ${{ steps.version.outputs.version }}"
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "**Prerelease:** ${{ steps.version.outputs.is_prerelease }}"
|
||||||
echo "### Published Tags" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "### Published Tags"
|
||||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "${{ steps.meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY
|
echo "\`\`\`"
|
||||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
echo "${{ steps.meta.outputs.tags }}"
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "\`\`\`"
|
||||||
echo "### Pull Command" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "### Pull Command"
|
||||||
echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "docker pull ${{ env.DOCKERHUB_REPO }}:${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
echo "\`\`\`bash"
|
||||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
echo "docker pull ${{ env.DOCKERHUB_REPO }}:${{ steps.version.outputs.version }}"
|
||||||
|
echo "\`\`\`"
|
||||||
|
} >> "$GITHUB_STEP_SUMMARY"
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ jobs:
|
|||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
images: ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,event=branch
|
type=ref,event=branch
|
||||||
type=ref,event=pr
|
type=ref,event=pr
|
||||||
@@ -74,17 +74,18 @@ jobs:
|
|||||||
# For tagged releases: v1.0.0 -> 1.0.0
|
# For tagged releases: v1.0.0 -> 1.0.0
|
||||||
# For dev builds: v1.0.0-5-g1234567 -> 1.0.0.dev5+g1234567
|
# For dev builds: v1.0.0-5-g1234567 -> 1.0.0.dev5+g1234567
|
||||||
if git describe --tags --exact-match 2>/dev/null; then
|
if git describe --tags --exact-match 2>/dev/null; then
|
||||||
VERSION=$(git describe --tags --exact-match | sed 's/^v//')
|
TAG=$(git describe --tags --exact-match)
|
||||||
|
VERSION="${TAG#v}"
|
||||||
else
|
else
|
||||||
# Get the latest tag or use 0.0.0 if none exists
|
# Get the latest tag or use 0.0.0 if none exists
|
||||||
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
|
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
|
||||||
BASE_VERSION=$(echo "$LATEST_TAG" | sed 's/^v//')
|
BASE_VERSION="${LATEST_TAG#v}"
|
||||||
# Count commits since tag
|
# Count commits since tag
|
||||||
COMMITS=$(git rev-list "${LATEST_TAG}..HEAD" --count 2>/dev/null || echo "0")
|
COMMITS=$(git rev-list "${LATEST_TAG}..HEAD" --count 2>/dev/null || echo "0")
|
||||||
SHORT_SHA=$(git rev-parse --short HEAD)
|
SHORT_SHA=$(git rev-parse --short HEAD)
|
||||||
VERSION="${BASE_VERSION}.dev${COMMITS}+g${SHORT_SHA}"
|
VERSION="${BASE_VERSION}.dev${COMMITS}+g${SHORT_SHA}"
|
||||||
fi
|
fi
|
||||||
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"
|
||||||
echo "Detected version: $VERSION"
|
echo "Detected version: $VERSION"
|
||||||
|
|
||||||
- name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
@@ -116,7 +117,7 @@ jobs:
|
|||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
uses: aquasecurity/trivy-action@master
|
uses: aquasecurity/trivy-action@master
|
||||||
with:
|
with:
|
||||||
image-ref: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}
|
image-ref: ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}
|
||||||
format: "sarif"
|
format: "sarif"
|
||||||
output: "trivy-results.sarif"
|
output: "trivy-results.sarif"
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
run: |
|
run: |
|
||||||
TAG="${GITHUB_REF#refs/tags/}"
|
TAG="${GITHUB_REF#refs/tags/}"
|
||||||
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Extract version without 'v' prefix
|
# Extract version without 'v' prefix
|
||||||
VERSION="${TAG#v}"
|
VERSION="${TAG#v}"
|
||||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
echo "Packaging macros for version: $VERSION"
|
echo "Packaging macros for version: $VERSION"
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ jobs:
|
|||||||
VERSION="${{ steps.version.outputs.version }}"
|
VERSION="${{ steps.version.outputs.version }}"
|
||||||
|
|
||||||
# Create a staging directory
|
# Create a staging directory
|
||||||
mkdir -p staging/freecad-macros-${VERSION}
|
mkdir -p "staging/freecad-macros-${VERSION}"
|
||||||
|
|
||||||
# Copy macro directories (excluding test files and development artifacts)
|
# Copy macro directories (excluding test files and development artifacts)
|
||||||
for macro_dir in macros/*/; do
|
for macro_dir in macros/*/; do
|
||||||
@@ -99,7 +99,7 @@ jobs:
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
# List included macros in the README
|
# List included macros in the README
|
||||||
for macro_dir in staging/freecad-macros-${VERSION}/*/; do
|
for macro_dir in "staging/freecad-macros-${VERSION}/"*/; do
|
||||||
if [ -d "$macro_dir" ]; then
|
if [ -d "$macro_dir" ]; then
|
||||||
macro_name=$(basename "$macro_dir")
|
macro_name=$(basename "$macro_dir")
|
||||||
echo "- **${macro_name}**: See ${macro_name}/README*.md for details" >> "staging/freecad-macros-${VERSION}/README.md"
|
echo "- **${macro_name}**: See ${macro_name}/README*.md for details" >> "staging/freecad-macros-${VERSION}/README.md"
|
||||||
@@ -131,7 +131,7 @@ jobs:
|
|||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
echo "Created archives:"
|
echo "Created archives:"
|
||||||
ls -la freecad-macros-${VERSION}.*
|
ls -la "freecad-macros-${VERSION}."*
|
||||||
|
|
||||||
- name: Upload macro archives to release
|
- name: Upload macro archives to release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
@@ -146,24 +146,28 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
VERSION="${{ steps.version.outputs.version }}"
|
VERSION="${{ steps.version.outputs.version }}"
|
||||||
|
|
||||||
echo "## FreeCAD Macros Release" >> $GITHUB_STEP_SUMMARY
|
{
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "## FreeCAD Macros Release"
|
||||||
echo "**Version:** ${VERSION}" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "**Version:** ${VERSION}"
|
||||||
echo "### Packaged Macros" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "### Packaged Macros"
|
||||||
|
echo ""
|
||||||
|
} >> "$GITHUB_STEP_SUMMARY"
|
||||||
|
|
||||||
for macro_dir in macros/*/; do
|
for macro_dir in macros/*/; do
|
||||||
if [ -d "$macro_dir" ]; then
|
if [ -d "$macro_dir" ]; then
|
||||||
macro_name=$(basename "$macro_dir")
|
macro_name=$(basename "$macro_dir")
|
||||||
echo "- ${macro_name}" >> $GITHUB_STEP_SUMMARY
|
echo "- ${macro_name}" >> "$GITHUB_STEP_SUMMARY"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
{
|
||||||
echo "### Download" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "### Download"
|
||||||
echo "The macro archives have been attached to the GitHub release:" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "The macro archives have been attached to the GitHub release:"
|
||||||
echo "- \`freecad-macros-${VERSION}.tar.gz\` (Linux/macOS)" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "- \`freecad-macros-${VERSION}.zip\` (Windows)" >> $GITHUB_STEP_SUMMARY
|
echo "- \`freecad-macros-${VERSION}.tar.gz\` (Linux/macOS)"
|
||||||
|
echo "- \`freecad-macros-${VERSION}.zip\` (Windows)"
|
||||||
|
} >> "$GITHUB_STEP_SUMMARY"
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ jobs:
|
|||||||
RELEASE_INFO=$(curl -s https://api.github.com/repos/FreeCAD/FreeCAD/releases/latest)
|
RELEASE_INFO=$(curl -s https://api.github.com/repos/FreeCAD/FreeCAD/releases/latest)
|
||||||
TAG_NAME=$(echo "$RELEASE_INFO" | jq -r '.tag_name')
|
TAG_NAME=$(echo "$RELEASE_INFO" | jq -r '.tag_name')
|
||||||
echo "Latest FreeCAD release: $TAG_NAME"
|
echo "Latest FreeCAD release: $TAG_NAME"
|
||||||
echo "tag=$TAG_NAME" >> $GITHUB_OUTPUT
|
echo "tag=$TAG_NAME" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Find the Linux AppImage asset URL
|
# Find the Linux AppImage asset URL
|
||||||
APPIMAGE_URL=$(echo "$RELEASE_INFO" | jq -r '.assets[] | select(.name | test("Linux-x86_64.*\\.AppImage$")) | .browser_download_url' | head -1)
|
APPIMAGE_URL=$(echo "$RELEASE_INFO" | jq -r '.assets[] | select(.name | test("Linux-x86_64.*\\.AppImage$")) | .browser_download_url' | head -1)
|
||||||
@@ -55,8 +55,8 @@ jobs:
|
|||||||
|
|
||||||
echo "AppImage URL: $APPIMAGE_URL"
|
echo "AppImage URL: $APPIMAGE_URL"
|
||||||
echo "AppImage name: $APPIMAGE_NAME"
|
echo "AppImage name: $APPIMAGE_NAME"
|
||||||
echo "url=$APPIMAGE_URL" >> $GITHUB_OUTPUT
|
echo "url=$APPIMAGE_URL" >> "$GITHUB_OUTPUT"
|
||||||
echo "name=$APPIMAGE_NAME" >> $GITHUB_OUTPUT
|
echo "name=$APPIMAGE_NAME" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- name: Cache FreeCAD AppImage
|
- name: Cache FreeCAD AppImage
|
||||||
id: cache-freecad
|
id: cache-freecad
|
||||||
@@ -126,7 +126,7 @@ jobs:
|
|||||||
# Capture stdout to a file so we can extract the instance ID
|
# Capture stdout to a file so we can extract the instance ID
|
||||||
freecadcmd src/freecad_mcp/freecad_plugin/headless_server.py > /tmp/freecad_bridge.log 2>&1 &
|
freecadcmd src/freecad_mcp/freecad_plugin/headless_server.py > /tmp/freecad_bridge.log 2>&1 &
|
||||||
FREECAD_PID=$!
|
FREECAD_PID=$!
|
||||||
echo "FREECAD_PID=$FREECAD_PID" >> $GITHUB_ENV
|
echo "FREECAD_PID=$FREECAD_PID" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
# Wait for bridge to be ready (check XML-RPC port)
|
# Wait for bridge to be ready (check XML-RPC port)
|
||||||
echo "Waiting for MCP bridge to start..."
|
echo "Waiting for MCP bridge to start..."
|
||||||
@@ -138,10 +138,11 @@ jobs:
|
|||||||
echo "MCP bridge is ready (took ${i}s)"
|
echo "MCP bridge is ready (took ${i}s)"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
if [ $i -eq 60 ]; then
|
if [ "$i" -eq 60 ]; then
|
||||||
echo "ERROR: MCP bridge did not start within 60s"
|
echo "ERROR: MCP bridge did not start within 60s"
|
||||||
echo "=== Bridge log ===" && cat /tmp/freecad_bridge.log || true
|
echo "=== Bridge log ==="
|
||||||
kill $FREECAD_PID 2>/dev/null || true
|
cat /tmp/freecad_bridge.log || true
|
||||||
|
kill "$FREECAD_PID" 2>/dev/null || true
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
sleep 1
|
sleep 1
|
||||||
@@ -176,7 +177,7 @@ jobs:
|
|||||||
if: always()
|
if: always()
|
||||||
run: |
|
run: |
|
||||||
if [ -n "$FREECAD_PID" ]; then
|
if [ -n "$FREECAD_PID" ]; then
|
||||||
kill $FREECAD_PID 2>/dev/null || true
|
kill "$FREECAD_PID" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
lint-macros:
|
lint-macros:
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
run: |
|
run: |
|
||||||
TAG="${GITHUB_REF#refs/tags/}"
|
TAG="${GITHUB_REF#refs/tags/}"
|
||||||
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Validate semantic versioning format (v1.2.3 or v1.2.3-prerelease)
|
# Validate semantic versioning format (v1.2.3 or v1.2.3-prerelease)
|
||||||
if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
||||||
@@ -36,16 +36,18 @@ jobs:
|
|||||||
|
|
||||||
# Extract version without 'v' prefix
|
# Extract version without 'v' prefix
|
||||||
VERSION="${TAG#v}"
|
VERSION="${TAG#v}"
|
||||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Check if this is a prerelease
|
# Check if this is a prerelease
|
||||||
if [[ "$TAG" =~ -[a-zA-Z0-9.]+ ]]; then
|
if [[ "$TAG" =~ -[a-zA-Z0-9.]+ ]]; then
|
||||||
echo "is_prerelease=true" >> $GITHUB_OUTPUT
|
echo "is_prerelease=true" >> "$GITHUB_OUTPUT"
|
||||||
|
IS_PRERELEASE="true"
|
||||||
else
|
else
|
||||||
echo "is_prerelease=false" >> $GITHUB_OUTPUT
|
echo "is_prerelease=false" >> "$GITHUB_OUTPUT"
|
||||||
|
IS_PRERELEASE="false"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Parsed version: $VERSION (prerelease: ${{ steps.version.outputs.is_prerelease }})"
|
echo "Parsed version: $VERSION (prerelease: $IS_PRERELEASE)"
|
||||||
|
|
||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@v7
|
uses: astral-sh/setup-uv@v7
|
||||||
@@ -205,32 +207,40 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Generate release summary
|
- name: Generate release summary
|
||||||
|
env:
|
||||||
|
REF_NAME: ${{ github.ref_name }}
|
||||||
run: |
|
run: |
|
||||||
echo "## PyPI Release Summary" >> $GITHUB_STEP_SUMMARY
|
{
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "## PyPI Release Summary"
|
||||||
echo "**Tag:** ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "**Tag:** $REF_NAME"
|
||||||
|
echo ""
|
||||||
|
} >> "$GITHUB_STEP_SUMMARY"
|
||||||
|
|
||||||
if [[ "${{ github.ref }}" == *"-"* ]]; then
|
if [[ "$REF_NAME" == *"-"* ]]; then
|
||||||
echo "**Type:** Prerelease (published to TestPyPI)" >> $GITHUB_STEP_SUMMARY
|
{
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "**Type:** Prerelease (published to TestPyPI)"
|
||||||
echo "### Install from TestPyPI" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "### Install from TestPyPI"
|
||||||
echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ freecad-robust-mcp" >> $GITHUB_STEP_SUMMARY
|
echo "\`\`\`bash"
|
||||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
echo "pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ freecad-robust-mcp"
|
||||||
|
echo "\`\`\`"
|
||||||
|
} >> "$GITHUB_STEP_SUMMARY"
|
||||||
else
|
else
|
||||||
echo "**Type:** Stable release (published to PyPI)" >> $GITHUB_STEP_SUMMARY
|
{
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "**Type:** Stable release (published to PyPI)"
|
||||||
echo "### Install from PyPI" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "### Install from PyPI"
|
||||||
echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "pip install freecad-robust-mcp" >> $GITHUB_STEP_SUMMARY
|
echo "\`\`\`bash"
|
||||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
echo "pip install freecad-robust-mcp"
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "\`\`\`"
|
||||||
echo "Or with uv:" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "Or with uv:"
|
||||||
echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
|
echo ""
|
||||||
echo "uv pip install freecad-robust-mcp" >> $GITHUB_STEP_SUMMARY
|
echo "\`\`\`bash"
|
||||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
echo "uv pip install freecad-robust-mcp"
|
||||||
|
echo "\`\`\`"
|
||||||
|
} >> "$GITHUB_STEP_SUMMARY"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -193,6 +193,15 @@ repos:
|
|||||||
- id: check-dependabot
|
- id: check-dependabot
|
||||||
name: validate Dependabot config
|
name: validate Dependabot config
|
||||||
|
|
||||||
|
# ==========================================================================
|
||||||
|
# GitHub Actions Linting
|
||||||
|
# ==========================================================================
|
||||||
|
- repo: https://github.com/rhysd/actionlint
|
||||||
|
rev: v1.7.4
|
||||||
|
hooks:
|
||||||
|
- id: actionlint
|
||||||
|
name: actionlint (GitHub Actions linter)
|
||||||
|
|
||||||
# ==========================================================================
|
# ==========================================================================
|
||||||
# Shell Script Linting
|
# Shell Script Linting
|
||||||
# ==========================================================================
|
# ==========================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user