mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 06:33:37 +08:00
feat: 添加最新版本获取功能,更新文档示例以展示如何使用最新版本进行部署
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
- 🏷️ **标签触发检测**:自动识别版本标签(如 `v1.2.3`)并提取版本号
|
- 🏷️ **标签触发检测**:自动识别版本标签(如 `v1.2.3`)并提取版本号
|
||||||
- 🔄 **版本分支检测**:识别版本分支(如 `v1.2.x`)并提取版本信息
|
- 🔄 **版本分支检测**:识别版本分支(如 `v1.2.x`)并提取版本信息
|
||||||
- 🆕 **常规分支处理**:对于非版本分支提供基础信息
|
- 🆕 **常规分支处理**:对于非版本分支提供基础信息
|
||||||
|
- 📦 **最新版本获取**:始终获取仓库中的最新版本号,无论触发方式如何
|
||||||
- 🎯 **灵活的版本前缀**:支持自定义版本前缀(默认为 `v`)
|
- 🎯 **灵活的版本前缀**:支持自定义版本前缀(默认为 `v`)
|
||||||
- 🔧 **版本格式转换**:自动生成横线格式的版本号(如 `v1.2.3` → `v1-2-3`)
|
- 🔧 **版本格式转换**:自动生成横线格式的版本号(如 `v1.2.3` → `v1-2-3`)
|
||||||
- 📤 **环境变量输出**:自动设置环境变量供后续步骤使用
|
- 📤 **环境变量输出**:自动设置环境变量供后续步骤使用
|
||||||
@@ -14,21 +15,24 @@
|
|||||||
|
|
||||||
## 输入参数
|
## 输入参数
|
||||||
|
|
||||||
| 参数名 | 描述 | 必需 | 默认值 |
|
| 参数名 | 描述 | 必需 | 默认值 |
|
||||||
| ---------------- | -------------------------------- | ---- | ------ |
|
| -------------------------- | ------------------------------ | ---- | ------- |
|
||||||
| `version-prefix` | 版本前缀,用于匹配版本标签或分支 | 否 | `v` |
|
| `version-prefix` | 版本前缀,用于匹配版本标签或分支 | 否 | `v` |
|
||||||
|
| `use-latest-version` | 在非版本触发时是否使用最新版本 | 否 | `false` |
|
||||||
|
|
||||||
## 输出参数
|
## 输出参数
|
||||||
|
|
||||||
| 参数名 | 描述 | 示例值 |
|
| 参数名 | 描述 | 示例值 |
|
||||||
| -------------------- | ------------------------ | ------------------------------- |
|
| ------------------------------ | ---------------------------- | ------------------------------- |
|
||||||
| `ref-type` | 引用类型 | `tag` 或 `branch` |
|
| `ref-type` | 引用类型 | `tag` 或 `branch` |
|
||||||
| `ref-name` | 引用名称 | `v1.2.3`、`main`、`feature/xxx` |
|
| `ref-name` | 引用名称 | `v1.2.3`、`main`、`feature/xxx` |
|
||||||
| `is-version-trigger` | 是否为版本触发 | `true` 或 `false` |
|
| `is-version-trigger` | 是否为版本触发 | `true` 或 `false` |
|
||||||
| `trigger-version` | 触发的版本号(去除前缀) | `1.2.3` |
|
| `trigger-version` | 触发的版本号(标准化格式) | `v1.2.3` |
|
||||||
| `version-with-dash` | 版本号,点替换为横线 | `1-2-3` |
|
| `version-with-dash` | 版本号,点替换为横线 | `v1-2-3` |
|
||||||
| `trigger-source` | 触发源 | `tag` 或 `branch` |
|
| `trigger-source` | 触发源 | `tag` 或 `branch` |
|
||||||
| `full-ref` | 完整的 Git 引用 | `refs/tags/v1.2.3` |
|
| `full-ref` | 完整的 Git 引用 | `refs/tags/v1.2.3` |
|
||||||
|
| `latest-version` | 仓库中的最新版本号 | `v1.2.3` |
|
||||||
|
| `latest-version-with-dash` | 最新版本号,点替换为横线 | `v1-2-3` |
|
||||||
|
|
||||||
## 环境变量
|
## 环境变量
|
||||||
|
|
||||||
@@ -56,17 +60,24 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
|
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
|
||||||
trigger-version: ${{ steps.version-info.outputs.trigger-version }}
|
trigger-version: ${{ steps.version-info.outputs.trigger-version }}
|
||||||
|
latest-version: ${{ steps.version-info.outputs.latest-version }}
|
||||||
version-with-dash: ${{ steps.version-info.outputs.version-with-dash }}
|
version-with-dash: ${{ steps.version-info.outputs.version-with-dash }}
|
||||||
trigger-source: ${{ steps.version-info.outputs.trigger-source }}
|
trigger-source: ${{ steps.version-info.outputs.trigger-source }}
|
||||||
steps:
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # 必需:获取完整历史以获取所有标签
|
||||||
|
|
||||||
- name: 获取版本信息
|
- name: 获取版本信息
|
||||||
id: version-info
|
id: version-info
|
||||||
uses: actions/xgj/trigger-version@v1
|
uses: ./trigger-version
|
||||||
|
|
||||||
- name: 显示版本信息
|
- name: 显示版本信息
|
||||||
run: |
|
run: |
|
||||||
echo "是否版本触发: ${{ steps.version-info.outputs.is-version-trigger }}"
|
echo "是否版本触发: ${{ steps.version-info.outputs.is-version-trigger }}"
|
||||||
echo "版本号: ${{ steps.version-info.outputs.trigger-version }}"
|
echo "触发版本: ${{ steps.version-info.outputs.trigger-version }}"
|
||||||
|
echo "最新版本: ${{ steps.version-info.outputs.latest-version }}"
|
||||||
echo "横线版本号: ${{ steps.version-info.outputs.version-with-dash }}"
|
echo "横线版本号: ${{ steps.version-info.outputs.version-with-dash }}"
|
||||||
echo "触发源: ${{ steps.version-info.outputs.trigger-source }}"
|
echo "触发源: ${{ steps.version-info.outputs.trigger-source }}"
|
||||||
|
|
||||||
@@ -81,6 +92,25 @@ jobs:
|
|||||||
echo "Docker标签: myapp:${{ needs.get-version-info.outputs.version-with-dash }}"
|
echo "Docker标签: myapp:${{ needs.get-version-info.outputs.version-with-dash }}"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 使用最新版本功能
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- name: 获取版本信息(启用最新版本)
|
||||||
|
id: version-info
|
||||||
|
uses: ./trigger-version
|
||||||
|
with:
|
||||||
|
use-latest-version: true # 在非版本触发时使用最新版本
|
||||||
|
|
||||||
|
- name: 使用最新版本进行构建
|
||||||
|
run: |
|
||||||
|
if [[ -n "${{ steps.version-info.outputs.latest-version }}" ]]; then
|
||||||
|
echo "构建镜像标签: myapp:${{ steps.version-info.outputs.latest-version-with-dash }}"
|
||||||
|
# docker build -t myapp:${{ steps.version-info.outputs.latest-version-with-dash }} .
|
||||||
|
else
|
||||||
|
echo "未找到版本标签,使用默认标签"
|
||||||
|
# docker build -t myapp:latest .
|
||||||
|
fi
|
||||||
|
|
||||||
### 自定义版本前缀
|
### 自定义版本前缀
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -183,14 +213,19 @@ jobs:
|
|||||||
|
|
||||||
1. **条件部署**:使用 `is-version-trigger` 来决定是否执行生产部署
|
1. **条件部署**:使用 `is-version-trigger` 来决定是否执行生产部署
|
||||||
2. **版本标记**:在构建产物中使用 `trigger-version` 进行版本标记
|
2. **版本标记**:在构建产物中使用 `trigger-version` 进行版本标记
|
||||||
3. **Docker 标签**:使用 `version-with-dash` 作为 Docker 镜像标签(避免点号问题)
|
3. **最新版本获取**:使用 `latest-version` 输出来获取仓库的最新版本,适用于回滚或版本比较
|
||||||
4. **环境区分**:根据触发源选择不同的部署环境
|
4. **Docker 标签**:使用 `version-with-dash` 作为 Docker 镜像标签(避免点号问题)
|
||||||
5. **日志记录**:记录详细的版本信息用于追踪和调试
|
5. **环境区分**:根据触发源选择不同的部署环境
|
||||||
|
6. **完整历史获取**:在工作流中使用 `fetch-depth: 0` 确保能获取所有标签
|
||||||
|
7. **日志记录**:记录详细的版本信息用于追踪和调试
|
||||||
|
|
||||||
## 注意事项
|
## 注意事项
|
||||||
|
|
||||||
- 版本前缀区分大小写
|
- 版本前缀区分大小写
|
||||||
- 空的版本号会被设置为空字符串
|
- 空的版本号会被设置为空字符串
|
||||||
|
- `latest-version` 输出始终获取仓库的最新版本,无论触发方式如何
|
||||||
|
- 获取最新版本需要完整的 Git 历史,建议使用 `fetch-depth: 0`
|
||||||
|
- 最新版本按语义化版本排序,确保标签格式符合版本规范
|
||||||
- 确保工作流触发条件与你的版本策略一致
|
- 确保工作流触发条件与你的版本策略一致
|
||||||
- 在使用输出参数时注意布尔值的字符串比较(使用 `== 'true'`)
|
- 在使用输出参数时注意布尔值的字符串比较(使用 `== 'true'`)
|
||||||
|
|
||||||
|
@@ -34,6 +34,12 @@ outputs:
|
|||||||
version-with-dash:
|
version-with-dash:
|
||||||
description: "版本号,点替换为横线(例如:v1.2.3 -> v1-2-3)"
|
description: "版本号,点替换为横线(例如:v1.2.3 -> v1-2-3)"
|
||||||
value: ${{ steps.get-version-info.outputs.version_with_dash }}
|
value: ${{ steps.get-version-info.outputs.version_with_dash }}
|
||||||
|
latest-version:
|
||||||
|
description: "仓库中的最新版本号(始终获取,格式如:v1.2.3)"
|
||||||
|
value: ${{ steps.get-version-info.outputs.latest_version }}
|
||||||
|
latest-version-with-dash:
|
||||||
|
description: "最新版本号,点替换为横线(例如:v1.2.3 -> v1-2-3)"
|
||||||
|
value: ${{ steps.get-version-info.outputs.latest_version_with_dash }}
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
@@ -42,6 +48,59 @@ runs:
|
|||||||
id: get-version-info
|
id: get-version-info
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
# 获取最新版本号的函数
|
||||||
|
get_latest_version() {
|
||||||
|
local prefix="$1"
|
||||||
|
local latest_version=""
|
||||||
|
local latest_version_with_dash=""
|
||||||
|
|
||||||
|
echo "🔍 开始获取最新版本号(前缀:${prefix})..."
|
||||||
|
|
||||||
|
# 检查git仓库是否可用
|
||||||
|
if git rev-parse --git-dir > /dev/null 2>&1; then
|
||||||
|
echo "✅ Git仓库可用,开始获取标签..."
|
||||||
|
|
||||||
|
# 确保获取所有标签信息(GitHub Actions 默认是浅克隆)
|
||||||
|
echo "📥 获取远程标签信息..."
|
||||||
|
git fetch --tags --quiet 2>/dev/null || echo "⚠️ 获取远程标签失败,继续使用本地标签"
|
||||||
|
|
||||||
|
# 获取所有匹配的标签
|
||||||
|
echo "🏷️ 查找匹配前缀 '${prefix}' 的标签..."
|
||||||
|
local all_tags=$(git tag --list "${prefix}*" 2>/dev/null)
|
||||||
|
|
||||||
|
if [[ -n "$all_tags" ]]; then
|
||||||
|
echo "找到的标签:"
|
||||||
|
echo "$all_tags"
|
||||||
|
|
||||||
|
# 获取最新的版本标签
|
||||||
|
if command -v sort >/dev/null 2>&1; then
|
||||||
|
# 使用 sort 命令进行版本排序
|
||||||
|
latest_version=$(echo "$all_tags" | sort -V | tail -1)
|
||||||
|
else
|
||||||
|
# 如果没有 sort -V,使用 git 的排序
|
||||||
|
latest_version=$(git tag --list "${prefix}*" --sort=-version:refname 2>/dev/null | head -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$latest_version" ]]; then
|
||||||
|
# 生成带横线的版本号
|
||||||
|
latest_version_with_dash=$(echo "$latest_version" | sed 's/\./-/g')
|
||||||
|
echo "📦 找到最新版本: $latest_version"
|
||||||
|
echo "📦 横线格式版本: $latest_version_with_dash"
|
||||||
|
else
|
||||||
|
echo "⚠️ 未能确定最新版本"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "⚠️ 未找到匹配前缀 '${prefix}' 的版本标签"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "❌ Git仓库不可用"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 设置全局变量
|
||||||
|
LATEST_VERSION="$latest_version"
|
||||||
|
LATEST_VERSION_WITH_DASH="$latest_version_with_dash"
|
||||||
|
}
|
||||||
|
|
||||||
# 获取GitHub上下文信息
|
# 获取GitHub上下文信息
|
||||||
echo "触发方式: ${{ github.event_name }}"
|
echo "触发方式: ${{ github.event_name }}"
|
||||||
echo "引用类型: ${{ github.ref_type }}"
|
echo "引用类型: ${{ github.ref_type }}"
|
||||||
@@ -54,6 +113,9 @@ runs:
|
|||||||
VERSION_PREFIX="${{ inputs.version-prefix }}"
|
VERSION_PREFIX="${{ inputs.version-prefix }}"
|
||||||
USE_LATEST_VERSION="${{ inputs.use-latest-version }}"
|
USE_LATEST_VERSION="${{ inputs.use-latest-version }}"
|
||||||
|
|
||||||
|
# 获取最新版本号(无论触发方式如何都获取)
|
||||||
|
get_latest_version "$VERSION_PREFIX"
|
||||||
|
|
||||||
# 判断是否为标签触发
|
# 判断是否为标签触发
|
||||||
if [[ "$REF_TYPE" == "tag" ]]; then
|
if [[ "$REF_TYPE" == "tag" ]]; then
|
||||||
# 标准化版本号为v开头格式
|
# 标准化版本号为v开头格式
|
||||||
@@ -84,49 +146,17 @@ runs:
|
|||||||
echo "🆕 常规分支触发: $REF_NAME"
|
echo "🆕 常规分支触发: $REF_NAME"
|
||||||
|
|
||||||
if [[ "$USE_LATEST_VERSION" == "true" ]]; then
|
if [[ "$USE_LATEST_VERSION" == "true" ]]; then
|
||||||
# 获取当前分支最新的版本标签
|
# 使用已获取的最新版本
|
||||||
echo "🔍 查找最新版本标签..."
|
if [[ -n "$LATEST_VERSION" ]]; then
|
||||||
|
TRIGGER_VERSION=$LATEST_VERSION
|
||||||
# 检查git仓库是否可用
|
VERSION_WITH_DASH=$LATEST_VERSION_WITH_DASH
|
||||||
if git rev-parse --git-dir > /dev/null 2>&1; then
|
echo "📦 使用最新版本标签: $LATEST_VERSION"
|
||||||
echo "✅ Git仓库可用,开始获取标签..."
|
echo "标准化版本号: $TRIGGER_VERSION"
|
||||||
|
echo "横线版本号: $VERSION_WITH_DASH"
|
||||||
# 确保获取所有标签信息(GitHub Actions 默认是浅克隆)
|
IS_VERSION_TRIGGER=true
|
||||||
echo "📥 获取远程标签信息..."
|
|
||||||
git fetch --tags --quiet 2>/dev/null || echo "⚠️ 获取远程标签失败,继续使用本地标签"
|
|
||||||
|
|
||||||
# 获取所有匹配的标签
|
|
||||||
echo "🏷️ 查找匹配前缀 '${VERSION_PREFIX}' 的标签..."
|
|
||||||
ALL_TAGS=$(git tag --list "${VERSION_PREFIX}*" 2>/dev/null)
|
|
||||||
# echo "找到的标签: $ALL_TAGS"
|
|
||||||
|
|
||||||
# 获取最新的版本标签
|
|
||||||
if command -v sort >/dev/null 2>&1; then
|
|
||||||
# 使用 sort 命令进行版本排序
|
|
||||||
LATEST_TAG=$(echo "$ALL_TAGS" | sort -V | tail -1)
|
|
||||||
else
|
|
||||||
# 如果没有 sort -V,使用 git 的排序
|
|
||||||
LATEST_TAG=$(git tag --list "${VERSION_PREFIX}*" --sort=-version:refname 2>/dev/null | head -1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n "$LATEST_TAG" ]]; then
|
|
||||||
# 找到了版本标签,使用它
|
|
||||||
TRIGGER_VERSION=$LATEST_TAG
|
|
||||||
VERSION_WITH_DASH=$(echo "$TRIGGER_VERSION" | sed 's/\./-/g')
|
|
||||||
echo "📦 使用最新版本标签: $LATEST_TAG"
|
|
||||||
echo "标准化版本号: $TRIGGER_VERSION"
|
|
||||||
echo "横线版本号: $VERSION_WITH_DASH"
|
|
||||||
IS_VERSION_TRIGGER=true
|
|
||||||
else
|
|
||||||
# 没有找到版本标签
|
|
||||||
echo "⚠️ 未找到匹配前缀 '${VERSION_PREFIX}' 的版本标签,使用空版本"
|
|
||||||
IS_VERSION_TRIGGER=false
|
|
||||||
TRIGGER_VERSION=""
|
|
||||||
VERSION_WITH_DASH=""
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
# Git仓库不可用
|
# 没有找到版本标签
|
||||||
echo "❌ Git仓库不可用,使用空版本"
|
echo "⚠️ 未找到匹配前缀 '${VERSION_PREFIX}' 的版本标签,使用空版本"
|
||||||
IS_VERSION_TRIGGER=false
|
IS_VERSION_TRIGGER=false
|
||||||
TRIGGER_VERSION=""
|
TRIGGER_VERSION=""
|
||||||
VERSION_WITH_DASH=""
|
VERSION_WITH_DASH=""
|
||||||
@@ -155,6 +185,16 @@ runs:
|
|||||||
echo "trigger_version=$TRIGGER_VERSION" >> $GITHUB_OUTPUT
|
echo "trigger_version=$TRIGGER_VERSION" >> $GITHUB_OUTPUT
|
||||||
echo "version_with_dash=$VERSION_WITH_DASH" >> $GITHUB_OUTPUT
|
echo "version_with_dash=$VERSION_WITH_DASH" >> $GITHUB_OUTPUT
|
||||||
echo "trigger_source=$TRIGGER_SOURCE" >> $GITHUB_OUTPUT
|
echo "trigger_source=$TRIGGER_SOURCE" >> $GITHUB_OUTPUT
|
||||||
|
echo "latest_version=$LATEST_VERSION" >> $GITHUB_OUTPUT
|
||||||
|
echo "latest_version_with_dash=$LATEST_VERSION_WITH_DASH" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# 输出摘要信息
|
||||||
|
echo ""
|
||||||
|
echo "=== 版本信息摘要 ==="
|
||||||
|
echo "🔸 触发版本: $TRIGGER_VERSION"
|
||||||
|
echo "🔸 最新版本: $LATEST_VERSION"
|
||||||
|
echo "🔸 是否版本触发: $IS_VERSION_TRIGGER"
|
||||||
|
echo "🔸 触发源: $TRIGGER_SOURCE"
|
||||||
|
|
||||||
branding:
|
branding:
|
||||||
icon: "git-branch"
|
icon: "git-branch"
|
||||||
|
65
trigger-version/examples/latest-version-demo.yml
Normal file
65
trigger-version/examples/latest-version-demo.yml
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
name: Latest Version Demo
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main, develop ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
show-version-info:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # 获取完整历史,确保能获取所有标签
|
||||||
|
|
||||||
|
- name: Get Version Info
|
||||||
|
id: version
|
||||||
|
uses: ./trigger-version
|
||||||
|
with:
|
||||||
|
version-prefix: 'v'
|
||||||
|
use-latest-version: true
|
||||||
|
|
||||||
|
- name: Display Version Information
|
||||||
|
run: |
|
||||||
|
echo "=== 版本信息详情 ==="
|
||||||
|
echo "引用类型: ${{ steps.version.outputs.ref-type }}"
|
||||||
|
echo "引用名称: ${{ steps.version.outputs.ref-name }}"
|
||||||
|
echo "完整引用: ${{ steps.version.outputs.full-ref }}"
|
||||||
|
echo ""
|
||||||
|
echo "=== 触发版本信息 ==="
|
||||||
|
echo "是否版本触发: ${{ steps.version.outputs.is-version-trigger }}"
|
||||||
|
echo "触发版本: ${{ steps.version.outputs.trigger-version }}"
|
||||||
|
echo "触发源: ${{ steps.version.outputs.trigger-source }}"
|
||||||
|
echo "版本(横线格式): ${{ steps.version.outputs.version-with-dash }}"
|
||||||
|
echo ""
|
||||||
|
echo "=== 最新版本信息 ==="
|
||||||
|
echo "最新版本: ${{ steps.version.outputs.latest-version }}"
|
||||||
|
echo "最新版本(横线格式): ${{ steps.version.outputs.latest-version-with-dash }}"
|
||||||
|
|
||||||
|
- name: Use Latest Version in Deployment
|
||||||
|
if: steps.version.outputs.latest-version != ''
|
||||||
|
run: |
|
||||||
|
echo "使用最新版本进行部署: ${{ steps.version.outputs.latest-version }}"
|
||||||
|
echo "镜像标签: myapp:${{ steps.version.outputs.latest-version-with-dash }}"
|
||||||
|
|
||||||
|
# 示例:构建 Docker 镜像
|
||||||
|
# docker build -t myapp:${{ steps.version.outputs.latest-version-with-dash }} .
|
||||||
|
|
||||||
|
# 示例:设置 Kubernetes 部署
|
||||||
|
# kubectl set image deployment/myapp container=myapp:${{ steps.version.outputs.latest-version-with-dash }}
|
||||||
|
|
||||||
|
- name: Handle No Version Found
|
||||||
|
if: steps.version.outputs.latest-version == ''
|
||||||
|
run: |
|
||||||
|
echo "⚠️ 未找到任何版本标签"
|
||||||
|
echo "这可能是因为:"
|
||||||
|
echo "1. 仓库中没有版本标签"
|
||||||
|
echo "2. 版本标签不匹配指定的前缀"
|
||||||
|
echo "3. Git 获取标签失败"
|
||||||
|
echo ""
|
||||||
|
echo "建议:"
|
||||||
|
echo "1. 检查仓库是否有版本标签(如 v1.0.0)"
|
||||||
|
echo "2. 确认版本前缀设置正确"
|
||||||
|
echo "3. 确保 fetch-depth: 0 以获取完整历史"
|
Reference in New Issue
Block a user