Public Access
Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b491241a58 | |||
| d5fa609f15 | |||
| 8822469761 | |||
| 908e839c30 | |||
| d5d9c4afce | |||
| ba6003a431 | |||
| f918bccf12 | |||
| 8741964d87 | |||
| c70481b69d | |||
| a5a16fb7e3 | |||
| 1274e2866b | |||
| 314bf91913 | |||
| 5c05ac62d0 | |||
| d206dd5afb | |||
| 50260b5cb5 | |||
| 4eb421d6ba | |||
| df83f36436 | |||
| e4de039cff | |||
| a6338493aa | |||
| 1b113af068 | |||
| a51f0bfb2f | |||
| c7b6f98f93 | |||
| 2dc43de160 | |||
| ea760bb75b | |||
| d065eaf0fd |
@@ -1,4 +1,8 @@
|
|||||||
|
<<<<<<< HEAD
|
||||||
|
# MokoCLI
|
||||||
|
=======
|
||||||
# mokoplatform
|
# mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
Enterprise automation, validation, sync, and governance engine for all Moko Consulting repositories.
|
Enterprise automation, validation, sync, and governance engine for all Moko Consulting repositories.
|
||||||
|
|
||||||
@@ -9,7 +13,11 @@ Enterprise automation, validation, sync, and governance engine for all Moko Cons
|
|||||||
| **Language** | PHP 8.1+ |
|
| **Language** | PHP 8.1+ |
|
||||||
| **Version** | 09.01.00 |
|
| **Version** | 09.01.00 |
|
||||||
| **Branch** | develop on `dev`, merge to `main` (protected) |
|
| **Branch** | develop on `dev`, merge to `main` (protected) |
|
||||||
|
<<<<<<< HEAD
|
||||||
|
| **Wiki** | [MokoCLI Wiki](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki) |
|
||||||
|
=======
|
||||||
| **Wiki** | [mokoplatform Wiki](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki) |
|
| **Wiki** | [mokoplatform Wiki](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki) |
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
@@ -73,4 +81,8 @@ PHPStan runs with `--memory-limit=512M`. CI enforces PHPCS errors; PHPStan is `c
|
|||||||
- **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`)
|
- **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`)
|
||||||
- **Wiki**: documentation lives in the Gitea wiki, not `docs/` files
|
- **Wiki**: documentation lives in the Gitea wiki, not `docs/` files
|
||||||
- **New CLI tools**: extend `CliFramework`, not `CLIApp` (legacy)
|
- **New CLI tools**: extend `CliFramework`, not `CLIApp` (legacy)
|
||||||
|
<<<<<<< HEAD
|
||||||
|
- **Standards**: [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/mokocli/wiki/Home)
|
||||||
|
=======
|
||||||
- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home)
|
- **Standards**: [MokoCli](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform/wiki/Home)
|
||||||
|
>>>>>>> main
|
||||||
|
|||||||
@@ -7,8 +7,13 @@ contact_links:
|
|||||||
- name: 💬 Ask a Question
|
- name: 💬 Ask a Question
|
||||||
url: https://mokoconsulting.tech/
|
url: https://mokoconsulting.tech/
|
||||||
about: Get help or ask questions through our website
|
about: Get help or ask questions through our website
|
||||||
|
<<<<<<< HEAD
|
||||||
|
- name: 📚 MokoCLI Documentation
|
||||||
|
url: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
- name: 📚 mokoplatform Documentation
|
- name: 📚 mokoplatform Documentation
|
||||||
url: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
url: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
about: View our coding standards and best practices
|
about: View our coding standards and best practices
|
||||||
- name: 🔒 Report a Security Vulnerability
|
- name: 🔒 Report a Security Vulnerability
|
||||||
url: https://git.mokoconsulting.tech/mokoconsulting-tech/.github-private/security/advisories/new
|
url: https://git.mokoconsulting.tech/mokoconsulting-tech/.github-private/security/advisories/new
|
||||||
|
|||||||
@@ -42,7 +42,11 @@ Suggested text here
|
|||||||
<!-- Add any other context, screenshots, or references -->
|
<!-- Add any other context, screenshots, or references -->
|
||||||
|
|
||||||
## Standards Alignment
|
## Standards Alignment
|
||||||
|
<<<<<<< HEAD
|
||||||
|
- [ ] Follows MokoCLI documentation guidelines
|
||||||
|
=======
|
||||||
- [ ] Follows mokoplatform documentation guidelines
|
- [ ] Follows mokoplatform documentation guidelines
|
||||||
|
>>>>>>> main
|
||||||
- [ ] Uses en_US/en_GB localization
|
- [ ] Uses en_US/en_GB localization
|
||||||
- [ ] Includes proper SPDX headers where applicable
|
- [ ] Includes proper SPDX headers where applicable
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,11 @@ If you have ideas about how this could be implemented, share them here:
|
|||||||
Add any other context, mockups, or screenshots about the feature request here.
|
Add any other context, mockups, or screenshots about the feature request here.
|
||||||
|
|
||||||
## Relevant Standards
|
## Relevant Standards
|
||||||
|
<<<<<<< HEAD
|
||||||
|
Does this relate to any standards in [MokoCLI](https://git.mokoconsulting.tech/MokoConsulting/mokocli)?
|
||||||
|
=======
|
||||||
Does this relate to any standards in [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform)?
|
Does this relate to any standards in [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform)?
|
||||||
|
>>>>>>> main
|
||||||
- [ ] Accessibility (WCAG 2.1 AA)
|
- [ ] Accessibility (WCAG 2.1 AA)
|
||||||
- [ ] Localization (en_US/en_GB)
|
- [ ] Localization (en_US/en_GB)
|
||||||
- [ ] Security best practices
|
- [ ] Security best practices
|
||||||
|
|||||||
@@ -35,7 +35,11 @@ Use this template only for:
|
|||||||
<!-- Describe how this could be addressed -->
|
<!-- Describe how this could be addressed -->
|
||||||
|
|
||||||
## Standards Reference
|
## Standards Reference
|
||||||
|
<<<<<<< HEAD
|
||||||
|
Does this relate to security standards in [MokoCLI](https://git.mokoconsulting.tech/MokoConsulting/mokocli)?
|
||||||
|
=======
|
||||||
Does this relate to security standards in [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform)?
|
Does this relate to security standards in [mokoplatform](https://git.mokoconsulting.tech/MokoConsulting/mokoplatform)?
|
||||||
|
>>>>>>> main
|
||||||
- [ ] SPDX license identifiers
|
- [ ] SPDX license identifiers
|
||||||
- [ ] Secret management
|
- [ ] Secret management
|
||||||
- [ ] Dependency security
|
- [ ] Dependency security
|
||||||
|
|||||||
@@ -2,8 +2,13 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Automation
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
# INGROUP: mokoplatform.Automation
|
# INGROUP: mokoplatform.Automation
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
# PATH: /.gitea/workflows/branch-protection.yml
|
# PATH: /.gitea/workflows/branch-protection.yml
|
||||||
# BRIEF: Apply standardised branch protection rules to all governed repositories
|
# BRIEF: Apply standardised branch protection rules to all governed repositories
|
||||||
#
|
#
|
||||||
@@ -62,8 +67,13 @@ jobs:
|
|||||||
API="${GITEA_URL}/api/v1"
|
API="${GITEA_URL}/api/v1"
|
||||||
|
|
||||||
# Platform/standards/infra repos to exclude
|
# Platform/standards/infra repos to exclude
|
||||||
|
<<<<<<< HEAD
|
||||||
|
EXCLUDE="gitea-org-config org-profile gitea-private .mokogitea-private mokocli mokoplatform MokoTesting"
|
||||||
|
EXCLUDE="$EXCLUDE MokoStandards-Template-Client MokoStandards-Template-Dolibarr MokoStandards-Template-Generic MokoStandards-Template-Joomla MokoDoliProjTemplate"
|
||||||
|
=======
|
||||||
EXCLUDE="gitea-org-config org-profile gitea-private .mokogitea-private mokoplatform MokoTesting"
|
EXCLUDE="gitea-org-config org-profile gitea-private .mokogitea-private mokoplatform MokoTesting"
|
||||||
EXCLUDE="$EXCLUDE MokoCli-Template-Client MokoCli-Template-Dolibarr MokoCli-Template-Generic MokoCli-Template-Joomla MokoDoliProjTemplate"
|
EXCLUDE="$EXCLUDE MokoCli-Template-Client MokoCli-Template-Dolibarr MokoCli-Template-Generic MokoCli-Template-Joomla MokoDoliProjTemplate"
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
if [ -n "${{ inputs.repos }}" ]; then
|
if [ -n "${{ inputs.repos }}" ]; then
|
||||||
# User-specified repos
|
# User-specified repos
|
||||||
|
|||||||
@@ -2,8 +2,13 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Automation
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
# INGROUP: mokoplatform.Automation
|
# INGROUP: mokoplatform.Automation
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
# PATH: /.gitea/workflows/bulk-repo-sync.yml
|
# PATH: /.gitea/workflows/bulk-repo-sync.yml
|
||||||
# BRIEF: Bulk repo sync — runs from API repo, syncs standards to all governed repos
|
# BRIEF: Bulk repo sync — runs from API repo, syncs standards to all governed repos
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,15 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# DEFGROUP: MokoCLI.CI
|
||||||
|
# INGROUP: MokoCLI
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
# DEFGROUP: mokoplatform.CI
|
# DEFGROUP: mokoplatform.CI
|
||||||
# INGROUP: mokoplatform
|
# INGROUP: mokoplatform
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
# PATH: /.gitea/workflows/pr-branch-check.yml
|
# PATH: /.gitea/workflows/pr-branch-check.yml
|
||||||
# BRIEF: PR branch merge policy enforcement
|
# BRIEF: PR branch merge policy enforcement
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -4,8 +4,13 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Automation
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
# INGROUP: mokoplatform.Automation
|
# INGROUP: mokoplatform.Automation
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
# PATH: /.gitea/workflows/renovate.yml
|
# PATH: /.gitea/workflows/renovate.yml
|
||||||
# BRIEF: Run Renovate Bot across all governed repos for dependency updates
|
# BRIEF: Run Renovate Bot across all governed repos for dependency updates
|
||||||
#
|
#
|
||||||
@@ -61,8 +66,13 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
API="${GITEA_URL}/api/v1"
|
API="${GITEA_URL}/api/v1"
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
EXCLUDE="gitea-org-config org-profile gitea-private .mokogitea-private mokocli mokoplatform MokoTesting"
|
||||||
|
EXCLUDE="$EXCLUDE MokoStandards-Template-Client MokoStandards-Template-Dolibarr MokoStandards-Template-Generic MokoStandards-Template-Joomla MokoDoliProjTemplate"
|
||||||
|
=======
|
||||||
EXCLUDE="gitea-org-config org-profile gitea-private .mokogitea-private mokoplatform MokoTesting"
|
EXCLUDE="gitea-org-config org-profile gitea-private .mokogitea-private mokoplatform MokoTesting"
|
||||||
EXCLUDE="$EXCLUDE MokoCli-Template-Client MokoCli-Template-Dolibarr MokoCli-Template-Generic MokoCli-Template-Joomla MokoDoliProjTemplate"
|
EXCLUDE="$EXCLUDE MokoCli-Template-Client MokoCli-Template-Dolibarr MokoCli-Template-Generic MokoCli-Template-Joomla MokoDoliProjTemplate"
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
if [ -n "${{ inputs.repos }}" ]; then
|
if [ -n "${{ inputs.repos }}" ]; then
|
||||||
REPOS=$(echo "${{ inputs.repos }}" | tr ',' ' ')
|
REPOS=$(echo "${{ inputs.repos }}" | tr ',' ' ')
|
||||||
|
|||||||
@@ -4,8 +4,13 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Maintenance
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
# INGROUP: mokoplatform.Maintenance
|
# INGROUP: mokoplatform.Maintenance
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
# PATH: /.gitea/workflows/sync-wikis.yml
|
# PATH: /.gitea/workflows/sync-wikis.yml
|
||||||
# BRIEF: Daily sync of all Gitea wikis to consolidated GitHub wiki repo
|
# BRIEF: Daily sync of all Gitea wikis to consolidated GitHub wiki repo
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,17 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Release
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
# PATH: /.mokogitea/workflows/auto-bump.yml
|
||||||
|
# VERSION: 09.23.00
|
||||||
|
=======
|
||||||
# INGROUP: mokocli.Release
|
# INGROUP: mokocli.Release
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
# PATH: /.mokogitea/workflows/auto-bump.yml
|
# PATH: /.mokogitea/workflows/auto-bump.yml
|
||||||
# VERSION: 09.02.00
|
# VERSION: 09.02.00
|
||||||
|
>>>>>>> main
|
||||||
# BRIEF: Auto patch-bump version on every push to dev (skips merge commits)
|
# BRIEF: Auto patch-bump version on every push to dev (skips merge commits)
|
||||||
|
|
||||||
name: "Universal: Auto Version Bump"
|
name: "Universal: Auto Version Bump"
|
||||||
@@ -43,6 +50,22 @@ jobs:
|
|||||||
token: ${{ secrets.MOKOGITEA_TOKEN }}
|
token: ${{ secrets.MOKOGITEA_TOKEN }}
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
- name: Setup MokoCLI tools
|
||||||
|
run: |
|
||||||
|
# Check both new (mokocli) and legacy (mokoplatform) install paths
|
||||||
|
if [ -f "/opt/mokocli/cli/version_bump.php" ] && [ -f "/opt/mokocli/vendor/autoload.php" ]; then
|
||||||
|
echo "Using pre-installed /opt/mokocli"
|
||||||
|
echo "MOKO_CLI=/opt/mokocli/cli" >> "$GITHUB_ENV"
|
||||||
|
elif [ -f "/opt/mokoplatform/cli/version_bump.php" ] && [ -f "/opt/mokoplatform/vendor/autoload.php" ]; then
|
||||||
|
echo "Using pre-installed /opt/mokoplatform (legacy path)"
|
||||||
|
echo "MOKO_CLI=/opt/mokoplatform/cli" >> "$GITHUB_ENV"
|
||||||
|
else
|
||||||
|
if ! command -v composer &> /dev/null; then
|
||||||
|
sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
rm -rf /tmp/mokocli
|
||||||
|
=======
|
||||||
- name: Setup mokocli tools
|
- name: Setup mokocli tools
|
||||||
run: |
|
run: |
|
||||||
if ! command -v composer &> /dev/null; then
|
if ! command -v composer &> /dev/null; then
|
||||||
@@ -51,6 +74,7 @@ jobs:
|
|||||||
if [ -d "/opt/mokocli/cli" ]; then
|
if [ -d "/opt/mokocli/cli" ]; then
|
||||||
echo "MOKO_CLI=/opt/mokocli/cli" >> "$GITHUB_ENV"
|
echo "MOKO_CLI=/opt/mokocli/cli" >> "$GITHUB_ENV"
|
||||||
else
|
else
|
||||||
|
>>>>>>> main
|
||||||
git clone --depth 1 --branch main --quiet \
|
git clone --depth 1 --branch main --quiet \
|
||||||
"https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/MokoConsulting/mokocli.git" \
|
"https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/MokoConsulting/mokocli.git" \
|
||||||
/tmp/mokocli
|
/tmp/mokocli
|
||||||
|
|||||||
@@ -4,8 +4,13 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Release
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
# INGROUP: mokocli.Release
|
# INGROUP: mokocli.Release
|
||||||
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli
|
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/mokocli
|
||||||
|
>>>>>>> main
|
||||||
# PATH: /templates/workflows/universal/auto-release.yml.template
|
# PATH: /templates/workflows/universal/auto-release.yml.template
|
||||||
# VERSION: 05.00.00
|
# VERSION: 05.00.00
|
||||||
# BRIEF: Universal build & release � detects platform from manifest.xml
|
# BRIEF: Universal build & release � detects platform from manifest.xml
|
||||||
@@ -66,16 +71,32 @@ jobs:
|
|||||||
token: ${{ secrets.MOKOGITEA_TOKEN }}
|
token: ${{ secrets.MOKOGITEA_TOKEN }}
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
- name: Setup MokoCLI tools
|
||||||
|
=======
|
||||||
- name: Setup mokocli tools
|
- name: Setup mokocli tools
|
||||||
|
>>>>>>> main
|
||||||
env:
|
env:
|
||||||
MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
|
MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
|
||||||
MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting
|
MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting
|
||||||
run: |
|
run: |
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# Check both new (mokocli) and legacy (mokoplatform) install paths
|
||||||
|
if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then
|
||||||
|
echo "Using pre-installed /opt/mokocli"
|
||||||
|
echo MOKO_CLI=/opt/mokocli/cli >> $GITHUB_ENV
|
||||||
|
elif [ -f /opt/mokoplatform/cli/version_bump.php ] && [ -f /opt/mokoplatform/vendor/autoload.php ]; then
|
||||||
|
echo "Using pre-installed /opt/mokoplatform (legacy path)"
|
||||||
|
echo MOKO_CLI=/opt/mokoplatform/cli >> $GITHUB_ENV
|
||||||
|
else
|
||||||
|
echo "Falling back to fresh clone"
|
||||||
|
=======
|
||||||
if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then
|
if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then
|
||||||
echo Using pre-installed /opt/mokocli
|
echo Using pre-installed /opt/mokocli
|
||||||
echo MOKO_CLI=/opt/mokocli/cli >> $GITHUB_ENV
|
echo MOKO_CLI=/opt/mokocli/cli >> $GITHUB_ENV
|
||||||
else
|
else
|
||||||
echo Falling back to fresh clone
|
echo Falling back to fresh clone
|
||||||
|
>>>>>>> main
|
||||||
if ! command -v composer > /dev/null 2>&1; then
|
if ! command -v composer > /dev/null 2>&1; then
|
||||||
sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer > /dev/null 2>&1
|
sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer > /dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
@@ -109,6 +130,8 @@ jobs:
|
|||||||
--path . --stability rc --bump minor --branch rc \
|
--path . --stability rc --bump minor --branch rc \
|
||||||
--token "${{ secrets.MOKOGITEA_TOKEN }}"
|
--token "${{ secrets.MOKOGITEA_TOKEN }}"
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
- name: Update RC release notes from CHANGELOG.md
|
- name: Update RC release notes from CHANGELOG.md
|
||||||
run: |
|
run: |
|
||||||
API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
|
API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
|
||||||
@@ -143,6 +166,7 @@ jobs:
|
|||||||
echo "RC release notes updated from CHANGELOG.md"
|
echo "RC release notes updated from CHANGELOG.md"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
>>>>>>> main
|
||||||
- name: Summary
|
- name: Summary
|
||||||
if: always()
|
if: always()
|
||||||
run: |
|
run: |
|
||||||
@@ -183,17 +207,33 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
echo "No conflict markers found"
|
echo "No conflict markers found"
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
- name: Setup MokoCLI tools
|
||||||
|
=======
|
||||||
- name: Setup mokocli tools
|
- name: Setup mokocli tools
|
||||||
|
>>>>>>> main
|
||||||
env:
|
env:
|
||||||
MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
|
MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
|
||||||
MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting
|
MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting
|
||||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_MIRROR_TOKEN }}"}}'
|
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_MIRROR_TOKEN }}"}}'
|
||||||
run: |
|
run: |
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# Check both new (mokocli) and legacy (mokoplatform) install paths
|
||||||
|
if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then
|
||||||
|
echo "Using pre-installed /opt/mokocli"
|
||||||
|
echo MOKO_CLI=/opt/mokocli/cli >> $GITHUB_ENV
|
||||||
|
elif [ -f /opt/mokoplatform/cli/version_bump.php ] && [ -f /opt/mokoplatform/vendor/autoload.php ]; then
|
||||||
|
echo "Using pre-installed /opt/mokoplatform (legacy path)"
|
||||||
|
echo MOKO_CLI=/opt/mokoplatform/cli >> $GITHUB_ENV
|
||||||
|
else
|
||||||
|
echo "Falling back to fresh clone"
|
||||||
|
=======
|
||||||
if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then
|
if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then
|
||||||
echo Using pre-installed /opt/mokocli
|
echo Using pre-installed /opt/mokocli
|
||||||
echo MOKO_CLI=/opt/mokocli/cli >> $GITHUB_ENV
|
echo MOKO_CLI=/opt/mokocli/cli >> $GITHUB_ENV
|
||||||
else
|
else
|
||||||
echo Falling back to fresh clone
|
echo Falling back to fresh clone
|
||||||
|
>>>>>>> main
|
||||||
if ! command -v composer > /dev/null 2>&1; then
|
if ! command -v composer > /dev/null 2>&1; then
|
||||||
sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer > /dev/null 2>&1
|
sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer > /dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
@@ -205,6 +245,30 @@ jobs:
|
|||||||
echo MOKO_CLI=/tmp/mokocli/cli >> $GITHUB_ENV
|
echo MOKO_CLI=/tmp/mokocli/cli >> $GITHUB_ENV
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
- name: "Publish stable release"
|
||||||
|
run: |
|
||||||
|
php ${MOKO_CLI}/release_publish.php \
|
||||||
|
--path . --stability stable --bump minor --branch main \
|
||||||
|
--token "${{ secrets.MOKOGITEA_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Update release notes from CHANGELOG.md
|
||||||
|
run: |
|
||||||
|
API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
|
||||||
|
|
||||||
|
# Extract [Unreleased] section from changelog
|
||||||
|
if [ -f "CHANGELOG.md" ]; then
|
||||||
|
NOTES=$(awk '/^## \[Unreleased\]/{found=1; next} /^## \[/{if(found) exit} found{print}' CHANGELOG.md)
|
||||||
|
[ -z "$NOTES" ] && NOTES="Stable release"
|
||||||
|
else
|
||||||
|
NOTES="Stable release"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update release body via API
|
||||||
|
RELEASE_ID=$(curl -sf -H "Authorization: token ${{ secrets.MOKOGITEA_TOKEN }}" \
|
||||||
|
"${API_BASE}/releases/tags/stable" | python3 -c "import json,sys; print(json.load(sys.stdin).get('id',''))" 2>/dev/null || true)
|
||||||
|
|
||||||
|
=======
|
||||||
- name: "Detect platform"
|
- name: "Detect platform"
|
||||||
id: platform
|
id: platform
|
||||||
run: |
|
run: |
|
||||||
@@ -272,6 +336,7 @@ jobs:
|
|||||||
[ -z "$NOTES" ] && NOTES="Stable release"
|
[ -z "$NOTES" ] && NOTES="Stable release"
|
||||||
|
|
||||||
# Update release body via API
|
# Update release body via API
|
||||||
|
>>>>>>> main
|
||||||
if [ -n "$RELEASE_ID" ]; then
|
if [ -n "$RELEASE_ID" ]; then
|
||||||
python3 -c "
|
python3 -c "
|
||||||
import json, urllib.request
|
import json, urllib.request
|
||||||
@@ -281,7 +346,11 @@ jobs:
|
|||||||
'${API_BASE}/releases/${RELEASE_ID}',
|
'${API_BASE}/releases/${RELEASE_ID}',
|
||||||
data=payload, method='PATCH',
|
data=payload, method='PATCH',
|
||||||
headers={
|
headers={
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'Authorization': 'token ${{ secrets.MOKOGITEA_TOKEN }}',
|
||||||
|
=======
|
||||||
'Authorization': 'token ${TOKEN}',
|
'Authorization': 'token ${TOKEN}',
|
||||||
|
>>>>>>> main
|
||||||
'Content-Type': 'application/json'
|
'Content-Type': 'application/json'
|
||||||
})
|
})
|
||||||
urllib.request.urlopen(req)
|
urllib.request.urlopen(req)
|
||||||
@@ -289,6 +358,8 @@ jobs:
|
|||||||
echo "Release notes updated from CHANGELOG.md"
|
echo "Release notes updated from CHANGELOG.md"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
# Promote [Unreleased] → [version] in CHANGELOG.md and reset
|
# Promote [Unreleased] → [version] in CHANGELOG.md and reset
|
||||||
if [ -n "$VERSION" ] && [ -f "CHANGELOG.md" ]; then
|
if [ -n "$VERSION" ] && [ -f "CHANGELOG.md" ]; then
|
||||||
DATE=$(date +%Y-%m-%d)
|
DATE=$(date +%Y-%m-%d)
|
||||||
@@ -307,6 +378,7 @@ jobs:
|
|||||||
echo "Changelog promoted: [Unreleased] → [${VERSION}]"
|
echo "Changelog promoted: [Unreleased] → [${VERSION}]"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
>>>>>>> main
|
||||||
# -- STEP 9: Mirror to GitHub (stable only) --------------------------------
|
# -- STEP 9: Mirror to GitHub (stable only) --------------------------------
|
||||||
- name: "Step 9: Mirror release to GitHub"
|
- name: "Step 9: Mirror release to GitHub"
|
||||||
if: >-
|
if: >-
|
||||||
|
|||||||
@@ -4,18 +4,30 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.CI
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
# PATH: /.mokogitea/workflows/ci-platform.yml
|
||||||
|
# VERSION: 09.23.00
|
||||||
|
# BRIEF: MokoCLI CI — the standards engine validates itself
|
||||||
|
=======
|
||||||
# INGROUP: mokoplatform.CI
|
# INGROUP: mokoplatform.CI
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
# PATH: /.mokogitea/workflows/ci-platform.yml
|
# PATH: /.mokogitea/workflows/ci-platform.yml
|
||||||
# VERSION: 09.23.00
|
# VERSION: 09.23.00
|
||||||
# BRIEF: mokoplatform CI — the standards engine validates itself
|
# BRIEF: mokoplatform CI — the standards engine validates itself
|
||||||
|
>>>>>>> main
|
||||||
#
|
#
|
||||||
# +========================================================================+
|
# +========================================================================+
|
||||||
# | MOKO-PLATFORM CI |
|
# | MOKOCLI CI |
|
||||||
# +========================================================================+
|
# +========================================================================+
|
||||||
# | |
|
# | |
|
||||||
# | This is NOT a generic CI workflow. This is the self-validation |
|
# | This is NOT a generic CI workflow. This is the self-validation |
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# | pipeline for the central MokoCLI enterprise engine. |
|
||||||
|
=======
|
||||||
# | pipeline for the central mokoplatform enterprise engine. |
|
# | pipeline for the central mokoplatform enterprise engine. |
|
||||||
|
>>>>>>> main
|
||||||
# | |
|
# | |
|
||||||
# | It dogfoods every tool the platform ships to governed repos: |
|
# | It dogfoods every tool the platform ships to governed repos: |
|
||||||
# | |
|
# | |
|
||||||
@@ -29,7 +41,11 @@
|
|||||||
# | |
|
# | |
|
||||||
# +========================================================================+
|
# +========================================================================+
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
name: "Platform: MokoCLI CI"
|
||||||
|
=======
|
||||||
name: "Platform: mokoplatform CI"
|
name: "Platform: mokoplatform CI"
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -421,7 +437,11 @@ jobs:
|
|||||||
- name: Check gate results
|
- name: Check gate results
|
||||||
run: |
|
run: |
|
||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
|
echo "# MokoCLI CI"
|
||||||
|
=======
|
||||||
echo "# mokoplatform CI"
|
echo "# mokoplatform CI"
|
||||||
|
>>>>>>> main
|
||||||
echo ""
|
echo ""
|
||||||
echo "| Gate | Job | Status |"
|
echo "| Gate | Job | Status |"
|
||||||
echo "|---|---|---|"
|
echo "|---|---|---|"
|
||||||
|
|||||||
@@ -4,10 +4,17 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Maintenance
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
# PATH: /.mokogitea/workflows/cleanup.yml
|
||||||
|
# VERSION: 09.23.00
|
||||||
|
=======
|
||||||
# INGROUP: MokoStandards.Maintenance
|
# INGROUP: MokoStandards.Maintenance
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /.gitea/workflows/cleanup.yml
|
# PATH: /.gitea/workflows/cleanup.yml
|
||||||
# VERSION: 01.00.00
|
# VERSION: 01.00.00
|
||||||
|
>>>>>>> main
|
||||||
# BRIEF: Scheduled cleanup — delete merged branches and old workflow runs
|
# BRIEF: Scheduled cleanup — delete merged branches and old workflow runs
|
||||||
|
|
||||||
name: "Universal: Repository Cleanup"
|
name: "Universal: Repository Cleanup"
|
||||||
|
|||||||
@@ -4,8 +4,13 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Security
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
# INGROUP: MokoStandards.Security
|
# INGROUP: MokoStandards.Security
|
||||||
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/MokoStandards-API
|
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/MokoStandards-API
|
||||||
|
>>>>>>> main
|
||||||
# PATH: /templates/workflows/gitleaks.yml.template
|
# PATH: /templates/workflows/gitleaks.yml.template
|
||||||
# VERSION: 01.00.00
|
# VERSION: 01.00.00
|
||||||
# BRIEF: Secret scanning — detect leaked credentials, API keys, and tokens
|
# BRIEF: Secret scanning — detect leaked credentials, API keys, and tokens
|
||||||
|
|||||||
@@ -4,8 +4,13 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Automation
|
||||||
|
# VERSION: 09.25.05
|
||||||
|
=======
|
||||||
# INGROUP: mokocli.Automation
|
# INGROUP: mokocli.Automation
|
||||||
# VERSION: 09.32.00
|
# VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
# BRIEF: Auto-create feature branch when an issue is opened
|
# BRIEF: Auto-create feature branch when an issue is opened
|
||||||
|
|
||||||
name: "Universal: Issue Branch"
|
name: "Universal: Issue Branch"
|
||||||
|
|||||||
@@ -4,10 +4,17 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Notifications
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
# PATH: /.mokogitea/workflows/notify.yml
|
||||||
|
# VERSION: 09.23.00
|
||||||
|
=======
|
||||||
# INGROUP: MokoStandards.Notifications
|
# INGROUP: MokoStandards.Notifications
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /.gitea/workflows/notify.yml
|
# PATH: /.gitea/workflows/notify.yml
|
||||||
# VERSION: 01.00.00
|
# VERSION: 01.00.00
|
||||||
|
>>>>>>> main
|
||||||
# BRIEF: Push notifications via ntfy on release success or workflow failure
|
# BRIEF: Push notifications via ntfy on release success or workflow failure
|
||||||
|
|
||||||
name: "Universal: Notifications"
|
name: "Universal: Notifications"
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: moko-platform.CI
|
# INGROUP: MokoCLI.CI
|
||||||
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
# PATH: /templates/workflows/universal/pr-check.yml.template
|
# PATH: /templates/workflows/universal/pr-check.yml.template
|
||||||
# VERSION: 09.23.00
|
# VERSION: 09.23.00
|
||||||
# BRIEF: PR gate — branch policy + code validation before merge
|
# BRIEF: PR gate — branch policy + code validation before merge
|
||||||
|
|||||||
@@ -4,7 +4,11 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Release
|
||||||
|
=======
|
||||||
# INGROUP: mokocli.Release
|
# INGROUP: mokocli.Release
|
||||||
|
>>>>>>> main
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
# PATH: /templates/workflows/universal/pre-release.yml.template
|
# PATH: /templates/workflows/universal/pre-release.yml.template
|
||||||
# VERSION: 05.01.00
|
# VERSION: 05.01.00
|
||||||
@@ -60,17 +64,33 @@ jobs:
|
|||||||
token: ${{ secrets.MOKOGITEA_TOKEN }}
|
token: ${{ secrets.MOKOGITEA_TOKEN }}
|
||||||
ref: ${{ github.ref_name }}
|
ref: ${{ github.ref_name }}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
- name: Setup MokoCLI tools
|
||||||
|
=======
|
||||||
- name: Setup mokocli tools
|
- name: Setup mokocli tools
|
||||||
|
>>>>>>> main
|
||||||
env:
|
env:
|
||||||
MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
|
MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
|
||||||
MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting
|
MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting
|
||||||
run: |
|
run: |
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# Check both new (mokocli) and legacy (mokoplatform) install paths
|
||||||
|
if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/cli/manifest_element.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then
|
||||||
|
echo "Using pre-installed /opt/mokocli"
|
||||||
|
echo MOKO_CLI=/opt/mokocli/cli >> $GITHUB_ENV
|
||||||
|
elif [ -f /opt/mokoplatform/cli/version_bump.php ] && [ -f /opt/mokoplatform/vendor/autoload.php ]; then
|
||||||
|
echo "Using pre-installed /opt/mokoplatform (legacy path)"
|
||||||
|
echo MOKO_CLI=/opt/mokoplatform/cli >> $GITHUB_ENV
|
||||||
|
else
|
||||||
|
echo "Falling back to fresh clone"
|
||||||
|
=======
|
||||||
# Use pre-installed /opt/mokocli if available (updated by cron every 6h)
|
# Use pre-installed /opt/mokocli if available (updated by cron every 6h)
|
||||||
if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/cli/manifest_element.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then
|
if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/cli/manifest_element.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then
|
||||||
echo Using pre-installed /opt/mokocli
|
echo Using pre-installed /opt/mokocli
|
||||||
echo MOKO_CLI=/opt/mokocli/cli >> $GITHUB_ENV
|
echo MOKO_CLI=/opt/mokocli/cli >> $GITHUB_ENV
|
||||||
else
|
else
|
||||||
echo Falling back to fresh clone
|
echo Falling back to fresh clone
|
||||||
|
>>>>>>> main
|
||||||
if ! command -v composer > /dev/null 2>&1; then
|
if ! command -v composer > /dev/null 2>&1; then
|
||||||
sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer > /dev/null 2>&1
|
sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer > /dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,3 +1,718 @@
|
|||||||
|
<<<<<<< HEAD
|
||||||
|
# ============================================================================
|
||||||
|
# Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
|
#
|
||||||
|
# This file is part of a Moko Consulting project.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
#
|
||||||
|
# FILE INFORMATION
|
||||||
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
# INGROUP: MokoCLI.Validation
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
# PATH: /templates/workflows/joomla/repo_health.yml.template
|
||||||
|
# VERSION: 09.23.00
|
||||||
|
# BRIEF: Enforces repository guardrails by validating scripts governance, tooling availability, and core repository health artifacts.
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
name: "Generic: Repo Health"
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
profile:
|
||||||
|
description: 'Validation profile: all, scripts, or repo'
|
||||||
|
required: true
|
||||||
|
default: all
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- all
|
||||||
|
- scripts
|
||||||
|
- repo
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
env:
|
||||||
|
# Scripts governance policy
|
||||||
|
SCRIPTS_REQUIRED_DIRS:
|
||||||
|
SCRIPTS_ALLOWED_DIRS: scripts,scripts/fix,scripts/lib,scripts/release,scripts/run,scripts/validate
|
||||||
|
|
||||||
|
# Repo health policy
|
||||||
|
REPO_REQUIRED_ARTIFACTS: README.md,LICENSE,CHANGELOG.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md,.mokogitea/workflows/
|
||||||
|
REPO_OPTIONAL_FILES: SECURITY.md,GOVERNANCE.md,.editorconfig,.gitattributes,.gitignore,README.md,docs/
|
||||||
|
REPO_DISALLOWED_DIRS:
|
||||||
|
REPO_DISALLOWED_FILES: TODO.md,todo.md
|
||||||
|
|
||||||
|
# Extended checks toggles
|
||||||
|
EXTENDED_CHECKS: "true"
|
||||||
|
|
||||||
|
# File / directory variables
|
||||||
|
DOCS_INDEX: docs/docs-index.md
|
||||||
|
SCRIPT_DIR: scripts
|
||||||
|
WORKFLOWS_DIR: .mokogitea/workflows
|
||||||
|
SHELLCHECK_PATTERN: '*.sh'
|
||||||
|
SPDX_FILE_GLOBS: '*.sh,*.php,*.js,*.ts,*.css,*.xml,*.yml,*.yaml'
|
||||||
|
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
access_check:
|
||||||
|
name: Access control
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 10
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
allowed: ${{ steps.perm.outputs.allowed }}
|
||||||
|
permission: ${{ steps.perm.outputs.permission }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check actor permission (admin only)
|
||||||
|
id: perm
|
||||||
|
env:
|
||||||
|
TOKEN: ${{ secrets.MOKOGITEA_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }}
|
||||||
|
REPO: ${{ github.repository }}
|
||||||
|
ACTOR: ${{ github.actor }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
ALLOWED=false
|
||||||
|
PERMISSION=unknown
|
||||||
|
METHOD=""
|
||||||
|
|
||||||
|
# Hardcoded authorized users — always allowed
|
||||||
|
case "$ACTOR" in
|
||||||
|
jmiller|gitea-actions[bot])
|
||||||
|
ALLOWED=true
|
||||||
|
PERMISSION=admin
|
||||||
|
METHOD="hardcoded allowlist"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Detect platform and check permissions via API
|
||||||
|
API_BASE="${GITHUB_API_URL:-${GITEA_API_URL:-https://api.github.com}}"
|
||||||
|
RESP=$(curl -sf -H "Authorization: token ${TOKEN}" \
|
||||||
|
"${API_BASE}/repos/${REPO}/collaborators/${ACTOR}/permission" 2>/dev/null || echo '{}')
|
||||||
|
PERMISSION=$(echo "$RESP" | grep -oP '"permission"\s*:\s*"\K[^"]+' || echo "unknown")
|
||||||
|
if [ "$PERMISSION" = "admin" ] || [ "$PERMISSION" = "maintain" ] || [ "$PERMISSION" = "owner" ]; then
|
||||||
|
ALLOWED=true
|
||||||
|
fi
|
||||||
|
METHOD="collaborator API"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "permission=${PERMISSION}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "allowed=${ALLOWED}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
{
|
||||||
|
echo "## Access Authorization"
|
||||||
|
echo ""
|
||||||
|
echo "| Field | Value |"
|
||||||
|
echo "|-------|-------|"
|
||||||
|
echo "| **Actor** | \`${ACTOR}\` |"
|
||||||
|
echo "| **Repository** | \`${REPO}\` |"
|
||||||
|
echo "| **Permission** | \`${PERMISSION}\` |"
|
||||||
|
echo "| **Method** | ${METHOD} |"
|
||||||
|
echo "| **Authorized** | ${ALLOWED} |"
|
||||||
|
echo ""
|
||||||
|
if [ "$ALLOWED" = "true" ]; then
|
||||||
|
echo "${ACTOR} authorized (${METHOD})"
|
||||||
|
else
|
||||||
|
echo "${ACTOR} is NOT authorized. Requires admin or maintain role."
|
||||||
|
fi
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
|
- name: Deny execution when not permitted
|
||||||
|
if: ${{ steps.perm.outputs.allowed != 'true' }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
printf '%s\n' 'ERROR: Access denied. Admin permission required.' >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
scripts_governance:
|
||||||
|
name: Scripts governance
|
||||||
|
needs: access_check
|
||||||
|
if: ${{ needs.access_check.outputs.allowed == 'true' }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 15
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Scripts folder checks
|
||||||
|
env:
|
||||||
|
PROFILE_RAW: ${{ github.event.inputs.profile }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
profile="${PROFILE_RAW:-all}"
|
||||||
|
case "${profile}" in
|
||||||
|
all|scripts|repo) ;;
|
||||||
|
*)
|
||||||
|
printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "${profile}" = 'repo' ]; then
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Scripts governance'
|
||||||
|
printf '%s\n' "Profile: ${profile}"
|
||||||
|
printf '%s\n' 'Status: SKIPPED'
|
||||||
|
printf '%s\n' 'Reason: profile excludes scripts governance'
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${SCRIPT_DIR}" ]; then
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Scripts governance'
|
||||||
|
printf '%s\n' 'Status: OK (advisory)'
|
||||||
|
printf '%s\n' 'scripts/ directory not present. No scripts governance enforced.'
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${SCRIPTS_REQUIRED_DIRS:-}" ]; then IFS=',' read -r -a required_dirs <<< "${SCRIPTS_REQUIRED_DIRS}"; else required_dirs=(); fi
|
||||||
|
IFS=',' read -r -a allowed_dirs <<< "${SCRIPTS_ALLOWED_DIRS}"
|
||||||
|
|
||||||
|
missing_dirs=()
|
||||||
|
unapproved_dirs=()
|
||||||
|
|
||||||
|
for d in "${required_dirs[@]}"; do
|
||||||
|
req="${d%/}"
|
||||||
|
[ ! -d "${req}" ] && missing_dirs+=("${req}/")
|
||||||
|
done
|
||||||
|
|
||||||
|
while IFS= read -r d; do
|
||||||
|
allowed=false
|
||||||
|
for a in "${allowed_dirs[@]}"; do
|
||||||
|
a_norm="${a%/}"
|
||||||
|
[ "${d%/}" = "${a_norm}" ] && allowed=true
|
||||||
|
done
|
||||||
|
[ "${allowed}" = false ] && unapproved_dirs+=("${d%/}/")
|
||||||
|
done < <(find "${SCRIPT_DIR}" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sed 's#^\./##')
|
||||||
|
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Scripts governance'
|
||||||
|
printf '%s\n' "Profile: ${profile}"
|
||||||
|
printf '%s\n' '| Area | Status | Notes |'
|
||||||
|
printf '%s\n' '|---|---|---|'
|
||||||
|
|
||||||
|
if [ "${#missing_dirs[@]}" -gt 0 ]; then
|
||||||
|
printf '%s\n' '| Required directories | Warning | Missing required subfolders |'
|
||||||
|
else
|
||||||
|
printf '%s\n' '| Required directories | OK | All required subfolders present |'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${#unapproved_dirs[@]}" -gt 0 ]; then
|
||||||
|
printf '%s\n' '| Directory policy | Warning | Unapproved directories detected |'
|
||||||
|
else
|
||||||
|
printf '%s\n' '| Directory policy | OK | No unapproved directories |'
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s\n' '| Enforcement mode | Advisory | scripts folder is optional |'
|
||||||
|
printf '\n'
|
||||||
|
|
||||||
|
if [ "${#missing_dirs[@]}" -gt 0 ]; then
|
||||||
|
printf '%s\n' 'Missing required script directories:'
|
||||||
|
for m in "${missing_dirs[@]}"; do printf '%s\n' "- ${m}"; done
|
||||||
|
printf '\n'
|
||||||
|
else
|
||||||
|
printf '%s\n' 'Missing required script directories: none.'
|
||||||
|
printf '\n'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${#unapproved_dirs[@]}" -gt 0 ]; then
|
||||||
|
printf '%s\n' 'Unapproved script directories detected:'
|
||||||
|
for m in "${unapproved_dirs[@]}"; do printf '%s\n' "- ${m}"; done
|
||||||
|
printf '\n'
|
||||||
|
else
|
||||||
|
printf '%s\n' 'Unapproved script directories detected: none.'
|
||||||
|
printf '\n'
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s\n' 'Scripts governance completed in advisory mode.'
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
|
repo_health:
|
||||||
|
name: Repository health
|
||||||
|
needs: access_check
|
||||||
|
if: ${{ needs.access_check.outputs.allowed == 'true' }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 20
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Repository health checks
|
||||||
|
env:
|
||||||
|
PROFILE_RAW: ${{ github.event.inputs.profile }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
profile="${PROFILE_RAW:-all}"
|
||||||
|
case "${profile}" in
|
||||||
|
all|scripts|repo) ;;
|
||||||
|
*)
|
||||||
|
printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "${profile}" = 'scripts' ]; then
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Repository health'
|
||||||
|
printf '%s\n' "Profile: ${profile}"
|
||||||
|
printf '%s\n' 'Status: SKIPPED'
|
||||||
|
printf '%s\n' 'Reason: profile excludes repository health'
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
IFS=',' read -r -a required_artifacts <<< "${REPO_REQUIRED_ARTIFACTS}"
|
||||||
|
IFS=',' read -r -a optional_files <<< "${REPO_OPTIONAL_FILES}"
|
||||||
|
if [ -n "${REPO_DISALLOWED_DIRS:-}" ]; then IFS=',' read -r -a disallowed_dirs <<< "${REPO_DISALLOWED_DIRS}"; else disallowed_dirs=(); fi
|
||||||
|
IFS=',' read -r -a disallowed_files <<< "${REPO_DISALLOWED_FILES:-}"
|
||||||
|
|
||||||
|
missing_required=()
|
||||||
|
missing_optional=()
|
||||||
|
|
||||||
|
# Source directory: source/, src/, or htdocs/ (any is valid for extension repos)
|
||||||
|
SOURCE_DIR=""
|
||||||
|
if [ -d "source" ]; then
|
||||||
|
SOURCE_DIR="source"
|
||||||
|
elif [ -d "src" ]; then
|
||||||
|
SOURCE_DIR="src"
|
||||||
|
elif [ -d "htdocs" ]; then
|
||||||
|
SOURCE_DIR="htdocs"
|
||||||
|
elif [ -d "deploy" ] || [ -d "cli" ] || [ -d "monitoring" ]; then
|
||||||
|
# Platform/tooling repos don't need source/
|
||||||
|
SOURCE_DIR=""
|
||||||
|
else
|
||||||
|
missing_required+=("source/ or src/ or htdocs/ (source directory required)")
|
||||||
|
fi
|
||||||
|
|
||||||
|
for item in "${required_artifacts[@]}"; do
|
||||||
|
if printf '%s' "${item}" | grep -q '/$'; then
|
||||||
|
d="${item%/}"
|
||||||
|
[ ! -d "${d}" ] && missing_required+=("${item}")
|
||||||
|
else
|
||||||
|
[ ! -f "${item}" ] && missing_required+=("${item}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for f in "${optional_files[@]}"; do
|
||||||
|
if printf '%s' "${f}" | grep -q '/$'; then
|
||||||
|
d="${f%/}"
|
||||||
|
[ ! -d "${d}" ] && missing_optional+=("${f}")
|
||||||
|
else
|
||||||
|
[ ! -f "${f}" ] && missing_optional+=("${f}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for d in "${disallowed_dirs[@]}"; do
|
||||||
|
d_norm="${d%/}"
|
||||||
|
[ -d "${d_norm}" ] && missing_required+=("${d_norm}/ (disallowed)")
|
||||||
|
done
|
||||||
|
|
||||||
|
for f in "${disallowed_files[@]}"; do
|
||||||
|
[ -f "${f}" ] && missing_required+=("${f} (disallowed)")
|
||||||
|
done
|
||||||
|
|
||||||
|
git fetch origin --prune
|
||||||
|
|
||||||
|
dev_paths=()
|
||||||
|
dev_branches=()
|
||||||
|
|
||||||
|
while IFS= read -r b; do
|
||||||
|
name="${b#origin/}"
|
||||||
|
if [ "${name}" = 'dev' ]; then
|
||||||
|
dev_branches+=("${name}")
|
||||||
|
else
|
||||||
|
dev_paths+=("${name}")
|
||||||
|
fi
|
||||||
|
done < <(git branch -r --list 'origin/dev*' | sed 's/^ *//')
|
||||||
|
|
||||||
|
if [ "${#dev_paths[@]}" -eq 0 ] && [ "${#dev_branches[@]}" -eq 0 ]; then
|
||||||
|
missing_required+=("dev or dev/* branch")
|
||||||
|
fi
|
||||||
|
|
||||||
|
content_warnings=()
|
||||||
|
|
||||||
|
if [ -f 'CHANGELOG.md' ] && ! grep -Eq '^# Changelog' CHANGELOG.md; then
|
||||||
|
content_warnings+=("CHANGELOG.md missing '# Changelog' header")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f 'CHANGELOG.md' ] && grep -Eq '^[# ]*Unreleased' CHANGELOG.md; then
|
||||||
|
content_warnings+=("CHANGELOG.md contains Unreleased section (review release readiness)")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f 'LICENSE' ] && ! grep -qiE 'GNU GENERAL PUBLIC LICENSE|GPL' LICENSE; then
|
||||||
|
content_warnings+=("LICENSE does not look like a GPL text")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f 'README.md' ] && ! grep -qiE 'moko|Moko' README.md; then
|
||||||
|
content_warnings+=("README.md missing expected brand keyword")
|
||||||
|
fi
|
||||||
|
|
||||||
|
export PROFILE_RAW="${profile}"
|
||||||
|
export MISSING_REQUIRED="$(printf '%s\n' "${missing_required[@]:-}")"
|
||||||
|
export MISSING_OPTIONAL="$(printf '%s\n' "${missing_optional[@]:-}")"
|
||||||
|
export CONTENT_WARNINGS="$(printf '%s\n' "${content_warnings[@]:-}")"
|
||||||
|
|
||||||
|
report_json=$(printf '{"profile":"%s","missing_required":%d,"missing_optional":%d,"content_warnings":%d}' "$profile" "${#missing_required[@]}" "${#missing_optional[@]}" "${#content_warnings[@]}")
|
||||||
|
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Repository health'
|
||||||
|
printf '%s\n' "Profile: ${profile}"
|
||||||
|
printf '%s\n' '| Metric | Value |'
|
||||||
|
printf '%s\n' '|---|---|'
|
||||||
|
printf '%s\n' "| Missing required | ${#missing_required[@]} |"
|
||||||
|
printf '%s\n' "| Missing optional | ${#missing_optional[@]} |"
|
||||||
|
printf '%s\n' "| Content warnings | ${#content_warnings[@]} |"
|
||||||
|
printf '\n'
|
||||||
|
|
||||||
|
printf '%s\n' '### Guardrails report (JSON)'
|
||||||
|
printf '%s\n' '```json'
|
||||||
|
printf '%s\n' "${report_json}"
|
||||||
|
printf '%s\n' '```'
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
|
if [ "${#missing_required[@]}" -gt 0 ]; then
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Missing required repo artifacts'
|
||||||
|
for m in "${missing_required[@]}"; do printf '%s\n' "- ${m}"; done
|
||||||
|
printf '%s\n' 'ERROR: Guardrails failed. Missing required repository artifacts.'
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${#missing_optional[@]}" -gt 0 ]; then
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Missing optional repo artifacts'
|
||||||
|
for m in "${missing_optional[@]}"; do printf '%s\n' "- ${m}"; done
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${#content_warnings[@]}" -gt 0 ]; then
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Repo content warnings'
|
||||||
|
for m in "${content_warnings[@]}"; do printf '%s\n' "- ${m}"; done
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Joomla-specific checks --
|
||||||
|
joomla_findings=()
|
||||||
|
|
||||||
|
MANIFEST="$(find . -maxdepth 2 -name '*.xml' -exec grep -l '<extension' {} \; 2>/dev/null | head -1 || true)"
|
||||||
|
if [ -z "${MANIFEST}" ]; then
|
||||||
|
joomla_findings+=("Joomla XML manifest not found (no *.xml with <extension> tag)")
|
||||||
|
else
|
||||||
|
if ! grep -qP '<version>' "${MANIFEST}"; then
|
||||||
|
joomla_findings+=("XML manifest: <version> tag missing")
|
||||||
|
fi
|
||||||
|
if ! grep -qP 'type="(component|module|plugin|library|package|template|language)"' "${MANIFEST}"; then
|
||||||
|
joomla_findings+=("XML manifest: type attribute missing or invalid")
|
||||||
|
fi
|
||||||
|
if ! grep -qP '<name>' "${MANIFEST}"; then
|
||||||
|
joomla_findings+=("XML manifest: <name> tag missing")
|
||||||
|
fi
|
||||||
|
if ! grep -qP '<author>' "${MANIFEST}"; then
|
||||||
|
joomla_findings+=("XML manifest: <author> tag missing")
|
||||||
|
fi
|
||||||
|
if ! grep -qP '<namespace' "${MANIFEST}"; then
|
||||||
|
joomla_findings+=("XML manifest: <namespace> missing (required for Joomla 5+)")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
INI_COUNT="$(find . -name '*.ini' -type f 2>/dev/null | wc -l)"
|
||||||
|
if [ "${INI_COUNT}" -eq 0 ]; then
|
||||||
|
joomla_findings+=("No .ini language files found")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f 'updates.xml' ]; then
|
||||||
|
joomla_findings+=("updates.xml missing in root (required for Joomla update server)")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${SOURCE_DIR}" ]; then
|
||||||
|
INDEX_DIRS=("${SOURCE_DIR}" "${SOURCE_DIR}/admin" "${SOURCE_DIR}/site")
|
||||||
|
for dir in "${INDEX_DIRS[@]}"; do
|
||||||
|
if [ -d "${dir}" ] && [ ! -f "${dir}/index.html" ]; then
|
||||||
|
joomla_findings+=("${dir}/index.html missing (directory listing protection)")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${#joomla_findings[@]}" -gt 0 ]; then
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Joomla extension checks'
|
||||||
|
printf '%s\n' '| Check | Status |'
|
||||||
|
printf '%s\n' '|---|---|'
|
||||||
|
for f in "${joomla_findings[@]}"; do
|
||||||
|
printf '%s\n' "| ${f} | Warning |"
|
||||||
|
done
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Joomla extension checks'
|
||||||
|
printf '%s\n' 'All Joomla-specific checks passed.'
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
extended_enabled="${EXTENDED_CHECKS:-true}"
|
||||||
|
extended_findings=()
|
||||||
|
|
||||||
|
if [ "${extended_enabled}" = 'true' ]; then
|
||||||
|
if [ -f '.github/CODEOWNERS' ] || [ -f 'CODEOWNERS' ] || [ -f 'docs/CODEOWNERS' ]; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
extended_findings+=("CODEOWNERS not found (.github/CODEOWNERS preferred)")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ls "${WORKFLOWS_DIR}"/*.yml >/dev/null 2>&1 || ls "${WORKFLOWS_DIR}"/*.yaml >/dev/null 2>&1; then
|
||||||
|
bad_refs="$(grep -RIn --include='*.yml' --include='*.yaml' -E '^[[:space:]]*uses:[[:space:]]*[^#]+@(main|master)\b' "${WORKFLOWS_DIR}" 2>/dev/null || true)"
|
||||||
|
if [ -n "${bad_refs}" ]; then
|
||||||
|
extended_findings+=("Workflows reference actions @main/@master (pin versions): see log excerpt")
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Workflow pinning advisory'
|
||||||
|
printf '%s\n' 'Found uses: entries pinned to main/master:'
|
||||||
|
printf '%s\n' '```'
|
||||||
|
printf '%s\n' "${bad_refs}"
|
||||||
|
printf '%s\n' '```'
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "${DOCS_INDEX}" ]; then
|
||||||
|
missing_links=""
|
||||||
|
while IFS= read -r docline; do
|
||||||
|
for link in $(echo "$docline" | grep -oE '\]\([^)]+\)' | sed 's/\](//' | sed 's/)$//' || true); do
|
||||||
|
case "$link" in http://*|https://*|"#"*|mailto:*) continue ;; esac
|
||||||
|
linkpath="${link%%#*}"
|
||||||
|
linkpath="${linkpath%%\?*}"
|
||||||
|
[ -z "$linkpath" ] && continue
|
||||||
|
if [ "${linkpath:0:1}" = "/" ]; then
|
||||||
|
testpath="${linkpath#/}"
|
||||||
|
else
|
||||||
|
testpath="$(dirname "${DOCS_INDEX}")/${linkpath}"
|
||||||
|
fi
|
||||||
|
[ ! -e "$testpath" ] && missing_links="${missing_links}${testpath} "
|
||||||
|
done
|
||||||
|
done < "${DOCS_INDEX}"
|
||||||
|
if [ -n "${missing_links}" ]; then
|
||||||
|
extended_findings+=("docs/docs-index.md contains broken relative links")
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Docs index link integrity'
|
||||||
|
printf '%s\n' 'Broken relative links:'
|
||||||
|
for bl in ${missing_links}; do
|
||||||
|
printf '%s\n' "- ${bl}"
|
||||||
|
done
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d "${SCRIPT_DIR}" ]; then
|
||||||
|
if ! command -v shellcheck >/dev/null 2>&1; then
|
||||||
|
sudo apt-get update -qq
|
||||||
|
sudo apt-get install -y shellcheck >/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
sc_out=''
|
||||||
|
while IFS= read -r shf; do
|
||||||
|
[ -z "${shf}" ] && continue
|
||||||
|
out_one="$(shellcheck -S warning -x "${shf}" 2>/dev/null || true)"
|
||||||
|
if [ -n "${out_one}" ]; then
|
||||||
|
sc_out="${sc_out}${out_one}\n"
|
||||||
|
fi
|
||||||
|
done < <(find "${SCRIPT_DIR}" -type f -name "${SHELLCHECK_PATTERN}" 2>/dev/null | sort)
|
||||||
|
|
||||||
|
if [ -n "${sc_out}" ]; then
|
||||||
|
extended_findings+=("ShellCheck warnings detected (advisory)")
|
||||||
|
sc_head="$(printf '%s' "${sc_out}" | head -n 200)"
|
||||||
|
{
|
||||||
|
printf '%s\n' '### ShellCheck (advisory)'
|
||||||
|
printf '%s\n' '```'
|
||||||
|
printf '%s\n' "${sc_head}"
|
||||||
|
printf '%s\n' '```'
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
spdx_missing=()
|
||||||
|
IFS=',' read -r -a spdx_globs <<< "${SPDX_FILE_GLOBS}"
|
||||||
|
spdx_args=()
|
||||||
|
for g in "${spdx_globs[@]}"; do spdx_args+=("${g}"); done
|
||||||
|
|
||||||
|
while IFS= read -r f; do
|
||||||
|
[ -z "${f}" ] && continue
|
||||||
|
if ! head -n 40 "${f}" | grep -q 'SPDX-License-Identifier:'; then
|
||||||
|
spdx_missing+=("${f}")
|
||||||
|
fi
|
||||||
|
done < <(git ls-files "${spdx_args[@]}" 2>/dev/null || true)
|
||||||
|
|
||||||
|
if [ "${#spdx_missing[@]}" -gt 0 ]; then
|
||||||
|
extended_findings+=("SPDX header missing in some tracked files (advisory)")
|
||||||
|
{
|
||||||
|
printf '%s\n' '### SPDX header advisory'
|
||||||
|
printf '%s\n' 'Files missing SPDX-License-Identifier (first 40 lines scan):'
|
||||||
|
for f in "${spdx_missing[@]}"; do printf '%s\n' "- ${f}"; done
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
stale_cutoff_days=180
|
||||||
|
stale_branches="$(git for-each-ref --format='%(refname:short) %(committerdate:unix)' refs/remotes/origin 2>/dev/null | awk -v now="$(date +%s)" -v days="${stale_cutoff_days}" '{if (now-$2 > days*86400) print $1}' | head -50)"
|
||||||
|
if [ -n "${stale_branches}" ]; then
|
||||||
|
extended_findings+=("Stale remote branches detected (advisory)")
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Git hygiene advisory'
|
||||||
|
printf '%s\n' "Branches with last commit older than ${stale_cutoff_days} days (sample up to 50):"
|
||||||
|
while IFS= read -r b; do [ -n "${b}" ] && printf '%s\n' "- ${b}"; done <<< "${stale_branches}"
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Guardrails coverage matrix'
|
||||||
|
printf '%s\n' '| Domain | Status | Notes |'
|
||||||
|
printf '%s\n' '|---|---|---|'
|
||||||
|
printf '%s\n' '| Access control | OK | Admin-only execution gate |'
|
||||||
|
printf '%s\n' '| Release policy | N/A | Releases handled by MokoGitea |'
|
||||||
|
printf '%s\n' '| Scripts governance | OK | Directory policy and advisory reporting |'
|
||||||
|
printf '%s\n' '| Repo required artifacts | OK | Required, optional, disallowed enforcement |'
|
||||||
|
printf '%s\n' '| Repo content heuristics | OK | Brand, license, changelog structure |'
|
||||||
|
if [ "${extended_enabled}" = 'true' ]; then
|
||||||
|
if [ "${#extended_findings[@]}" -gt 0 ]; then
|
||||||
|
printf '%s\n' '| Extended checks | Warning | See extended findings below |'
|
||||||
|
else
|
||||||
|
printf '%s\n' '| Extended checks | OK | No findings |'
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf '%s\n' '| Extended checks | SKIPPED | EXTENDED_CHECKS disabled |'
|
||||||
|
fi
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
|
if [ "${extended_enabled}" = 'true' ] && [ "${#extended_findings[@]}" -gt 0 ]; then
|
||||||
|
{
|
||||||
|
printf '%s\n' '### Extended findings (advisory)'
|
||||||
|
for f in "${extended_findings[@]}"; do printf '%s\n' "- ${f}"; done
|
||||||
|
printf '\n'
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s\n' 'Repository health guardrails passed.' >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
|
|
||||||
|
site-health:
|
||||||
|
name: Site Health
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.event_name == 'workflow_dispatch'
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: '8.3'
|
||||||
|
|
||||||
|
- name: Uptime check
|
||||||
|
if: env.URLS != ''
|
||||||
|
run: |
|
||||||
|
echo "$URLS" > /tmp/urls.txt
|
||||||
|
php monitoring/uptime-probe.php --urls /tmp/urls.txt --timeout 15 || echo "::warning::Some sites are down"
|
||||||
|
rm -f /tmp/urls.txt
|
||||||
|
env:
|
||||||
|
URLS: ${{ vars.MONITORED_URLS }}
|
||||||
|
|
||||||
|
- name: SSL certificate check
|
||||||
|
if: env.DOMAINS != ''
|
||||||
|
run: |
|
||||||
|
echo "$DOMAINS" > /tmp/domains.txt
|
||||||
|
php monitoring/ssl-check.php --domains /tmp/domains.txt --warn-days 30 || echo "::warning::SSL certificates expiring soon"
|
||||||
|
rm -f /tmp/domains.txt
|
||||||
|
env:
|
||||||
|
DOMAINS: ${{ vars.MONITORED_DOMAINS }}
|
||||||
|
|
||||||
|
- name: Summary
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
echo "### Site Health" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "Uptime and SSL checks completed." >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
# ═══════════════════════════════════════════════════════════════════════
|
||||||
|
# Issue Reporter — file issues for failed gates
|
||||||
|
# ═══════════════════════════════════════════════════════════════════════
|
||||||
|
report-issues:
|
||||||
|
name: "Report Issues"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [access_check, scripts_governance, repo_health]
|
||||||
|
if: >-
|
||||||
|
always() &&
|
||||||
|
(needs.scripts_governance.result == 'failure' ||
|
||||||
|
needs.repo_health.result == 'failure')
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
sparse-checkout: automation/ci-issue-reporter.sh
|
||||||
|
sparse-checkout-cone-mode: false
|
||||||
|
|
||||||
|
- name: "File issues for failed gates"
|
||||||
|
env:
|
||||||
|
GITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
|
||||||
|
GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }}
|
||||||
|
run: |
|
||||||
|
chmod +x automation/ci-issue-reporter.sh
|
||||||
|
REPORTER="./automation/ci-issue-reporter.sh"
|
||||||
|
WF="Repo Health"
|
||||||
|
|
||||||
|
report_gate() {
|
||||||
|
local gate="$1" result="$2" details="$3"
|
||||||
|
if [ "$result" = "failure" ]; then
|
||||||
|
"$REPORTER" --gate "$gate" --details "$details" --workflow "$WF" --severity error
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
report_gate "Scripts Governance" \
|
||||||
|
"${{ needs.scripts_governance.result }}" \
|
||||||
|
"Scripts directory policy violations detected. Review required and allowed directories."
|
||||||
|
|
||||||
|
report_gate "Repository Health" \
|
||||||
|
"${{ needs.repo_health.result }}" \
|
||||||
|
"Repository health checks failed — missing required artifacts, disallowed files, or content warnings. Check the CI run summary."
|
||||||
|
=======
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
# Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
#
|
#
|
||||||
@@ -710,3 +1425,4 @@ jobs:
|
|||||||
report_gate "Repository Health" \
|
report_gate "Repository Health" \
|
||||||
"${{ needs.repo_health.result }}" \
|
"${{ needs.repo_health.result }}" \
|
||||||
"Repository health checks failed — missing required artifacts, disallowed files, or content warnings. Check the CI run summary."
|
"Repository health checks failed — missing required artifacts, disallowed files, or content warnings. Check the CI run summary."
|
||||||
|
>>>>>>> main
|
||||||
|
|||||||
@@ -4,10 +4,17 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# INGROUP: MokoCLI.Security
|
||||||
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
# PATH: /.mokogitea/workflows/security-audit.yml
|
||||||
|
# VERSION: 09.23.00
|
||||||
|
=======
|
||||||
# INGROUP: MokoStandards.Security
|
# INGROUP: MokoStandards.Security
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /.gitea/workflows/security-audit.yml
|
# PATH: /.gitea/workflows/security-audit.yml
|
||||||
# VERSION: 01.00.00
|
# VERSION: 01.00.00
|
||||||
|
>>>>>>> main
|
||||||
# BRIEF: Dependency vulnerability scanning for composer and npm packages
|
# BRIEF: Dependency vulnerability scanning for composer and npm packages
|
||||||
|
|
||||||
name: "Universal: Security Audit"
|
name: "Universal: Security Audit"
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"generated_at": "2026-03-10T19:51:42.238134Z",
|
"generated_at": "2026-03-10T19:51:42.238134Z",
|
||||||
|
<<<<<<< HEAD
|
||||||
|
"repository": "MokoConsulting/mokocli",
|
||||||
|
=======
|
||||||
"repository": "MokoConsulting/mokoplatform",
|
"repository": "MokoConsulting/mokoplatform",
|
||||||
|
>>>>>>> main
|
||||||
"version": "1.0.0"
|
"version": "1.0.0"
|
||||||
},
|
},
|
||||||
"scripts": [
|
"scripts": [
|
||||||
|
|||||||
@@ -2,9 +2,15 @@
|
|||||||
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
FILE INFORMATION
|
FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
DEFGROUP: MokoStandards.Root
|
||||||
|
INGROUP: MokoStandards
|
||||||
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
DEFGROUP: MokoCli.Root
|
DEFGROUP: MokoCli.Root
|
||||||
INGROUP: MokoCli
|
INGROUP: MokoCli
|
||||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
PATH: /CHANGELOG.md
|
PATH: /CHANGELOG.md
|
||||||
BRIEF: Release changelog
|
BRIEF: Release changelog
|
||||||
-->
|
-->
|
||||||
|
|||||||
@@ -2,16 +2,26 @@
|
|||||||
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
FILE INFORMATION
|
FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
DEFGROUP: MokoCLI.Root
|
||||||
|
INGROUP: MokoCLI
|
||||||
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
DEFGROUP: MokoPlatform.Root
|
DEFGROUP: MokoPlatform.Root
|
||||||
INGROUP: MokoPlatform
|
INGROUP: MokoPlatform
|
||||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
PATH: /PLUGIN_SCRIPTS.md
|
PATH: /PLUGIN_SCRIPTS.md
|
||||||
BRIEF: Plugin system CLI documentation
|
BRIEF: Plugin system CLI documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
# Plugin System CLI Scripts
|
# Plugin System CLI Scripts
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
Command-line scripts for validating, health checking, and managing projects using the MokoCLI plugin system.
|
||||||
|
=======
|
||||||
Command-line scripts for validating, health checking, and managing projects using the mokoplatform plugin system.
|
Command-line scripts for validating, health checking, and managing projects using the mokoplatform plugin system.
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
## Available Scripts
|
## Available Scripts
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,21 @@
|
|||||||
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
FILE INFORMATION
|
FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
DEFGROUP: MokoCLI.Root
|
||||||
|
INGROUP: MokoCLI
|
||||||
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
PATH: /README.md
|
||||||
|
VERSION: 09.25.05
|
||||||
|
BRIEF: Project overview and documentation
|
||||||
|
-->
|
||||||
|
|
||||||
|
# MokoCLI Enterprise API
|
||||||
|
|
||||||
|
  
|
||||||
|
|
||||||
|
PHP implementation of MokoCLI — enterprise standards, automation framework, workflow templates, and bulk sync tooling.
|
||||||
|
=======
|
||||||
DEFGROUP: MokoPlatform.Root
|
DEFGROUP: MokoPlatform.Root
|
||||||
INGROUP: MokoPlatform
|
INGROUP: MokoPlatform
|
||||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
@@ -15,6 +30,7 @@ BRIEF: Project overview and documentation
|
|||||||
  
|
  
|
||||||
|
|
||||||
PHP implementation of mokoplatform — enterprise standards, automation framework, workflow templates, and bulk sync tooling.
|
PHP implementation of mokoplatform — enterprise standards, automation framework, workflow templates, and bulk sync tooling.
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
> **Primary platform**: [Gitea — git.mokoconsulting.tech](https://git.mokoconsulting.tech/MokoConsulting/MokoCli-API)
|
> **Primary platform**: [Gitea — git.mokoconsulting.tech](https://git.mokoconsulting.tech/MokoConsulting/MokoCli-API)
|
||||||
> **Backup mirror**: [GitHub](https://github.com/MokoConsulting/MokoCli-API) *(read-only mirror)*
|
> **Backup mirror**: [GitHub](https://github.com/MokoConsulting/MokoCli-API) *(read-only mirror)*
|
||||||
|
|||||||
@@ -2,9 +2,15 @@
|
|||||||
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
FILE INFORMATION
|
FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
DEFGROUP: MokoCLI.Index
|
||||||
|
INGROUP: MokoCLI.Analysis
|
||||||
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
DEFGROUP: MokoPlatform.Index
|
DEFGROUP: MokoPlatform.Index
|
||||||
INGROUP: MokoPlatform.Analysis
|
INGROUP: MokoPlatform.Analysis
|
||||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
PATH: /analysis/index.md
|
PATH: /analysis/index.md
|
||||||
BRIEF: Analysis directory index
|
BRIEF: Analysis directory index
|
||||||
-->
|
-->
|
||||||
|
|||||||
@@ -9,9 +9,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Automation
|
||||||
|
* INGROUP: MokoCLI.Scripts
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Automation
|
* DEFGROUP: MokoPlatform.Automation
|
||||||
* INGROUP: MokoPlatform.Scripts
|
* INGROUP: MokoPlatform.Scripts
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /automation/bulk_joomla_template.php
|
* PATH: /automation/bulk_joomla_template.php
|
||||||
* BRIEF: Bulk scaffold and sync Joomla template repositories
|
* BRIEF: Bulk scaffold and sync Joomla template repositories
|
||||||
*
|
*
|
||||||
@@ -42,7 +48,11 @@ use MokoCli\{
|
|||||||
*
|
*
|
||||||
* Provides three operations for Joomla template projects:
|
* Provides three operations for Joomla template projects:
|
||||||
* --scaffold: Create a new template repository with the full directory structure
|
* --scaffold: Create a new template repository with the full directory structure
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* --sync: Push MokoCLI files to existing template repositories
|
||||||
|
=======
|
||||||
* --sync: Push mokoplatform files to existing template repositories
|
* --sync: Push mokoplatform files to existing template repositories
|
||||||
|
>>>>>>> main
|
||||||
* --list: List all repositories tagged as joomla-template
|
* --list: List all repositories tagged as joomla-template
|
||||||
*
|
*
|
||||||
* Works with both GitHub and Gitea via the PlatformAdapterFactory.
|
* Works with both GitHub and Gitea via the PlatformAdapterFactory.
|
||||||
@@ -318,7 +328,11 @@ class BulkJoomlaTemplate extends CliFramework
|
|||||||
$name,
|
$name,
|
||||||
$path,
|
$path,
|
||||||
$content,
|
$content,
|
||||||
|
<<<<<<< HEAD
|
||||||
|
"chore: update {$path} from MokoCLI",
|
||||||
|
=======
|
||||||
"chore: update {$path} from mokoplatform",
|
"chore: update {$path} from mokoplatform",
|
||||||
|
>>>>>>> main
|
||||||
$existingSha,
|
$existingSha,
|
||||||
$branch
|
$branch
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -9,9 +9,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Automation
|
||||||
|
* INGROUP: MokoCLI.Scripts
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Automation
|
* DEFGROUP: MokoPlatform.Automation
|
||||||
* INGROUP: MokoPlatform.Scripts
|
* INGROUP: MokoPlatform.Scripts
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /automation/bulk_sync.php
|
* PATH: /automation/bulk_sync.php
|
||||||
* BRIEF: Enterprise-grade bulk repository synchronization
|
* BRIEF: Enterprise-grade bulk repository synchronization
|
||||||
*/
|
*/
|
||||||
@@ -42,7 +48,11 @@ use MokoCli\{
|
|||||||
/**
|
/**
|
||||||
* Bulk Repository Synchronization Tool
|
* Bulk Repository Synchronization Tool
|
||||||
*
|
*
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* Synchronizes MokoCLI files across multiple repositories using
|
||||||
|
=======
|
||||||
* Synchronizes mokoplatform files across multiple repositories using
|
* Synchronizes mokoplatform files across multiple repositories using
|
||||||
|
>>>>>>> main
|
||||||
* the Enterprise library for robust, audited operations.
|
* the Enterprise library for robust, audited operations.
|
||||||
*/
|
*/
|
||||||
class BulkSync extends CliFramework
|
class BulkSync extends CliFramework
|
||||||
@@ -95,7 +105,11 @@ class BulkSync extends CliFramework
|
|||||||
*/
|
*/
|
||||||
protected function run(): int
|
protected function run(): int
|
||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->log("🚀 MokoCLI Bulk Synchronization v" . self::VERSION, 'INFO');
|
||||||
|
=======
|
||||||
$this->log("🚀 mokoplatform Bulk Synchronization v" . self::VERSION, 'INFO');
|
$this->log("🚀 mokoplatform Bulk Synchronization v" . self::VERSION, 'INFO');
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
// Initialize enterprise components
|
// Initialize enterprise components
|
||||||
if (!$this->initializeComponents()) {
|
if (!$this->initializeComponents()) {
|
||||||
@@ -180,7 +194,11 @@ class BulkSync extends CliFramework
|
|||||||
$results['health'] = $this->runHealthChecksAll($org, $repositories);
|
$results['health'] = $this->runHealthChecksAll($org, $repositories);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
// Create/update tracking issue in MokoCLI
|
||||||
|
=======
|
||||||
// Create/update tracking issue in mokoplatform
|
// Create/update tracking issue in mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
$this->createSyncIssue($org, $results);
|
$this->createSyncIssue($org, $results);
|
||||||
|
|
||||||
// Create/update a failure issue when any repos failed
|
// Create/update a failure issue when any repos failed
|
||||||
@@ -244,7 +262,11 @@ class BulkSync extends CliFramework
|
|||||||
* Filter repositories based on include/exclude lists
|
* Filter repositories based on include/exclude lists
|
||||||
*/
|
*/
|
||||||
/** Repositories that are permanently excluded from bulk sync. */
|
/** Repositories that are permanently excluded from bulk sync. */
|
||||||
|
<<<<<<< HEAD
|
||||||
|
private const ALWAYS_EXCLUDE = ['MokoCLI', '.github-private'];
|
||||||
|
=======
|
||||||
private const ALWAYS_EXCLUDE = ['mokoplatform', '.github-private'];
|
private const ALWAYS_EXCLUDE = ['mokoplatform', '.github-private'];
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
private function filterRepositories(array $repositories, array $include, array $exclude): array
|
private function filterRepositories(array $repositories, array $include, array $exclude): array
|
||||||
{
|
{
|
||||||
@@ -426,7 +448,11 @@ class BulkSync extends CliFramework
|
|||||||
$this->log("", 'ERROR');
|
$this->log("", 'ERROR');
|
||||||
$this->log("Required Implementation:", 'ERROR');
|
$this->log("Required Implementation:", 'ERROR');
|
||||||
$this->log(" 1. Clone/fetch target repository", 'ERROR');
|
$this->log(" 1. Clone/fetch target repository", 'ERROR');
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->log(" 2. Apply file updates based on MokoCLI configuration", 'ERROR');
|
||||||
|
=======
|
||||||
$this->log(" 2. Apply file updates based on mokoplatform configuration", 'ERROR');
|
$this->log(" 2. Apply file updates based on mokoplatform configuration", 'ERROR');
|
||||||
|
>>>>>>> main
|
||||||
$this->log(" 3. Create pull request with changes", 'ERROR');
|
$this->log(" 3. Create pull request with changes", 'ERROR');
|
||||||
$this->log(" 4. Handle merge conflicts and validation", 'ERROR');
|
$this->log(" 4. Handle merge conflicts and validation", 'ERROR');
|
||||||
$this->log("", 'ERROR');
|
$this->log("", 'ERROR');
|
||||||
@@ -837,7 +863,11 @@ class BulkSync extends CliFramework
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* Ensure all standard MokoCLI labels exist on a target repository.
|
||||||
|
=======
|
||||||
* Ensure all standard mokoplatform labels exist on a target repository.
|
* Ensure all standard mokoplatform labels exist on a target repository.
|
||||||
|
>>>>>>> main
|
||||||
*
|
*
|
||||||
* Fetches existing labels first (GET) and only POSTs the ones that are
|
* Fetches existing labels first (GET) and only POSTs the ones that are
|
||||||
* missing. This avoids the 422 "already exists" responses that would
|
* missing. This avoids the 422 "already exists" responses that would
|
||||||
@@ -872,7 +902,11 @@ class BulkSync extends CliFramework
|
|||||||
|
|
||||||
// Workflow / Process
|
// Workflow / Process
|
||||||
['automation', '8B4513', 'Automated processes or scripts'],
|
['automation', '8B4513', 'Automated processes or scripts'],
|
||||||
|
<<<<<<< HEAD
|
||||||
|
['MokoCLI', 'B60205', 'MokoCLI compliance'],
|
||||||
|
=======
|
||||||
['mokoplatform', 'B60205', 'mokoplatform compliance'],
|
['mokoplatform', 'B60205', 'mokoplatform compliance'],
|
||||||
|
>>>>>>> main
|
||||||
['needs-review', 'FBCA04', 'Awaiting code review'],
|
['needs-review', 'FBCA04', 'Awaiting code review'],
|
||||||
['work-in-progress', 'D93F0B', 'Work in progress, not ready for merge'],
|
['work-in-progress', 'D93F0B', 'Work in progress, not ready for merge'],
|
||||||
['breaking-change', 'D73A4A', 'Breaking API or functionality change'],
|
['breaking-change', 'D73A4A', 'Breaking API or functionality change'],
|
||||||
@@ -912,8 +946,13 @@ class BulkSync extends CliFramework
|
|||||||
['health: poor', 'FF6B6B', 'Health score below 50'],
|
['health: poor', 'FF6B6B', 'Health score below 50'],
|
||||||
|
|
||||||
// Sync / Automation (used by bulk_sync, scan_drift, check_repo_health)
|
// Sync / Automation (used by bulk_sync, scan_drift, check_repo_health)
|
||||||
|
<<<<<<< HEAD
|
||||||
|
['standards-update', 'B60205', 'MokoCLI sync update'],
|
||||||
|
['standards-drift', 'FBCA04', 'Repository drifted from MokoCLI'],
|
||||||
|
=======
|
||||||
['standards-update', 'B60205', 'mokoplatform sync update'],
|
['standards-update', 'B60205', 'mokoplatform sync update'],
|
||||||
['standards-drift', 'FBCA04', 'Repository drifted from mokoplatform'],
|
['standards-drift', 'FBCA04', 'Repository drifted from mokoplatform'],
|
||||||
|
>>>>>>> main
|
||||||
['sync-report', '0075CA', 'Bulk sync run report'],
|
['sync-report', '0075CA', 'Bulk sync run report'],
|
||||||
['sync-failure', 'D73A4A', 'Bulk sync failure requiring attention'],
|
['sync-failure', 'D73A4A', 'Bulk sync failure requiring attention'],
|
||||||
['push-failure', 'D73A4A', 'File push failure requiring attention'],
|
['push-failure', 'D73A4A', 'File push failure requiring attention'],
|
||||||
@@ -925,10 +964,17 @@ class BulkSync extends CliFramework
|
|||||||
['type: version', '0E8A16', 'Version-related change'],
|
['type: version', '0E8A16', 'Version-related change'],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
// Quick check: if the repo already has the 'MokoCLI' label, it was
|
||||||
|
// provisioned previously — skip the expensive full label provisioning.
|
||||||
|
try {
|
||||||
|
$probe = $this->api->get("/repos/{$org}/{$repo}/labels/MokoCLI");
|
||||||
|
=======
|
||||||
// Quick check: if the repo already has the 'mokoplatform' label, it was
|
// Quick check: if the repo already has the 'mokoplatform' label, it was
|
||||||
// provisioned previously — skip the expensive full label provisioning.
|
// provisioned previously — skip the expensive full label provisioning.
|
||||||
try {
|
try {
|
||||||
$probe = $this->api->get("/repos/{$org}/{$repo}/labels/mokoplatform");
|
$probe = $this->api->get("/repos/{$org}/{$repo}/labels/mokoplatform");
|
||||||
|
>>>>>>> main
|
||||||
if (!empty($probe['name'])) {
|
if (!empty($probe['name'])) {
|
||||||
return; // already provisioned
|
return; // already provisioned
|
||||||
}
|
}
|
||||||
@@ -1024,7 +1070,11 @@ class BulkSync extends CliFramework
|
|||||||
*/
|
*/
|
||||||
private function updateOpenBranches(string $org, string $repo): void
|
private function updateOpenBranches(string $org, string $repo): void
|
||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$syncBranchPrefix = 'chore/sync-MokoCLI-';
|
||||||
|
=======
|
||||||
$syncBranchPrefix = 'chore/sync-mokoplatform-';
|
$syncBranchPrefix = 'chore/sync-mokoplatform-';
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$defaultBranch = 'main';
|
$defaultBranch = 'main';
|
||||||
@@ -1055,7 +1105,11 @@ class BulkSync extends CliFramework
|
|||||||
$this->api->post("/repos/{$org}/{$repo}/merges", [
|
$this->api->post("/repos/{$org}/{$repo}/merges", [
|
||||||
'base' => $branch,
|
'base' => $branch,
|
||||||
'head' => $defaultBranch,
|
'head' => $defaultBranch,
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'commit_message' => "chore: merge {$defaultBranch} into {$branch} (MokoCLI sync)",
|
||||||
|
=======
|
||||||
'commit_message' => "chore: merge {$defaultBranch} into {$branch} (mokoplatform sync)",
|
'commit_message' => "chore: merge {$defaultBranch} into {$branch} (mokoplatform sync)",
|
||||||
|
>>>>>>> main
|
||||||
]);
|
]);
|
||||||
$this->log(" 🔀 Merged {$defaultBranch} → {$branch} (PR #{$prNum})", 'INFO');
|
$this->log(" 🔀 Merged {$defaultBranch} → {$branch} (PR #{$prNum})", 'INFO');
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
@@ -1076,7 +1130,11 @@ class BulkSync extends CliFramework
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Records which sync run touched the repo, the PR number, and the
|
* Records which sync run touched the repo, the PR number, and the
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* MokoCLI version that was applied — giving each repo a clear audit
|
||||||
|
=======
|
||||||
* mokoplatform version that was applied — giving each repo a clear audit
|
* mokoplatform version that was applied — giving each repo a clear audit
|
||||||
|
>>>>>>> main
|
||||||
* trail of what was changed and why.
|
* trail of what was changed and why.
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
@@ -1119,6 +1177,18 @@ class BulkSync extends CliFramework
|
|||||||
$minor = self::VERSION_MINOR;
|
$minor = self::VERSION_MINOR;
|
||||||
$force = isset($this->options['force']) ? ' *(--force)*' : '';
|
$force = isset($this->options['force']) ? ' *(--force)*' : '';
|
||||||
$prLink = $this->adapter->getPullRequestWebUrl($org, $repo, $prNumber);
|
$prLink = $this->adapter->getPullRequestWebUrl($org, $repo, $prNumber);
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$source = $this->adapter->getRepoWebUrl($org, 'MokoCLI');
|
||||||
|
$branchName = 'chore/sync-MokoCLI-v' . $minor;
|
||||||
|
$branchLink = $this->adapter->getBranchWebUrl($org, $repo, $branchName);
|
||||||
|
|
||||||
|
$title = "chore: MokoCLI v{$minor} sync tracking";
|
||||||
|
|
||||||
|
$body = <<<MD
|
||||||
|
## MokoCLI Sync Applied
|
||||||
|
|
||||||
|
A MokoCLI bulk sync run has updated files in this repository.
|
||||||
|
=======
|
||||||
$source = $this->adapter->getRepoWebUrl($org, 'mokoplatform');
|
$source = $this->adapter->getRepoWebUrl($org, 'mokoplatform');
|
||||||
$branchName = 'chore/sync-mokoplatform-v' . $minor;
|
$branchName = 'chore/sync-mokoplatform-v' . $minor;
|
||||||
$branchLink = $this->adapter->getBranchWebUrl($org, $repo, $branchName);
|
$branchLink = $this->adapter->getBranchWebUrl($org, $repo, $branchName);
|
||||||
@@ -1129,6 +1199,7 @@ class BulkSync extends CliFramework
|
|||||||
## mokoplatform Sync Applied
|
## mokoplatform Sync Applied
|
||||||
|
|
||||||
A mokoplatform bulk sync run has updated files in this repository.
|
A mokoplatform bulk sync run has updated files in this repository.
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
|-------|-------|
|
|-------|-------|
|
||||||
@@ -1144,13 +1215,21 @@ class BulkSync extends CliFramework
|
|||||||
Protected files (README, CHANGELOG, GOVERNANCE, etc.) were not overwritten.
|
Protected files (README, CHANGELOG, GOVERNANCE, etc.) were not overwritten.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
<<<<<<< HEAD
|
||||||
|
*Updated automatically by [MokoCLI]({$source}) `bulk_sync.php`*
|
||||||
|
=======
|
||||||
*Updated automatically by [mokoplatform]({$source}) `bulk_sync.php`*
|
*Updated automatically by [mokoplatform]({$source}) `bulk_sync.php`*
|
||||||
|
>>>>>>> main
|
||||||
MD;
|
MD;
|
||||||
|
|
||||||
// Dedent heredoc
|
// Dedent heredoc
|
||||||
$body = preg_replace('/^ /m', '', $body);
|
$body = preg_replace('/^ /m', '', $body);
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$labelNames = ['standards-update', 'MokoCLI', 'type: chore', 'automation'];
|
||||||
|
=======
|
||||||
$labelNames = ['standards-update', 'mokoplatform', 'type: chore', 'automation'];
|
$labelNames = ['standards-update', 'mokoplatform', 'type: chore', 'automation'];
|
||||||
|
>>>>>>> main
|
||||||
$labels = $this->resolveLabelIds($org, $repo, $labelNames);
|
$labels = $this->resolveLabelIds($org, $repo, $labelNames);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -1213,7 +1292,11 @@ class BulkSync extends CliFramework
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* Create a tracking issue in MokoCLI for this sync run.
|
||||||
|
=======
|
||||||
* Create a tracking issue in mokoplatform for this sync run.
|
* Create a tracking issue in mokoplatform for this sync run.
|
||||||
|
>>>>>>> main
|
||||||
*/
|
*/
|
||||||
private function createSyncIssue(string $org, array $results): void
|
private function createSyncIssue(string $org, array $results): void
|
||||||
{
|
{
|
||||||
@@ -1232,7 +1315,11 @@ class BulkSync extends CliFramework
|
|||||||
$issues = $results['issues'] ?? [];
|
$issues = $results['issues'] ?? [];
|
||||||
|
|
||||||
// Stable title — no timestamp so repeated runs update a single issue
|
// Stable title — no timestamp so repeated runs update a single issue
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$title = "sync: MokoCLI v" . self::VERSION_MINOR . " bulk sync report";
|
||||||
|
=======
|
||||||
$title = "sync: mokoplatform v" . self::VERSION_MINOR . " bulk sync report";
|
$title = "sync: mokoplatform v" . self::VERSION_MINOR . " bulk sync report";
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
$protection = $results['protection'] ?? [];
|
$protection = $results['protection'] ?? [];
|
||||||
$hasProtect = !empty($protection);
|
$hasProtect = !empty($protection);
|
||||||
@@ -1281,7 +1368,11 @@ class BulkSync extends CliFramework
|
|||||||
: "|---|---|---|---|";
|
: "|---|---|---|---|";
|
||||||
|
|
||||||
$body = <<<MD
|
$body = <<<MD
|
||||||
|
<<<<<<< HEAD
|
||||||
|
## MokoCLI Bulk Sync Report
|
||||||
|
=======
|
||||||
## mokoplatform Bulk Sync Report
|
## mokoplatform Bulk Sync Report
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
**Organisation:** `{$org}`
|
**Organisation:** `{$org}`
|
||||||
**Triggered:** {$now}{$force}
|
**Triggered:** {$now}{$force}
|
||||||
@@ -1301,7 +1392,11 @@ class BulkSync extends CliFramework
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// Search for existing issue by label — any state so we can reopen closed ones
|
// Search for existing issue by label — any state so we can reopen closed ones
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$existing = $this->api->get("/repos/{$org}/MokoCLI/issues", [
|
||||||
|
=======
|
||||||
$existing = $this->api->get("/repos/{$org}/mokoplatform/issues", [
|
$existing = $this->api->get("/repos/{$org}/mokoplatform/issues", [
|
||||||
|
>>>>>>> main
|
||||||
'labels' => 'sync-report',
|
'labels' => 'sync-report',
|
||||||
'state' => 'all',
|
'state' => 'all',
|
||||||
'per_page' => 1,
|
'per_page' => 1,
|
||||||
@@ -1309,8 +1404,13 @@ class BulkSync extends CliFramework
|
|||||||
'direction' => 'desc',
|
'direction' => 'desc',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$labelNames = ['sync-report', 'MokoCLI', 'type: chore', 'automation'];
|
||||||
|
$labels = $this->resolveLabelIds($org, 'MokoCLI', $labelNames);
|
||||||
|
=======
|
||||||
$labelNames = ['sync-report', 'mokoplatform', 'type: chore', 'automation'];
|
$labelNames = ['sync-report', 'mokoplatform', 'type: chore', 'automation'];
|
||||||
$labels = $this->resolveLabelIds($org, 'mokoplatform', $labelNames);
|
$labels = $this->resolveLabelIds($org, 'mokoplatform', $labelNames);
|
||||||
|
>>>>>>> main
|
||||||
$existing = array_values($existing);
|
$existing = array_values($existing);
|
||||||
|
|
||||||
if (!empty($existing) && isset($existing[0]['number'])) {
|
if (!empty($existing) && isset($existing[0]['number'])) {
|
||||||
@@ -1319,6 +1419,17 @@ class BulkSync extends CliFramework
|
|||||||
if (($existing[0]['state'] ?? 'open') === 'closed') {
|
if (($existing[0]['state'] ?? 'open') === 'closed') {
|
||||||
$patch['state'] = 'open';
|
$patch['state'] = 'open';
|
||||||
}
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->api->patch("/repos/{$org}/MokoCLI/issues/{$issueNumber}", $patch);
|
||||||
|
try {
|
||||||
|
$this->api->post("/repos/{$org}/MokoCLI/issues/{$issueNumber}/labels", ['labels' => $labels]);
|
||||||
|
} catch (\Exception $le) {
|
||||||
|
/* non-fatal */
|
||||||
|
}
|
||||||
|
$this->log("📋 Sync report issue updated: {$org}/MokoCLI#{$issueNumber}", 'INFO');
|
||||||
|
} else {
|
||||||
|
$issue = $this->api->post("/repos/{$org}/MokoCLI/issues", [
|
||||||
|
=======
|
||||||
$this->api->patch("/repos/{$org}/mokoplatform/issues/{$issueNumber}", $patch);
|
$this->api->patch("/repos/{$org}/mokoplatform/issues/{$issueNumber}", $patch);
|
||||||
try {
|
try {
|
||||||
$this->api->post("/repos/{$org}/mokoplatform/issues/{$issueNumber}/labels", ['labels' => $labels]);
|
$this->api->post("/repos/{$org}/mokoplatform/issues/{$issueNumber}/labels", ['labels' => $labels]);
|
||||||
@@ -1328,13 +1439,18 @@ class BulkSync extends CliFramework
|
|||||||
$this->log("📋 Sync report issue updated: {$org}/mokoplatform#{$issueNumber}", 'INFO');
|
$this->log("📋 Sync report issue updated: {$org}/mokoplatform#{$issueNumber}", 'INFO');
|
||||||
} else {
|
} else {
|
||||||
$issue = $this->api->post("/repos/{$org}/mokoplatform/issues", [
|
$issue = $this->api->post("/repos/{$org}/mokoplatform/issues", [
|
||||||
|
>>>>>>> main
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'body' => $body,
|
'body' => $body,
|
||||||
'labels' => $labels,
|
'labels' => $labels,
|
||||||
'assignees' => ['jmiller'],
|
'assignees' => ['jmiller'],
|
||||||
]);
|
]);
|
||||||
$issueNumber = $issue['number'] ?? '?';
|
$issueNumber = $issue['number'] ?? '?';
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->log("📋 Sync report issue created: {$org}/MokoCLI#{$issueNumber}", 'INFO');
|
||||||
|
=======
|
||||||
$this->log("📋 Sync report issue created: {$org}/mokoplatform#{$issueNumber}", 'INFO');
|
$this->log("📋 Sync report issue created: {$org}/mokoplatform#{$issueNumber}", 'INFO');
|
||||||
|
>>>>>>> main
|
||||||
}
|
}
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->log("⚠️ Failed to create/update sync report issue: " . $e->getMessage(), 'WARN');
|
$this->log("⚠️ Failed to create/update sync report issue: " . $e->getMessage(), 'WARN');
|
||||||
@@ -1342,7 +1458,11 @@ class BulkSync extends CliFramework
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* Create or update a failure issue in MokoCLI when repos fail to sync.
|
||||||
|
=======
|
||||||
* Create or update a failure issue in mokoplatform when repos fail to sync.
|
* Create or update a failure issue in mokoplatform when repos fail to sync.
|
||||||
|
>>>>>>> main
|
||||||
* Uses the 'sync-failure' label so it is distinct from the run-report issue.
|
* Uses the 'sync-failure' label so it is distinct from the run-report issue.
|
||||||
* Reopens a closed issue rather than creating a duplicate.
|
* Reopens a closed issue rather than creating a duplicate.
|
||||||
*/
|
*/
|
||||||
@@ -1388,7 +1508,11 @@ class BulkSync extends CliFramework
|
|||||||
$body = preg_replace('/^ /m', '', $body);
|
$body = preg_replace('/^ /m', '', $body);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$existing = $this->api->get("/repos/{$org}/MokoCLI/issues", [
|
||||||
|
=======
|
||||||
$existing = $this->api->get("/repos/{$org}/mokoplatform/issues", [
|
$existing = $this->api->get("/repos/{$org}/mokoplatform/issues", [
|
||||||
|
>>>>>>> main
|
||||||
'labels' => 'sync-failure',
|
'labels' => 'sync-failure',
|
||||||
'state' => 'all',
|
'state' => 'all',
|
||||||
'per_page' => 1,
|
'per_page' => 1,
|
||||||
@@ -1403,6 +1527,19 @@ class BulkSync extends CliFramework
|
|||||||
if (($existing[0]['state'] ?? 'open') === 'closed') {
|
if (($existing[0]['state'] ?? 'open') === 'closed') {
|
||||||
$patch['state'] = 'open';
|
$patch['state'] = 'open';
|
||||||
}
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->api->patch("/repos/{$org}/MokoCLI/issues/{$num}", $patch);
|
||||||
|
$this->log("🚨 Failure issue #{$num} updated: {$org}/MokoCLI#{$num}", 'WARN');
|
||||||
|
} else {
|
||||||
|
$issue = $this->api->post("/repos/{$org}/MokoCLI/issues", [
|
||||||
|
'title' => $title,
|
||||||
|
'body' => $body,
|
||||||
|
'labels' => $this->resolveLabelIds($org, 'MokoCLI', ['sync-failure']),
|
||||||
|
'assignees' => ['jmiller'],
|
||||||
|
]);
|
||||||
|
$num = $issue['number'] ?? '?';
|
||||||
|
$this->log("🚨 Failure issue created: {$org}/MokoCLI#{$num}", 'WARN');
|
||||||
|
=======
|
||||||
$this->api->patch("/repos/{$org}/mokoplatform/issues/{$num}", $patch);
|
$this->api->patch("/repos/{$org}/mokoplatform/issues/{$num}", $patch);
|
||||||
$this->log("🚨 Failure issue #{$num} updated: {$org}/mokoplatform#{$num}", 'WARN');
|
$this->log("🚨 Failure issue #{$num} updated: {$org}/mokoplatform#{$num}", 'WARN');
|
||||||
} else {
|
} else {
|
||||||
@@ -1414,6 +1551,7 @@ class BulkSync extends CliFramework
|
|||||||
]);
|
]);
|
||||||
$num = $issue['number'] ?? '?';
|
$num = $issue['number'] ?? '?';
|
||||||
$this->log("🚨 Failure issue created: {$org}/mokoplatform#{$num}", 'WARN');
|
$this->log("🚨 Failure issue created: {$org}/mokoplatform#{$num}", 'WARN');
|
||||||
|
>>>>>>> main
|
||||||
}
|
}
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->log("⚠️ Could not create/update failure issue: " . $e->getMessage(), 'WARN');
|
$this->log("⚠️ Could not create/update failure issue: " . $e->getMessage(), 'WARN');
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Automation.CI
|
# DEFGROUP: Automation.CI
|
||||||
# INGROUP: moko-platform.Automation
|
# INGROUP: MokoCLI.Automation
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
# PATH: /automation/ci-issue-reporter.sh
|
# PATH: /automation/ci-issue-reporter.sh
|
||||||
# VERSION: 09.23.00
|
# VERSION: 09.23.00
|
||||||
# BRIEF: Creates or updates a Gitea issue when a CI gate fails.
|
# BRIEF: Creates or updates a Gitea issue when a CI gate fails.
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Automation
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Automation
|
* DEFGROUP: MokoPlatform.Automation
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /automation/enrich_manifest_xml.php
|
* PATH: /automation/enrich_manifest_xml.php
|
||||||
* BRIEF: Enrich XML manifests with repo-specific build and deploy details
|
* BRIEF: Enrich XML manifests with repo-specific build and deploy details
|
||||||
*
|
*
|
||||||
@@ -46,7 +52,11 @@ class EnrichManifestXmlCli extends CliFramework
|
|||||||
$parser = new ManifestParser();
|
$parser = new ManifestParser();
|
||||||
$tmpBase = sys_get_temp_dir() . '/moko-enrich-' . getmypid();
|
$tmpBase = sys_get_temp_dir() . '/moko-enrich-' . getmypid();
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
echo "=== MokoCLI XML Manifest Enrichment ===\n";
|
||||||
|
=======
|
||||||
echo "=== mokoplatform XML Manifest Enrichment ===\n";
|
echo "=== mokoplatform XML Manifest Enrichment ===\n";
|
||||||
|
>>>>>>> main
|
||||||
echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n";
|
echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n";
|
||||||
if (!empty($skipRepos)) {
|
if (!empty($skipRepos)) {
|
||||||
echo "Skipping: " . implode(', ', $skipRepos) . "\n";
|
echo "Skipping: " . implode(', ', $skipRepos) . "\n";
|
||||||
@@ -97,7 +107,11 @@ class EnrichManifestXmlCli extends CliFramework
|
|||||||
}
|
}
|
||||||
|
|
||||||
$manifestPath = "{$workDir}/.mokogitea/manifest.xml";
|
$manifestPath = "{$workDir}/.mokogitea/manifest.xml";
|
||||||
|
<<<<<<< HEAD
|
||||||
|
if (!file_exists($manifestPath) || !str_contains(file_get_contents($manifestPath), '<MokoCLI')) {
|
||||||
|
=======
|
||||||
if (!file_exists($manifestPath) || !str_contains(file_get_contents($manifestPath), '<mokoplatform')) {
|
if (!file_exists($manifestPath) || !str_contains(file_get_contents($manifestPath), '<mokoplatform')) {
|
||||||
|
>>>>>>> main
|
||||||
echo "SKIP (no XML manifest)\n";
|
echo "SKIP (no XML manifest)\n";
|
||||||
$stats['skipped']++;
|
$stats['skipped']++;
|
||||||
$this->rmTree($workDir);
|
$this->rmTree($workDir);
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Automation
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Automation
|
* DEFGROUP: MokoPlatform.Automation
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /automation/enrich_mokostandards_xml.php
|
* PATH: /automation/enrich_mokostandards_xml.php
|
||||||
* BRIEF: Enrich XML manifests with repo-specific build and deploy details
|
* BRIEF: Enrich XML manifests with repo-specific build and deploy details
|
||||||
*
|
*
|
||||||
@@ -46,7 +52,11 @@ class EnrichMokostandardsXmlCli extends CliFramework
|
|||||||
$parser = new ManifestParser();
|
$parser = new ManifestParser();
|
||||||
$tmpBase = sys_get_temp_dir() . '/moko-enrich-' . getmypid();
|
$tmpBase = sys_get_temp_dir() . '/moko-enrich-' . getmypid();
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
echo "=== MokoCLI XML Manifest Enrichment ===\n";
|
||||||
|
=======
|
||||||
echo "=== mokoplatform XML Manifest Enrichment ===\n";
|
echo "=== mokoplatform XML Manifest Enrichment ===\n";
|
||||||
|
>>>>>>> main
|
||||||
echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n";
|
echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n";
|
||||||
if (!empty($skipRepos)) {
|
if (!empty($skipRepos)) {
|
||||||
echo "Skipping: " . implode(', ', $skipRepos) . "\n";
|
echo "Skipping: " . implode(', ', $skipRepos) . "\n";
|
||||||
@@ -97,7 +107,11 @@ class EnrichMokostandardsXmlCli extends CliFramework
|
|||||||
}
|
}
|
||||||
|
|
||||||
$manifestPath = "{$workDir}/.mokogitea/manifest.xml";
|
$manifestPath = "{$workDir}/.mokogitea/manifest.xml";
|
||||||
|
<<<<<<< HEAD
|
||||||
|
if (!file_exists($manifestPath) || !str_contains(file_get_contents($manifestPath), '<MokoCLI')) {
|
||||||
|
=======
|
||||||
if (!file_exists($manifestPath) || !str_contains(file_get_contents($manifestPath), '<mokoplatform')) {
|
if (!file_exists($manifestPath) || !str_contains(file_get_contents($manifestPath), '<mokoplatform')) {
|
||||||
|
>>>>>>> main
|
||||||
echo "SKIP (no XML manifest)\n";
|
echo "SKIP (no XML manifest)\n";
|
||||||
$stats['skipped']++;
|
$stats['skipped']++;
|
||||||
$this->rmTree($workDir);
|
$this->rmTree($workDir);
|
||||||
|
|||||||
@@ -2,9 +2,15 @@
|
|||||||
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
FILE INFORMATION
|
FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
DEFGROUP: MokoCLI.Index
|
||||||
|
INGROUP: MokoCLI.Automation
|
||||||
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
DEFGROUP: MokoPlatform.Index
|
DEFGROUP: MokoPlatform.Index
|
||||||
INGROUP: MokoPlatform.Automation
|
INGROUP: MokoPlatform.Automation
|
||||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
PATH: /automation/index.md
|
PATH: /automation/index.md
|
||||||
BRIEF: Automation directory index
|
BRIEF: Automation directory index
|
||||||
-->
|
-->
|
||||||
|
|||||||
@@ -8,16 +8,26 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Automation
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Automation
|
* DEFGROUP: MokoPlatform.Automation
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /automation/migrate_to_gitea.php
|
* PATH: /automation/migrate_to_gitea.php
|
||||||
* BRIEF: Migrate repositories from GitHub to self-hosted Gitea instance
|
* BRIEF: Migrate repositories from GitHub to self-hosted Gitea instance
|
||||||
*
|
*
|
||||||
* USAGE
|
* USAGE
|
||||||
* php automation/migrate_to_gitea.php --dry-run
|
* php automation/migrate_to_gitea.php --dry-run
|
||||||
* php automation/migrate_to_gitea.php --repos MokoCRM MokoDoliMods
|
* php automation/migrate_to_gitea.php --repos MokoCRM MokoDoliMods
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* php automation/migrate_to_gitea.php --exclude MokoCLI --skip-archived
|
||||||
|
=======
|
||||||
* php automation/migrate_to_gitea.php --exclude mokoplatform --skip-archived
|
* php automation/migrate_to_gitea.php --exclude mokoplatform --skip-archived
|
||||||
|
>>>>>>> main
|
||||||
* php automation/migrate_to_gitea.php --resume
|
* php automation/migrate_to_gitea.php --resume
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -278,7 +288,11 @@ class MigrateToGitea extends CliFramework
|
|||||||
try {
|
try {
|
||||||
$this->gitea->createIssue(
|
$this->gitea->createIssue(
|
||||||
$giteaOrg,
|
$giteaOrg,
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'MokoCLI',
|
||||||
|
=======
|
||||||
'mokoplatform',
|
'mokoplatform',
|
||||||
|
>>>>>>> main
|
||||||
'chore: GitHub → Gitea migration report — ' . count($results['migrated']) . ' repos migrated',
|
'chore: GitHub → Gitea migration report — ' . count($results['migrated']) . ' repos migrated',
|
||||||
$report,
|
$report,
|
||||||
['labels' => ['automation', 'type: chore']]
|
['labels' => ['automation', 'type: chore']]
|
||||||
|
|||||||
@@ -9,9 +9,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Automation
|
||||||
|
* INGROUP: MokoCLI.Scripts
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Automation
|
* DEFGROUP: MokoPlatform.Automation
|
||||||
* INGROUP: MokoPlatform.Scripts
|
* INGROUP: MokoPlatform.Scripts
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /automation/push_files.php
|
* PATH: /automation/push_files.php
|
||||||
* BRIEF: Push one or more specific files to one or more remote repositories
|
* BRIEF: Push one or more specific files to one or more remote repositories
|
||||||
*/
|
*/
|
||||||
@@ -35,7 +41,11 @@ use MokoCli\{
|
|||||||
/**
|
/**
|
||||||
* Targeted File Push Tool
|
* Targeted File Push Tool
|
||||||
*
|
*
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* Pushes one or more specific files from MokoCLI templates to one or
|
||||||
|
=======
|
||||||
* Pushes one or more specific files from mokoplatform templates to one or
|
* Pushes one or more specific files from mokoplatform templates to one or
|
||||||
|
>>>>>>> main
|
||||||
* more remote repositories — without running a full sync.
|
* more remote repositories — without running a full sync.
|
||||||
*
|
*
|
||||||
* Files are specified by their destination path as they appear in the target
|
* Files are specified by their destination path as they appear in the target
|
||||||
@@ -81,7 +91,11 @@ class PushFiles extends CliFramework
|
|||||||
*/
|
*/
|
||||||
protected function run(): int
|
protected function run(): int
|
||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->log('📦 MokoCLI File Push v' . self::VERSION, 'INFO');
|
||||||
|
=======
|
||||||
$this->log('📦 mokoplatform File Push v' . self::VERSION, 'INFO');
|
$this->log('📦 mokoplatform File Push v' . self::VERSION, 'INFO');
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
if (!$this->initializeComponents()) {
|
if (!$this->initializeComponents()) {
|
||||||
return 1;
|
return 1;
|
||||||
@@ -337,7 +351,11 @@ class PushFiles extends CliFramework
|
|||||||
|
|
||||||
$prNumber = null;
|
$prNumber = null;
|
||||||
if (!$direct) {
|
if (!$direct) {
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$prTitle = "chore: push " . count($entries) . " file(s) from MokoCLI";
|
||||||
|
=======
|
||||||
$prTitle = "chore: push " . count($entries) . " file(s) from mokoplatform";
|
$prTitle = "chore: push " . count($entries) . " file(s) from mokoplatform";
|
||||||
|
>>>>>>> main
|
||||||
$prBody = $this->buildPRBody($entries);
|
$prBody = $this->buildPRBody($entries);
|
||||||
$pr = $this->adapter->createPullRequest(
|
$pr = $this->adapter->createPullRequest(
|
||||||
$org,
|
$org,
|
||||||
@@ -414,7 +432,11 @@ class PushFiles extends CliFramework
|
|||||||
|
|
||||||
$message = !empty($customMessage)
|
$message = !empty($customMessage)
|
||||||
? $customMessage
|
? $customMessage
|
||||||
|
<<<<<<< HEAD
|
||||||
|
: "chore: update {$destPath} from MokoCLI";
|
||||||
|
=======
|
||||||
: "chore: update {$destPath} from mokoplatform";
|
: "chore: update {$destPath} from mokoplatform";
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
// Fetch existing file SHA (needed for updates)
|
// Fetch existing file SHA (needed for updates)
|
||||||
$existingSha = null;
|
$existingSha = null;
|
||||||
@@ -457,9 +479,15 @@ class PushFiles extends CliFramework
|
|||||||
): void {
|
): void {
|
||||||
$now = gmdate('Y-m-d H:i:s') . ' UTC';
|
$now = gmdate('Y-m-d H:i:s') . ' UTC';
|
||||||
$version = self::VERSION;
|
$version = self::VERSION;
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$source = $this->adapter->getRepoWebUrl($org, 'MokoCLI');
|
||||||
|
|
||||||
|
$title = "chore: MokoCLI file push tracking";
|
||||||
|
=======
|
||||||
$source = $this->adapter->getRepoWebUrl($org, 'mokoplatform');
|
$source = $this->adapter->getRepoWebUrl($org, 'mokoplatform');
|
||||||
|
|
||||||
$title = "chore: mokoplatform file push tracking";
|
$title = "chore: mokoplatform file push tracking";
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
$deliveryLine = $prNumber !== null
|
$deliveryLine = $prNumber !== null
|
||||||
? "| **Pull request** | [#{$prNumber}](" . $this->adapter->getPullRequestWebUrl($org, $repo, $prNumber) . ") |"
|
? "| **Pull request** | [#{$prNumber}](" . $this->adapter->getPullRequestWebUrl($org, $repo, $prNumber) . ") |"
|
||||||
@@ -471,9 +499,15 @@ class PushFiles extends CliFramework
|
|||||||
));
|
));
|
||||||
|
|
||||||
$body = <<<MD
|
$body = <<<MD
|
||||||
|
<<<<<<< HEAD
|
||||||
|
## MokoCLI File Push
|
||||||
|
|
||||||
|
One or more files were pushed to this repository from MokoCLI.
|
||||||
|
=======
|
||||||
## mokoplatform File Push
|
## mokoplatform File Push
|
||||||
|
|
||||||
One or more files were pushed to this repository from mokoplatform.
|
One or more files were pushed to this repository from mokoplatform.
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
|-------|-------|
|
|-------|-------|
|
||||||
@@ -487,12 +521,20 @@ class PushFiles extends CliFramework
|
|||||||
{$fileRows}
|
{$fileRows}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
<<<<<<< HEAD
|
||||||
|
*Generated automatically by [MokoCLI]({$source}) `push_files.php`*
|
||||||
|
=======
|
||||||
*Generated automatically by [mokoplatform]({$source}) `push_files.php`*
|
*Generated automatically by [mokoplatform]({$source}) `push_files.php`*
|
||||||
|
>>>>>>> main
|
||||||
MD;
|
MD;
|
||||||
|
|
||||||
$body = preg_replace('/^ /m', '', $body);
|
$body = preg_replace('/^ /m', '', $body);
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$labels = ['standards-update', 'MokoCLI', 'type: chore', 'automation'];
|
||||||
|
=======
|
||||||
$labels = ['standards-update', 'mokoplatform', 'type: chore', 'automation'];
|
$labels = ['standards-update', 'mokoplatform', 'type: chore', 'automation'];
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$existing = $this->api->get("/repos/{$org}/{$repo}/issues", [
|
$existing = $this->api->get("/repos/{$org}/{$repo}/issues", [
|
||||||
@@ -550,7 +592,11 @@ class PushFiles extends CliFramework
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* Create or update a failure issue in MokoCLI when repos fail to receive files.
|
||||||
|
=======
|
||||||
* Create or update a failure issue in mokoplatform when repos fail to receive files.
|
* Create or update a failure issue in mokoplatform when repos fail to receive files.
|
||||||
|
>>>>>>> main
|
||||||
* Uses the 'push-failure' label. Reopens a closed issue rather than creating a duplicate.
|
* Uses the 'push-failure' label. Reopens a closed issue rather than creating a duplicate.
|
||||||
*/
|
*/
|
||||||
private function createFailureIssue(string $org, array $results): void
|
private function createFailureIssue(string $org, array $results): void
|
||||||
@@ -598,7 +644,11 @@ class PushFiles extends CliFramework
|
|||||||
$body = preg_replace('/^ /m', '', $body);
|
$body = preg_replace('/^ /m', '', $body);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$existing = $this->api->get("/repos/{$org}/MokoCLI/issues", [
|
||||||
|
=======
|
||||||
$existing = $this->api->get("/repos/{$org}/mokoplatform/issues", [
|
$existing = $this->api->get("/repos/{$org}/mokoplatform/issues", [
|
||||||
|
>>>>>>> main
|
||||||
'labels' => 'push-failure',
|
'labels' => 'push-failure',
|
||||||
'state' => 'all',
|
'state' => 'all',
|
||||||
'per_page' => 1,
|
'per_page' => 1,
|
||||||
@@ -613,17 +663,28 @@ class PushFiles extends CliFramework
|
|||||||
if (($existing[0]['state'] ?? 'open') === 'closed') {
|
if (($existing[0]['state'] ?? 'open') === 'closed') {
|
||||||
$patch['state'] = 'open';
|
$patch['state'] = 'open';
|
||||||
}
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->api->patch("/repos/{$org}/MokoCLI/issues/{$num}", $patch);
|
||||||
|
$this->log("🚨 Failure issue #{$num} updated: {$org}/MokoCLI#{$num}", 'WARN');
|
||||||
|
} else {
|
||||||
|
$issue = $this->api->post("/repos/{$org}/MokoCLI/issues", [
|
||||||
|
=======
|
||||||
$this->api->patch("/repos/{$org}/mokoplatform/issues/{$num}", $patch);
|
$this->api->patch("/repos/{$org}/mokoplatform/issues/{$num}", $patch);
|
||||||
$this->log("🚨 Failure issue #{$num} updated: {$org}/mokoplatform#{$num}", 'WARN');
|
$this->log("🚨 Failure issue #{$num} updated: {$org}/mokoplatform#{$num}", 'WARN');
|
||||||
} else {
|
} else {
|
||||||
$issue = $this->api->post("/repos/{$org}/mokoplatform/issues", [
|
$issue = $this->api->post("/repos/{$org}/mokoplatform/issues", [
|
||||||
|
>>>>>>> main
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'body' => $body,
|
'body' => $body,
|
||||||
'labels' => ['push-failure'],
|
'labels' => ['push-failure'],
|
||||||
'assignees' => ['jmiller'],
|
'assignees' => ['jmiller'],
|
||||||
]);
|
]);
|
||||||
$num = $issue['number'] ?? '?';
|
$num = $issue['number'] ?? '?';
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->log("🚨 Failure issue created: {$org}/MokoCLI#{$num}", 'WARN');
|
||||||
|
=======
|
||||||
$this->log("🚨 Failure issue created: {$org}/mokoplatform#{$num}", 'WARN');
|
$this->log("🚨 Failure issue created: {$org}/mokoplatform#{$num}", 'WARN');
|
||||||
|
>>>>>>> main
|
||||||
}
|
}
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->log("⚠️ Could not create/update failure issue: " . $e->getMessage(), 'WARN');
|
$this->log("⚠️ Could not create/update failure issue: " . $e->getMessage(), 'WARN');
|
||||||
@@ -638,14 +699,23 @@ class PushFiles extends CliFramework
|
|||||||
private function buildPRBody(array $entries): string
|
private function buildPRBody(array $entries): string
|
||||||
{
|
{
|
||||||
$now = gmdate('Y-m-d H:i:s') . ' UTC';
|
$now = gmdate('Y-m-d H:i:s') . ' UTC';
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$lines = ["## MokoCLI File Push\n", "**Pushed:** {$now}\n", '### Files\n'];
|
||||||
|
=======
|
||||||
$lines = ["## mokoplatform File Push\n", "**Pushed:** {$now}\n", '### Files\n'];
|
$lines = ["## mokoplatform File Push\n", "**Pushed:** {$now}\n", '### Files\n'];
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
foreach ($entries as $entry) {
|
foreach ($entries as $entry) {
|
||||||
$lines[] = "- `{$entry['destination']}`";
|
$lines[] = "- `{$entry['destination']}`";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$sourceUrl = $this->adapter->getRepoWebUrl(self::DEFAULT_ORG, 'MokoCLI');
|
||||||
|
$lines[] = "\n---\n*Generated by [MokoCLI]({$sourceUrl}) `push_files.php`*";
|
||||||
|
=======
|
||||||
$sourceUrl = $this->adapter->getRepoWebUrl(self::DEFAULT_ORG, 'mokoplatform');
|
$sourceUrl = $this->adapter->getRepoWebUrl(self::DEFAULT_ORG, 'mokoplatform');
|
||||||
$lines[] = "\n---\n*Generated by [mokoplatform]({$sourceUrl}) `push_files.php`*";
|
$lines[] = "\n---\n*Generated by [mokoplatform]({$sourceUrl}) `push_files.php`*";
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
return implode("\n", $lines);
|
return implode("\n", $lines);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Automation
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Automation
|
* DEFGROUP: MokoPlatform.Automation
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /automation/push_manifest_xml.php
|
* PATH: /automation/push_manifest_xml.php
|
||||||
* BRIEF: Push XML manifests to all governed repositories
|
* BRIEF: Push XML manifests to all governed repositories
|
||||||
*/
|
*/
|
||||||
@@ -47,7 +53,11 @@ class PushManifestXmlCli extends CliFramework
|
|||||||
$parser = new ManifestParser();
|
$parser = new ManifestParser();
|
||||||
$tmpBase = sys_get_temp_dir() . '/moko-manifest-push-' . getmypid();
|
$tmpBase = sys_get_temp_dir() . '/moko-manifest-push-' . getmypid();
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
echo "=== MokoCLI XML Manifest Push ===\n";
|
||||||
|
=======
|
||||||
echo "=== mokoplatform XML Manifest Push ===\n";
|
echo "=== mokoplatform XML Manifest Push ===\n";
|
||||||
|
>>>>>>> main
|
||||||
echo "Org: {$giteaOrg}\n";
|
echo "Org: {$giteaOrg}\n";
|
||||||
echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n";
|
echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n";
|
||||||
if ($repoFilter) {
|
if ($repoFilter) {
|
||||||
@@ -125,7 +135,11 @@ class PushManifestXmlCli extends CliFramework
|
|||||||
|
|
||||||
// Check if already XML and up-to-date
|
// Check if already XML and up-to-date
|
||||||
$manifestPath = "{$workDir}/.mokogitea/manifest.xml";
|
$manifestPath = "{$workDir}/.mokogitea/manifest.xml";
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$existingIsXml = file_exists($manifestPath) && str_contains(file_get_contents($manifestPath), '<MokoCLI');
|
||||||
|
=======
|
||||||
$existingIsXml = file_exists($manifestPath) && str_contains(file_get_contents($manifestPath), '<mokoplatform');
|
$existingIsXml = file_exists($manifestPath) && str_contains(file_get_contents($manifestPath), '<mokoplatform');
|
||||||
|
>>>>>>> main
|
||||||
if ($existingIsXml && !$force) {
|
if ($existingIsXml && !$force) {
|
||||||
$existingPlatform = $parser->extractPlatform(file_get_contents($manifestPath));
|
$existingPlatform = $parser->extractPlatform(file_get_contents($manifestPath));
|
||||||
if ($existingPlatform === $platform) {
|
if ($existingPlatform === $platform) {
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Automation
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Automation
|
* DEFGROUP: MokoPlatform.Automation
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /automation/push_mokostandards_xml.php
|
* PATH: /automation/push_mokostandards_xml.php
|
||||||
* BRIEF: Push XML manifests to all governed repositories
|
* BRIEF: Push XML manifests to all governed repositories
|
||||||
*/
|
*/
|
||||||
@@ -47,7 +53,11 @@ class PushMokostandardsXmlCli extends CliFramework
|
|||||||
$parser = new ManifestParser();
|
$parser = new ManifestParser();
|
||||||
$tmpBase = sys_get_temp_dir() . '/moko-manifest-push-' . getmypid();
|
$tmpBase = sys_get_temp_dir() . '/moko-manifest-push-' . getmypid();
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
echo "=== MokoCLI XML Manifest Push ===\n";
|
||||||
|
=======
|
||||||
echo "=== mokoplatform XML Manifest Push ===\n";
|
echo "=== mokoplatform XML Manifest Push ===\n";
|
||||||
|
>>>>>>> main
|
||||||
echo "Org: {$giteaOrg}\n";
|
echo "Org: {$giteaOrg}\n";
|
||||||
echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n";
|
echo "Mode: " . ($this->dryRun ? "DRY RUN" : "LIVE") . "\n";
|
||||||
if ($repoFilter) {
|
if ($repoFilter) {
|
||||||
@@ -125,7 +135,11 @@ class PushMokostandardsXmlCli extends CliFramework
|
|||||||
|
|
||||||
// Check if already XML and up-to-date
|
// Check if already XML and up-to-date
|
||||||
$manifestPath = "{$workDir}/.mokogitea/manifest.xml";
|
$manifestPath = "{$workDir}/.mokogitea/manifest.xml";
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$existingIsXml = file_exists($manifestPath) && str_contains(file_get_contents($manifestPath), '<MokoCLI');
|
||||||
|
=======
|
||||||
$existingIsXml = file_exists($manifestPath) && str_contains(file_get_contents($manifestPath), '<mokoplatform');
|
$existingIsXml = file_exists($manifestPath) && str_contains(file_get_contents($manifestPath), '<mokoplatform');
|
||||||
|
>>>>>>> main
|
||||||
if ($existingIsXml && !$force) {
|
if ($existingIsXml && !$force) {
|
||||||
$existingPlatform = $parser->extractPlatform(file_get_contents($manifestPath));
|
$existingPlatform = $parser->extractPlatform(file_get_contents($manifestPath));
|
||||||
if ($existingPlatform === $platform) {
|
if ($existingPlatform === $platform) {
|
||||||
|
|||||||
@@ -9,9 +9,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Automation
|
||||||
|
* INGROUP: MokoCLI.Scripts
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Automation
|
* DEFGROUP: MokoPlatform.Automation
|
||||||
* INGROUP: MokoPlatform.Scripts
|
* INGROUP: MokoPlatform.Scripts
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /automation/repo_cleanup.php
|
* PATH: /automation/repo_cleanup.php
|
||||||
* BRIEF: Enterprise repository cleanup — branches, PRs, issues, workflows, labels, logs
|
* BRIEF: Enterprise repository cleanup — branches, PRs, issues, workflows, labels, logs
|
||||||
*/
|
*/
|
||||||
@@ -39,14 +45,23 @@ use MokoCli\{ApiClient, AuditLogger, CliFramework, Config, GitPlatformAdapter, M
|
|||||||
class RepoCleanup extends CliFramework
|
class RepoCleanup extends CliFramework
|
||||||
{
|
{
|
||||||
private const VERSION = '09.23.00';
|
private const VERSION = '09.23.00';
|
||||||
|
<<<<<<< HEAD
|
||||||
|
private const SYNC_PREFIX = 'chore/sync-MokoCLI-';
|
||||||
|
private const CURRENT_BRANCH = 'chore/sync-MokoCLI-v04.02.00';
|
||||||
|
=======
|
||||||
private const SYNC_PREFIX = 'chore/sync-mokoplatform-';
|
private const SYNC_PREFIX = 'chore/sync-mokoplatform-';
|
||||||
private const CURRENT_BRANCH = 'chore/sync-mokoplatform-v04.02.00';
|
private const CURRENT_BRANCH = 'chore/sync-mokoplatform-v04.02.00';
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
/** Workflow files that have been retired and should be deleted from governed repos. */
|
/** Workflow files that have been retired and should be deleted from governed repos. */
|
||||||
private const RETIRED_WORKFLOWS = [
|
private const RETIRED_WORKFLOWS = [
|
||||||
'build.yml', 'code-quality.yml', 'release-cycle.yml', 'release-pipeline.yml',
|
'build.yml', 'code-quality.yml', 'release-cycle.yml', 'release-pipeline.yml',
|
||||||
'branch-cleanup.yml', 'auto-update-changelog.yml', 'enterprise-issue-manager.yml',
|
'branch-cleanup.yml', 'auto-update-changelog.yml', 'enterprise-issue-manager.yml',
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'flush-actions-cache.yml', 'MokoCLI-script-runner.yml', 'unified-ci.yml',
|
||||||
|
=======
|
||||||
'flush-actions-cache.yml', 'mokoplatform-script-runner.yml', 'unified-ci.yml',
|
'flush-actions-cache.yml', 'mokoplatform-script-runner.yml', 'unified-ci.yml',
|
||||||
|
>>>>>>> main
|
||||||
'unified-platform-testing.yml', 'reusable-build.yml', 'reusable-ci-validation.yml',
|
'unified-platform-testing.yml', 'reusable-build.yml', 'reusable-ci-validation.yml',
|
||||||
'reusable-deploy.yml', 'reusable-php-quality.yml', 'reusable-platform-testing.yml',
|
'reusable-deploy.yml', 'reusable-php-quality.yml', 'reusable-platform-testing.yml',
|
||||||
'reusable-project-detector.yml', 'reusable-release.yml', 'reusable-script-executor.yml',
|
'reusable-project-detector.yml', 'reusable-release.yml', 'reusable-script-executor.yml',
|
||||||
@@ -98,7 +113,11 @@ class RepoCleanup extends CliFramework
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->logMsg("🧹 MokoCLI Repository Cleanup v" . self::VERSION);
|
||||||
|
=======
|
||||||
$this->logMsg("🧹 mokoplatform Repository Cleanup v" . self::VERSION);
|
$this->logMsg("🧹 mokoplatform Repository Cleanup v" . self::VERSION);
|
||||||
|
>>>>>>> main
|
||||||
$this->logMsg("Organization: {$org}");
|
$this->logMsg("Organization: {$org}");
|
||||||
$this->logMsg("Current sync branch: " . self::CURRENT_BRANCH);
|
$this->logMsg("Current sync branch: " . self::CURRENT_BRANCH);
|
||||||
if ($this->dryRun) {
|
if ($this->dryRun) {
|
||||||
@@ -225,7 +244,11 @@ class RepoCleanup extends CliFramework
|
|||||||
}
|
}
|
||||||
|
|
||||||
$allRepos = $this->adapter->listOrgRepos($org, $skipArchived);
|
$allRepos = $this->adapter->listOrgRepos($org, $skipArchived);
|
||||||
|
<<<<<<< HEAD
|
||||||
|
return array_filter($allRepos, fn($r) => !in_array($r['name'], ['MokoCLI', '.github-private'], true));
|
||||||
|
=======
|
||||||
return array_filter($allRepos, fn($r) => !in_array($r['name'], ['mokoplatform', '.github-private'], true));
|
return array_filter($allRepos, fn($r) => !in_array($r['name'], ['mokoplatform', '.github-private'], true));
|
||||||
|
>>>>>>> main
|
||||||
}
|
}
|
||||||
|
|
||||||
// ─── Cleanup operations ──────────────────────────────────────────────
|
// ─── Cleanup operations ──────────────────────────────────────────────
|
||||||
@@ -463,9 +486,15 @@ class RepoCleanup extends CliFramework
|
|||||||
private function checkLabels(string $org, string $repo, array &$results): void
|
private function checkLabels(string $org, string $repo, array &$results): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->api->get("/repos/{$org}/{$repo}/labels/MokoCLI");
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->logMsg(" ⚠️ Missing 'MokoCLI' label");
|
||||||
|
=======
|
||||||
$this->api->get("/repos/{$org}/{$repo}/labels/mokoplatform");
|
$this->api->get("/repos/{$org}/{$repo}/labels/mokoplatform");
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->logMsg(" ⚠️ Missing 'mokoplatform' label");
|
$this->logMsg(" ⚠️ Missing 'mokoplatform' label");
|
||||||
|
>>>>>>> main
|
||||||
$results['labels_missing']++;
|
$results['labels_missing']++;
|
||||||
$this->api->resetCircuitBreaker();
|
$this->api->resetCircuitBreaker();
|
||||||
}
|
}
|
||||||
@@ -479,7 +508,11 @@ class RepoCleanup extends CliFramework
|
|||||||
if (preg_match('/^\s*VERSION:\s*(\d{2}\.\d{2}\.\d{2})/m', $content, $m)) {
|
if (preg_match('/^\s*VERSION:\s*(\d{2}\.\d{2}\.\d{2})/m', $content, $m)) {
|
||||||
$version = $m[1];
|
$version = $m[1];
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
// Check manifest.xml for the tracked MokoCLI version
|
||||||
|
=======
|
||||||
// Check manifest.xml for the tracked mokoplatform version
|
// Check manifest.xml for the tracked mokoplatform version
|
||||||
|
>>>>>>> main
|
||||||
try {
|
try {
|
||||||
$mokoFile = $this->api->get("/repos/{$org}/{$repo}/contents/.mokogitea/manifest.xml");
|
$mokoFile = $this->api->get("/repos/{$org}/{$repo}/contents/.mokogitea/manifest.xml");
|
||||||
$mokoContent = base64_decode($mokoFile['content'] ?? '');
|
$mokoContent = base64_decode($mokoFile['content'] ?? '');
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# DEFGROUP: MokoPlatform.Automation.ServerAutoheal
|
# DEFGROUP: MokoCLI.Automation.ServerAutoheal
|
||||||
# INGROUP: MokoPlatform.Automation
|
# INGROUP: MokoCLI.Automation
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
# PATH: /automation/server-autoheal.sh
|
# PATH: /automation/server-autoheal.sh
|
||||||
# BRIEF: Server auto-heal on unclean restart + split system/content backups
|
# BRIEF: Server auto-heal on unclean restart + split system/content backups
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -9,11 +9,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /bin/moko
|
||||||
|
* BRIEF: Unified CLI dispatcher — run any MokoCLI script without needing GitHub Actions
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoCli.CLI
|
* DEFGROUP: MokoCli.CLI
|
||||||
* INGROUP: MokoCli
|
* INGROUP: MokoCli
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform
|
||||||
* PATH: /bin/moko
|
* PATH: /bin/moko
|
||||||
* BRIEF: Unified CLI dispatcher — run any MokoCli script without needing GitHub Actions
|
* BRIEF: Unified CLI dispatcher — run any MokoCli script without needing GitHub Actions
|
||||||
|
>>>>>>> main
|
||||||
*
|
*
|
||||||
* USAGE
|
* USAGE
|
||||||
* php bin/moko <command> [options] (all platforms)
|
* php bin/moko <command> [options] (all platforms)
|
||||||
@@ -295,10 +303,17 @@ function printHelp(): void
|
|||||||
{
|
{
|
||||||
echo <<<'HELP'
|
echo <<<'HELP'
|
||||||
╔══════════════════════════════════════════════════════════╗
|
╔══════════════════════════════════════════════════════════╗
|
||||||
|
<<<<<<< HEAD
|
||||||
|
║ MokoCLI (bin/moko) ║
|
||||||
|
╚══════════════════════════════════════════════════════════╝
|
||||||
|
|
||||||
|
Run any MokoCLI script locally without GitHub Actions.
|
||||||
|
=======
|
||||||
║ MokoCli CLI (bin/moko) ║
|
║ MokoCli CLI (bin/moko) ║
|
||||||
╚══════════════════════════════════════════════════════════╝
|
╚══════════════════════════════════════════════════════════╝
|
||||||
|
|
||||||
Run any MokoCli script locally without GitHub Actions.
|
Run any MokoCli script locally without GitHub Actions.
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
USAGE
|
USAGE
|
||||||
php bin/moko <command> [options] (all platforms)
|
php bin/moko <command> [options] (all platforms)
|
||||||
|
|||||||
@@ -8,9 +8,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/archive_repo.php
|
* PATH: /cli/archive_repo.php
|
||||||
* BRIEF: Gracefully retire a governed repository — archive, close issues/PRs, remove sync def
|
* BRIEF: Gracefully retire a governed repository — archive, close issues/PRs, remove sync def
|
||||||
*/
|
*/
|
||||||
@@ -135,7 +141,11 @@ class ArchiveRepoCli extends CliFramework
|
|||||||
try {
|
try {
|
||||||
$issue = $adapter->createIssue(
|
$issue = $adapter->createIssue(
|
||||||
$org,
|
$org,
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'MokoCLI',
|
||||||
|
=======
|
||||||
'mokoplatform',
|
'mokoplatform',
|
||||||
|
>>>>>>> main
|
||||||
"chore: archived repository {$repoName}",
|
"chore: archived repository {$repoName}",
|
||||||
"## Repository Archived\n\n"
|
"## Repository Archived\n\n"
|
||||||
. "**Repository:** `{$org}/{$repoName}`\n"
|
. "**Repository:** `{$org}/{$repoName}`\n"
|
||||||
@@ -150,7 +160,11 @@ class ArchiveRepoCli extends CliFramework
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
if (isset($issue['number'])) {
|
if (isset($issue['number'])) {
|
||||||
|
<<<<<<< HEAD
|
||||||
|
echo " Archival record: MokoCLI#{$issue['number']}\n";
|
||||||
|
=======
|
||||||
echo " Archival record: mokoplatform#{$issue['number']}\n";
|
echo " Archival record: mokoplatform#{$issue['number']}\n";
|
||||||
|
>>>>>>> main
|
||||||
}
|
}
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
echo " Warning: could not create archival record: " . $e->getMessage() . "\n";
|
echo " Warning: could not create archival record: " . $e->getMessage() . "\n";
|
||||||
|
|||||||
@@ -14,9 +14,15 @@
|
|||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Enterprise.CLI
|
||||||
|
* INGROUP: MokoCLI.Enterprise
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Enterprise.CLI
|
* DEFGROUP: MokoPlatform.Enterprise.CLI
|
||||||
* INGROUP: MokoPlatform.Enterprise
|
* INGROUP: MokoPlatform.Enterprise
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/audit_query.php
|
* PATH: /cli/audit_query.php
|
||||||
* BRIEF: Search, filter, and export audit logs
|
* BRIEF: Search, filter, and export audit logs
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/badge_update.php
|
* PATH: /cli/badge_update.php
|
||||||
* BRIEF: Update [VERSION: XX.XX.XX] badges in all markdown files
|
* BRIEF: Update [VERSION: XX.XX.XX] badges in all markdown files
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,11 +6,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/branch_rename.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/branch_rename.php
|
* PATH: /cli/branch_rename.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old)
|
* BRIEF: Rename a git branch via Gitea API (create new, update PR, delete old)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/bulk_workflow_push.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/bulk_workflow_push.php
|
* PATH: /cli/bulk_workflow_push.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Push a workflow file to all governed repos via the Gitea Contents API
|
* BRIEF: Push a workflow file to all governed repos via the Gitea Contents API
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -154,7 +162,11 @@ class BulkWorkflowPushCli extends CliFramework
|
|||||||
'content' => $encodedContent,
|
'content' => $encodedContent,
|
||||||
'sha' => $remoteSha,
|
'sha' => $remoteSha,
|
||||||
'message' => "chore: sync {$destPath} "
|
'message' => "chore: sync {$destPath} "
|
||||||
|
<<<<<<< HEAD
|
||||||
|
. "from MokoCLI [skip ci]",
|
||||||
|
=======
|
||||||
. "from mokoplatform [skip ci]",
|
. "from mokoplatform [skip ci]",
|
||||||
|
>>>>>>> main
|
||||||
'branch' => $branch,
|
'branch' => $branch,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -184,7 +196,11 @@ class BulkWorkflowPushCli extends CliFramework
|
|||||||
$payload = json_encode([
|
$payload = json_encode([
|
||||||
'content' => $encodedContent,
|
'content' => $encodedContent,
|
||||||
'message' => "chore: add {$destPath} "
|
'message' => "chore: add {$destPath} "
|
||||||
|
<<<<<<< HEAD
|
||||||
|
. "from MokoCLI [skip ci]",
|
||||||
|
=======
|
||||||
. "from mokoplatform [skip ci]",
|
. "from mokoplatform [skip ci]",
|
||||||
|
>>>>>>> main
|
||||||
'branch' => $branch,
|
'branch' => $branch,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/bulk_workflow_trigger.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/bulk_workflow_trigger.php
|
* PATH: /cli/bulk_workflow_trigger.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Trigger a workflow across multiple repos at once
|
* BRIEF: Trigger a workflow across multiple repos at once
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/changelog_promote.php
|
* PATH: /cli/changelog_promote.php
|
||||||
* BRIEF: Promote [Unreleased] section in CHANGELOG.md to a versioned entry
|
* BRIEF: Promote [Unreleased] section in CHANGELOG.md to a versioned entry
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/changelog_prune.php
|
* PATH: /cli/changelog_prune.php
|
||||||
* BRIEF: Prune old CHANGELOG.md entries — keeps [Unreleased] + last N releases
|
* BRIEF: Prune old CHANGELOG.md entries — keeps [Unreleased] + last N releases
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/client_dashboard.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/client_dashboard.php
|
* PATH: /cli/client_dashboard.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Generate unified client dashboard HTML
|
* BRIEF: Generate unified client dashboard HTML
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/client_health_check.php
|
* PATH: /cli/client_health_check.php
|
||||||
* BRIEF: Verify a client site's update server, installed version, and release availability
|
* BRIEF: Verify a client site's update server, installed version, and release availability
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/client_inventory.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/client_inventory.php
|
* PATH: /cli/client_inventory.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Discover and list all client-waas repos with their server configuration status
|
* BRIEF: Discover and list all client-waas repos with their server configuration status
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/client_provision.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/client_provision.php
|
* PATH: /cli/client_provision.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Provision a new client environment end-to-end
|
* BRIEF: Provision a new client environment end-to-end
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/completion.php
|
* PATH: /cli/completion.php
|
||||||
* BRIEF: Generate bash/zsh tab completion scripts for bin/moko
|
* BRIEF: Generate bash/zsh tab completion scripts for bin/moko
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,9 +8,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/create_project.php
|
* PATH: /cli/create_project.php
|
||||||
* BRIEF: Create baseline GitHub Projects for repositories with standard fields and views
|
* BRIEF: Create baseline GitHub Projects for repositories with standard fields and views
|
||||||
*/
|
*/
|
||||||
@@ -24,7 +30,11 @@ use MokoCli\CliFramework;
|
|||||||
class CreateProjectCli extends CliFramework
|
class CreateProjectCli extends CliFramework
|
||||||
{
|
{
|
||||||
/** @var string[] */
|
/** @var string[] */
|
||||||
|
<<<<<<< HEAD
|
||||||
|
private array $ALWAYS_EXCLUDE = ['MokoCLI', '.github-private'];
|
||||||
|
=======
|
||||||
private array $ALWAYS_EXCLUDE = ['mokoplatform', '.github-private'];
|
private array $ALWAYS_EXCLUDE = ['mokoplatform', '.github-private'];
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
/** @var array<string, string> */
|
/** @var array<string, string> */
|
||||||
private array $PLATFORM_TO_TYPE = [
|
private array $PLATFORM_TO_TYPE = [
|
||||||
@@ -183,7 +193,11 @@ class CreateProjectCli extends CliFramework
|
|||||||
CURLOPT_HTTPHEADER => [
|
CURLOPT_HTTPHEADER => [
|
||||||
'Authorization: bearer ' . $token,
|
'Authorization: bearer ' . $token,
|
||||||
'Content-Type: application/json',
|
'Content-Type: application/json',
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'User-Agent: MokoCLI-CreateProject',
|
||||||
|
=======
|
||||||
'User-Agent: mokoplatform-CreateProject',
|
'User-Agent: mokoplatform-CreateProject',
|
||||||
|
>>>>>>> main
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
$body = (string) curl_exec($ch);
|
$body = (string) curl_exec($ch);
|
||||||
@@ -422,14 +436,22 @@ class CreateProjectCli extends CliFramework
|
|||||||
updateProjectV2(input: {
|
updateProjectV2(input: {
|
||||||
projectId: $projectId,
|
projectId: $projectId,
|
||||||
shortDescription: $shortDescription,
|
shortDescription: $shortDescription,
|
||||||
|
<<<<<<< HEAD
|
||||||
|
readme: "Managed by MokoCLI. Run `php cli/create_project.php` to regenerate."
|
||||||
|
=======
|
||||||
readme: "Managed by mokoplatform. Run `php cli/create_project.php` to regenerate."
|
readme: "Managed by mokoplatform. Run `php cli/create_project.php` to regenerate."
|
||||||
|
>>>>>>> main
|
||||||
}) {
|
}) {
|
||||||
projectV2 { id }
|
projectV2 { id }
|
||||||
}
|
}
|
||||||
}',
|
}',
|
||||||
[
|
[
|
||||||
'projectId' => $projectId,
|
'projectId' => $projectId,
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'shortDescription' => "Standard project board for {$repo}. Auto-created by MokoCLI.",
|
||||||
|
=======
|
||||||
'shortDescription' => "Standard project board for {$repo}. Auto-created by mokoplatform.",
|
'shortDescription' => "Standard project board for {$repo}. Auto-created by mokoplatform.",
|
||||||
|
>>>>>>> main
|
||||||
],
|
],
|
||||||
$token
|
$token
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/create_repo.php
|
||||||
|
* BRIEF: Scaffold a new governed repository with full MokoCLI baseline
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/create_repo.php
|
* PATH: /cli/create_repo.php
|
||||||
* BRIEF: Scaffold a new governed repository with full mokoplatform baseline
|
* BRIEF: Scaffold a new governed repository with full mokoplatform baseline
|
||||||
|
>>>>>>> main
|
||||||
*/
|
*/
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
@@ -28,7 +36,11 @@ class CreateRepoCli extends CliFramework
|
|||||||
{
|
{
|
||||||
protected function configure(): void
|
protected function configure(): void
|
||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->setDescription('Scaffold a new governed repository with full MokoCLI baseline');
|
||||||
|
=======
|
||||||
$this->setDescription('Scaffold a new governed repository with full mokoplatform baseline');
|
$this->setDescription('Scaffold a new governed repository with full mokoplatform baseline');
|
||||||
|
>>>>>>> main
|
||||||
$this->addArgument('--name', 'Repository name', null);
|
$this->addArgument('--name', 'Repository name', null);
|
||||||
$this->addArgument('--type', 'Project type', null);
|
$this->addArgument('--type', 'Project type', null);
|
||||||
$this->addArgument('--description', 'Repository description', '');
|
$this->addArgument('--description', 'Repository description', '');
|
||||||
@@ -60,6 +72,18 @@ class CreateRepoCli extends CliFramework
|
|||||||
'generic' => 'generic',
|
'generic' => 'generic',
|
||||||
];
|
];
|
||||||
$TYPE_TO_TOPICS = [
|
$TYPE_TO_TOPICS = [
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'dolibarr' => ['dolibarr', 'erp', 'crm', 'php', 'MokoCLI'],
|
||||||
|
'joomla' => ['joomla', 'cms', 'php', 'MokoCLI'],
|
||||||
|
'nodejs' => ['nodejs', 'javascript', 'typescript', 'MokoCLI'],
|
||||||
|
'terraform' => ['terraform', 'infrastructure', 'iac', 'MokoCLI'],
|
||||||
|
'python' => ['python', 'MokoCLI'],
|
||||||
|
'wordpress' => ['wordpress', 'php', 'cms', 'MokoCLI'],
|
||||||
|
'generic' => ['MokoCLI'],
|
||||||
|
];
|
||||||
|
$platform = $TYPE_TO_PLATFORM[$type] ?? 'generic';
|
||||||
|
$topics = $TYPE_TO_TOPICS[$type] ?? ['MokoCLI'];
|
||||||
|
=======
|
||||||
'dolibarr' => ['dolibarr', 'erp', 'crm', 'php', 'mokoplatform'],
|
'dolibarr' => ['dolibarr', 'erp', 'crm', 'php', 'mokoplatform'],
|
||||||
'joomla' => ['joomla', 'cms', 'php', 'mokoplatform'],
|
'joomla' => ['joomla', 'cms', 'php', 'mokoplatform'],
|
||||||
'nodejs' => ['nodejs', 'javascript', 'typescript', 'mokoplatform'],
|
'nodejs' => ['nodejs', 'javascript', 'typescript', 'mokoplatform'],
|
||||||
@@ -70,6 +94,7 @@ class CreateRepoCli extends CliFramework
|
|||||||
];
|
];
|
||||||
$platform = $TYPE_TO_PLATFORM[$type] ?? 'generic';
|
$platform = $TYPE_TO_PLATFORM[$type] ?? 'generic';
|
||||||
$topics = $TYPE_TO_TOPICS[$type] ?? ['mokoplatform'];
|
$topics = $TYPE_TO_TOPICS[$type] ?? ['mokoplatform'];
|
||||||
|
>>>>>>> main
|
||||||
$platformName = $adapter->getPlatformName();
|
$platformName = $adapter->getPlatformName();
|
||||||
$vis = $private ? 'private' : 'public';
|
$vis = $private ? 'private' : 'public';
|
||||||
echo "Scaffolding new repository: {$org}/{$name}"
|
echo "Scaffolding new repository: {$org}/{$name}"
|
||||||
@@ -84,7 +109,11 @@ class CreateRepoCli extends CliFramework
|
|||||||
if (!$this->dryRun) {
|
if (!$this->dryRun) {
|
||||||
try {
|
try {
|
||||||
$data = $adapter->createOrgRepo($org, $name, [
|
$data = $adapter->createOrgRepo($org, $name, [
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'description' => $description ?: "Managed by MokoCLI ({$type})",
|
||||||
|
=======
|
||||||
'description' => $description ?: "Managed by mokoplatform ({$type})",
|
'description' => $description ?: "Managed by mokoplatform ({$type})",
|
||||||
|
>>>>>>> main
|
||||||
'private' => $private,
|
'private' => $private,
|
||||||
'has_issues' => true,
|
'has_issues' => true,
|
||||||
'has_projects' => true,
|
'has_projects' => true,
|
||||||
@@ -143,7 +172,11 @@ class CreateRepoCli extends CliFramework
|
|||||||
. "Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>\n"
|
. "Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>\n"
|
||||||
. "SPDX-License-Identifier: GPL-3.0-or-later\n"
|
. "SPDX-License-Identifier: GPL-3.0-or-later\n"
|
||||||
. "DEFGROUP: {$name}\n"
|
. "DEFGROUP: {$name}\n"
|
||||||
|
<<<<<<< HEAD
|
||||||
|
. "INGROUP: MokoCLI\n"
|
||||||
|
=======
|
||||||
. "INGROUP: mokoplatform\n"
|
. "INGROUP: mokoplatform\n"
|
||||||
|
>>>>>>> main
|
||||||
. "REPO: {$repoUrl}\n"
|
. "REPO: {$repoUrl}\n"
|
||||||
. "PATH: /README.md\n"
|
. "PATH: /README.md\n"
|
||||||
. "BRIEF: {$description}\n"
|
. "BRIEF: {$description}\n"
|
||||||
@@ -152,7 +185,11 @@ class CreateRepoCli extends CliFramework
|
|||||||
. "{$description}\n\n"
|
. "{$description}\n\n"
|
||||||
. "## Getting Started\n\n"
|
. "## Getting Started\n\n"
|
||||||
. "This repository is governed by"
|
. "This repository is governed by"
|
||||||
|
<<<<<<< HEAD
|
||||||
|
. " [MokoCLI]({$standardsUrl}).\n\n"
|
||||||
|
=======
|
||||||
. " [mokoplatform]({$standardsUrl}).\n\n"
|
. " [mokoplatform]({$standardsUrl}).\n\n"
|
||||||
|
>>>>>>> main
|
||||||
. "## License\n\n"
|
. "## License\n\n"
|
||||||
. "GPL-3.0-or-later. See [LICENSE](LICENSE)"
|
. "GPL-3.0-or-later. See [LICENSE](LICENSE)"
|
||||||
. " for details.\n";
|
. " for details.\n";
|
||||||
@@ -169,7 +206,11 @@ class CreateRepoCli extends CliFramework
|
|||||||
$name,
|
$name,
|
||||||
'README.md',
|
'README.md',
|
||||||
$readmeContent,
|
$readmeContent,
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'docs: initialize README with MokoCLI header [skip ci]',
|
||||||
|
=======
|
||||||
'docs: initialize README with mokoplatform header [skip ci]',
|
'docs: initialize README with mokoplatform header [skip ci]',
|
||||||
|
>>>>>>> main
|
||||||
$sha
|
$sha
|
||||||
);
|
);
|
||||||
echo " README.md created\n";
|
echo " README.md created\n";
|
||||||
|
|||||||
@@ -8,9 +8,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.CLI
|
* DEFGROUP: MokoPlatform.CLI
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/deploy_joomla.php
|
* PATH: /cli/deploy_joomla.php
|
||||||
* BRIEF: Smart Joomla deploy — routes files to correct server directories by extension type
|
* BRIEF: Smart Joomla deploy — routes files to correct server directories by extension type
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/dev_branch_reset.php
|
* PATH: /cli/dev_branch_reset.php
|
||||||
* BRIEF: Delete and recreate dev branch from main via Gitea API
|
* BRIEF: Delete and recreate dev branch from main via Gitea API
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/grafana_dashboard.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/grafana_dashboard.php
|
* PATH: /cli/grafana_dashboard.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Manage Grafana dashboards via API
|
* BRIEF: Manage Grafana dashboards via API
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/joomla_build.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/joomla_build.php
|
* PATH: /cli/joomla_build.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Build a Joomla extension ZIP from manifest — all types supported
|
* BRIEF: Build a Joomla extension ZIP from manifest — all types supported
|
||||||
* NOTE: Called by pre-release and auto-release workflows.
|
* NOTE: Called by pre-release and auto-release workflows.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/joomla_compat_check.php
|
* PATH: /cli/joomla_compat_check.php
|
||||||
* BRIEF: Check if extension targetplatform regex matches the latest Joomla version
|
* BRIEF: Check if extension targetplatform regex matches the latest Joomla version
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,11 +6,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/joomla_metadata_validate.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/joomla_metadata_validate.php
|
* PATH: /cli/joomla_metadata_validate.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML
|
* BRIEF: Validate MokoGitea repo metadata against Joomla extension manifest XML
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -18,7 +26,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
require_once __DIR__ . '/../lib/Enterprise/CliFramework.php';
|
require_once __DIR__ . '/../lib/Enterprise/CliFramework.php';
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
use MokoEnterprise\CliFramework;
|
||||||
|
=======
|
||||||
use MokoCli\CliFramework;
|
use MokoCli\CliFramework;
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
class JoomlaMetadataValidateCli extends CliFramework
|
class JoomlaMetadataValidateCli extends CliFramework
|
||||||
{
|
{
|
||||||
@@ -146,9 +158,12 @@ class JoomlaMetadataValidateCli extends CliFramework
|
|||||||
if (preg_match('/<extension\s[^>]*type=["\']([^"\']+)["\']/', $content, $typeMatch)) {
|
if (preg_match('/<extension\s[^>]*type=["\']([^"\']+)["\']/', $content, $typeMatch)) {
|
||||||
$xml = @simplexml_load_string($content);
|
$xml = @simplexml_load_string($content);
|
||||||
if ($xml === false) {
|
if ($xml === false) {
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
$relPath = str_replace($root . '/', '', $file);
|
$relPath = str_replace($root . '/', '', $file);
|
||||||
$relPath = str_replace($root . '\\', '', $relPath);
|
$relPath = str_replace($root . '\\', '', $relPath);
|
||||||
$this->log('WARN', "Skipping {$relPath}: malformed XML");
|
$this->log('WARN', "Skipping {$relPath}: malformed XML");
|
||||||
|
>>>>>>> main
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,6 +188,29 @@ class JoomlaMetadataValidateCli extends CliFramework
|
|||||||
|
|
||||||
private function loadMetadata(string $root, string $org, string $repoName, string $token, string $apiBase): ?array
|
private function loadMetadata(string $root, string $org, string $repoName, string $token, string $apiBase): ?array
|
||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
|
if ($token !== '') {
|
||||||
|
$url = "{$apiBase}/repos/{$org}/{$repoName}/metadata";
|
||||||
|
$ctx = stream_context_create([
|
||||||
|
'http' => [
|
||||||
|
'header' => "Authorization: token {$token}\r\nAccept: application/json\r\n",
|
||||||
|
'timeout' => 10,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$body = @file_get_contents($url, false, $ctx);
|
||||||
|
|
||||||
|
if ($body !== false) {
|
||||||
|
$data = json_decode($body, true);
|
||||||
|
if (is_array($data)) {
|
||||||
|
$data['source'] = 'api';
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
=======
|
||||||
if ($token === '') {
|
if ($token === '') {
|
||||||
$this->log('ERROR', 'No API token provided (use --token or set GITEA_TOKEN env var)');
|
$this->log('ERROR', 'No API token provided (use --token or set GITEA_TOKEN env var)');
|
||||||
return null;
|
return null;
|
||||||
@@ -224,6 +262,7 @@ class JoomlaMetadataValidateCli extends CliFramework
|
|||||||
|
|
||||||
$data['source'] = 'api';
|
$data['source'] = 'api';
|
||||||
return $data;
|
return $data;
|
||||||
|
>>>>>>> main
|
||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
@@ -237,9 +276,13 @@ class JoomlaMetadataValidateCli extends CliFramework
|
|||||||
$type = $joomlaXml['type'];
|
$type = $joomlaXml['type'];
|
||||||
|
|
||||||
// 1. Extension type
|
// 1. Extension type
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$metaType = $this->normalizeExtensionType($metadata['extension_type'] ?? '');
|
||||||
|
=======
|
||||||
$metaType = $this->normalizeExtensionType(
|
$metaType = $this->normalizeExtensionType(
|
||||||
$metadata['extension_type'] ?? $metadata['package_type'] ?? ''
|
$metadata['extension_type'] ?? $metadata['package_type'] ?? ''
|
||||||
);
|
);
|
||||||
|
>>>>>>> main
|
||||||
$results[] = [
|
$results[] = [
|
||||||
'field' => 'extension_type',
|
'field' => 'extension_type',
|
||||||
'metadata' => $metaType,
|
'metadata' => $metaType,
|
||||||
|
|||||||
@@ -8,9 +8,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/joomla_release.php
|
* PATH: /cli/joomla_release.php
|
||||||
* BRIEF: Joomla release pipeline — build ZIP+tar.gz, upload to GitHub Release, update updates.xml
|
* BRIEF: Joomla release pipeline — build ZIP+tar.gz, upload to GitHub Release, update updates.xml
|
||||||
*
|
*
|
||||||
@@ -407,7 +413,11 @@ class JoomlaRelease extends CliFramework
|
|||||||
$this->api->post("/repos/{$repo}/releases", [
|
$this->api->post("/repos/{$repo}/releases", [
|
||||||
'tag_name' => $tag,
|
'tag_name' => $tag,
|
||||||
'name' => $releaseName,
|
'name' => $releaseName,
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'body' => "## {$version}\n\nCreated by MokoCLI release pipeline.",
|
||||||
|
=======
|
||||||
'body' => "## {$version}\n\nCreated by mokoplatform release pipeline.",
|
'body' => "## {$version}\n\nCreated by mokoplatform release pipeline.",
|
||||||
|
>>>>>>> main
|
||||||
'prerelease' => ($stability !== 'stable'),
|
'prerelease' => ($stability !== 'stable'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/license_manage.php
|
* PATH: /cli/license_manage.php
|
||||||
* BRIEF: Manage license packages and keys via MokoGitea licensing API
|
* BRIEF: Manage license packages and keys via MokoGitea licensing API
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/manifest_element.php
|
* PATH: /cli/manifest_element.php
|
||||||
* BRIEF: Extract element name, type, type prefix, and ZIP name from manifest
|
* BRIEF: Extract element name, type, type prefix, and ZIP name from manifest
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,11 +6,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/manifest_licensing.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/manifest_licensing.php
|
* PATH: /cli/manifest_licensing.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests
|
* BRIEF: Ensure licensing tags (updateservers, dlid) in Joomla extension manifests
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,21 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/manifest_read.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
* BRIEF: Parse .manifest.xml and output requested field(s) for CI consumption
|
||||||
|
=======
|
||||||
* DEFGROUP: mokocli.CLI
|
* DEFGROUP: mokocli.CLI
|
||||||
* INGROUP: mokocli
|
* INGROUP: mokocli
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
* PATH: /cli/manifest_read.php
|
* PATH: /cli/manifest_read.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
* BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest
|
* BRIEF: Read repo metadata from Gitea manifest API, auto-detect the rest
|
||||||
|
>>>>>>> main
|
||||||
*/
|
*/
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
@@ -67,6 +76,13 @@ class ManifestReadCli extends CliFramework
|
|||||||
$fields = $this->autoDetect($root, $repo);
|
$fields = $this->autoDetect($root, $repo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
// Priority: manifest.xml (current standard)
|
||||||
|
$candidates = [
|
||||||
|
"{$root}/.mokogitea/manifest.xml",
|
||||||
|
"{$root}/.mokogitea/.manifest.xml", // legacy (dot-prefixed)
|
||||||
|
"{$root}/.mokogitea/.MokoCLI", // legacy v4
|
||||||
|
=======
|
||||||
if (empty($fields)) {
|
if (empty($fields)) {
|
||||||
$this->log('ERROR', "Could not resolve metadata for {$root}");
|
$this->log('ERROR', "Could not resolve metadata for {$root}");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -134,6 +150,7 @@ class ManifestReadCli extends CliFramework
|
|||||||
$fields = [
|
$fields = [
|
||||||
'name' => $repoName ?: basename($root),
|
'name' => $repoName ?: basename($root),
|
||||||
'org' => 'MokoConsulting',
|
'org' => 'MokoConsulting',
|
||||||
|
>>>>>>> main
|
||||||
];
|
];
|
||||||
|
|
||||||
// Resolve source directory (source/ or src/)
|
// Resolve source directory (source/ or src/)
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/package_build.php
|
* PATH: /cli/package_build.php
|
||||||
* BRIEF: Build ZIP and tar.gz install packages for Joomla/Dolibarr/generic projects
|
* BRIEF: Build ZIP and tar.gz install packages for Joomla/Dolibarr/generic projects
|
||||||
*
|
*
|
||||||
|
|||||||
+10
-2
@@ -6,11 +6,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/platform_detect.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/platform_detect.php
|
* PATH: /cli/platform_detect.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Auto-detect repository platform type and optionally update manifest
|
* BRIEF: Auto-detect repository platform type and optionally update manifest
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -134,9 +142,9 @@ class PlatformDetectCli extends CliFramework
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Platform — is mokoplatform itself or org-config
|
// 5. Platform — is MokoCLI itself or org-config
|
||||||
$repoName = basename($root);
|
$repoName = basename($root);
|
||||||
if (in_array($repoName, ['mokoplatform', 'mokogitea-org-config'])) {
|
if (in_array($repoName, ['mokocli', 'mokoplatform', 'mokogitea-org-config'])) {
|
||||||
return 'platform';
|
return 'platform';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/release.php
|
||||||
|
* BRIEF: Automate the MokoCLI version branch release flow
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/release.php
|
* PATH: /cli/release.php
|
||||||
* BRIEF: Automate the mokoplatform version branch release flow
|
* BRIEF: Automate the mokoplatform version branch release flow
|
||||||
|
>>>>>>> main
|
||||||
*/
|
*/
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
@@ -23,7 +31,11 @@ class ReleaseCli extends CliFramework
|
|||||||
{
|
{
|
||||||
protected function configure(): void
|
protected function configure(): void
|
||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->setDescription('Automate the MokoCLI version branch release flow');
|
||||||
|
=======
|
||||||
$this->setDescription('Automate the mokoplatform version branch release flow');
|
$this->setDescription('Automate the mokoplatform version branch release flow');
|
||||||
|
>>>>>>> main
|
||||||
$this->addArgument('--bump', 'Bump type: patch, minor, or major', '');
|
$this->addArgument('--bump', 'Bump type: patch, minor, or major', '');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/release_body_update.php
|
* PATH: /cli/release_body_update.php
|
||||||
* BRIEF: Update Gitea release body with changelog extract and checksums
|
* BRIEF: Update Gitea release body with changelog extract and checksums
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,12 +6,21 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/release_cascade.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
* BRIEF: DEPRECATED — cascade behavior removed. Each release stream is independent.
|
||||||
|
=======
|
||||||
* DEFGROUP: mokocli.CLI
|
* DEFGROUP: mokocli.CLI
|
||||||
* INGROUP: mokocli
|
* INGROUP: mokocli
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
* PATH: /cli/release_cascade.php
|
* PATH: /cli/release_cascade.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
* BRIEF: Cascade release zip to all lower stability channels
|
* BRIEF: Cascade release zip to all lower stability channels
|
||||||
|
>>>>>>> main
|
||||||
*/
|
*/
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/release_create.php
|
* PATH: /cli/release_create.php
|
||||||
* BRIEF: Create or overwrite a Gitea release with proper naming
|
* BRIEF: Create or overwrite a Gitea release with proper naming
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/release_manage.php
|
* PATH: /cli/release_manage.php
|
||||||
* BRIEF: Create/update Gitea releases, upload assets, update release body
|
* BRIEF: Create/update Gitea releases, upload assets, update release body
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/release_mirror.php
|
* PATH: /cli/release_mirror.php
|
||||||
* BRIEF: Mirror a Gitea release (with assets) to a GitHub repository
|
* BRIEF: Mirror a Gitea release (with assets) to a GitHub repository
|
||||||
*/
|
*/
|
||||||
@@ -201,7 +207,11 @@ class ReleaseMirrorCli extends CliFramework
|
|||||||
CURLOPT_HTTPHEADER => [
|
CURLOPT_HTTPHEADER => [
|
||||||
"Authorization: token {$token}",
|
"Authorization: token {$token}",
|
||||||
'Accept: application/vnd.github+json',
|
'Accept: application/vnd.github+json',
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'User-Agent: MokoCLI',
|
||||||
|
=======
|
||||||
'User-Agent: mokoplatform',
|
'User-Agent: mokoplatform',
|
||||||
|
>>>>>>> main
|
||||||
'Content-Type: application/json',
|
'Content-Type: application/json',
|
||||||
],
|
],
|
||||||
CURLOPT_TIMEOUT => 30,
|
CURLOPT_TIMEOUT => 30,
|
||||||
@@ -229,7 +239,11 @@ class ReleaseMirrorCli extends CliFramework
|
|||||||
CURLOPT_HTTPHEADER => [
|
CURLOPT_HTTPHEADER => [
|
||||||
"Authorization: token {$token}",
|
"Authorization: token {$token}",
|
||||||
'Accept: application/vnd.github+json',
|
'Accept: application/vnd.github+json',
|
||||||
|
<<<<<<< HEAD
|
||||||
|
'User-Agent: MokoCLI',
|
||||||
|
=======
|
||||||
'User-Agent: mokoplatform',
|
'User-Agent: mokoplatform',
|
||||||
|
>>>>>>> main
|
||||||
'Content-Type: application/octet-stream',
|
'Content-Type: application/octet-stream',
|
||||||
],
|
],
|
||||||
CURLOPT_POSTFIELDS => file_get_contents($filePath),
|
CURLOPT_POSTFIELDS => file_get_contents($filePath),
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/release_notes.php
|
* PATH: /cli/release_notes.php
|
||||||
* BRIEF: Extract release notes from CHANGELOG.md for a given version
|
* BRIEF: Extract release notes from CHANGELOG.md for a given version
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/release_package.php
|
* PATH: /cli/release_package.php
|
||||||
* BRIEF: Build packages (ZIP + tar.gz) with SHA-256 and upload to Gitea release
|
* BRIEF: Build packages (ZIP + tar.gz) with SHA-256 and upload to Gitea release
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/release_promote.php
|
* PATH: /cli/release_promote.php
|
||||||
* BRIEF: Promote a Gitea release from one channel to another (rename release, tag, assets)
|
* BRIEF: Promote a Gitea release from one channel to another (rename release, tag, assets)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,11 +6,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/release_publish.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/release_publish.php
|
* PATH: /cli/release_publish.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Publish a release and create copies for all lesser stability streams.
|
* BRIEF: Publish a release and create copies for all lesser stability streams.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/release_validate.php
|
* PATH: /cli/release_validate.php
|
||||||
* BRIEF: Pre-release validation -- version consistency, required files, manifest checks
|
* BRIEF: Pre-release validation -- version consistency, required files, manifest checks
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/release_verify.php
|
* PATH: /cli/release_verify.php
|
||||||
* BRIEF: Verify a built release artifact — version, SHA256, disallowed files
|
* BRIEF: Verify a built release artifact — version, SHA256, disallowed files
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/scaffold_client.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/scaffold_client.php
|
* PATH: /cli/scaffold_client.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings
|
* BRIEF: Scaffold a new client-waas repo from Template-Client-WaaS with pre-configured settings
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/sync_rulesets.php
|
* PATH: /cli/sync_rulesets.php
|
||||||
* BRIEF: Apply branch protection rules to all repos via platform adapter
|
* BRIEF: Apply branch protection rules to all repos via platform adapter
|
||||||
*/
|
*/
|
||||||
@@ -46,7 +52,11 @@ class SyncRulesetsCli extends CliFramework
|
|||||||
);
|
);
|
||||||
|
|
||||||
$platformName = $adapter->getPlatformName();
|
$platformName = $adapter->getPlatformName();
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$ALWAYS_EXCLUDE = ['MokoCLI', '.github-private'];
|
||||||
|
=======
|
||||||
$ALWAYS_EXCLUDE = ['mokoplatform', '.github-private'];
|
$ALWAYS_EXCLUDE = ['mokoplatform', '.github-private'];
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
// -- Protection rules (platform-agnostic format) --
|
// -- Protection rules (platform-agnostic format) --
|
||||||
$PROTECTIONS = [
|
$PROTECTIONS = [
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/theme_lint.php
|
* PATH: /cli/theme_lint.php
|
||||||
* BRIEF: Lint theme files -- CSS syntax, image sizes, hardcoded URLs
|
* BRIEF: Lint theme files -- CSS syntax, image sizes, hardcoded URLs
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/updates_xml_build.php
|
* PATH: /cli/updates_xml_build.php
|
||||||
* BRIEF: Generate Joomla updates.xml from extension manifest metadata
|
* BRIEF: Generate Joomla updates.xml from extension manifest metadata
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,11 +6,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/updates_xml_sync.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/updates_xml_sync.php
|
* PATH: /cli/updates_xml_sync.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Sync updates.xml to target branches via Gitea API
|
* BRIEF: Sync updates.xml to target branches via Gitea API
|
||||||
* NOTE: Called by pre-release and auto-release workflows after updates.xml
|
* NOTE: Called by pre-release and auto-release workflows after updates.xml
|
||||||
* is modified on the current branch. Pushes the file to other branches
|
* is modified on the current branch. Pushes the file to other branches
|
||||||
|
|||||||
@@ -6,11 +6,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/version_auto_bump.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/version_auto_bump.php
|
* PATH: /cli/version_auto_bump.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash
|
* BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/version_bump.php
|
* PATH: /cli/version_bump.php
|
||||||
* BRIEF: Auto-increment version -- manifest.xml is canonical, cascades to all XML and MD files
|
* BRIEF: Auto-increment version -- manifest.xml is canonical, cascades to all XML and MD files
|
||||||
*/
|
*/
|
||||||
@@ -27,6 +33,7 @@ class VersionBumpCli extends CliFramework
|
|||||||
$this->addArgument('--path', 'Repository root', '.');
|
$this->addArgument('--path', 'Repository root', '.');
|
||||||
$this->addArgument('--minor', 'Bump minor version', false);
|
$this->addArgument('--minor', 'Bump minor version', false);
|
||||||
$this->addArgument('--major', 'Bump major version', false);
|
$this->addArgument('--major', 'Bump major version', false);
|
||||||
|
$this->addArgument('--min-version', 'Minimum base version (ensures bump is above this)', '');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function run(): int
|
protected function run(): int
|
||||||
@@ -116,6 +123,28 @@ class VersionBumpCli extends CliFramework
|
|||||||
$baseVersion = $v;
|
$baseVersion = $v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check --min-version: ensures dev never falls behind stable
|
||||||
|
$minVersion = $this->getArgument('--min-version');
|
||||||
|
if (!empty($minVersion)) {
|
||||||
|
$minVersion = preg_replace('/-(?:dev|alpha|beta|rc)$/', '', $minVersion);
|
||||||
|
if (preg_match('/^\d{2}\.\d{2}\.\d{2}$/', $minVersion)) {
|
||||||
|
if ($baseVersion === null || version_compare($minVersion, $baseVersion, '>')) {
|
||||||
|
$this->log('INFO', "Using --min-version {$minVersion} (higher than manifest {$baseVersion})");
|
||||||
|
$baseVersion = $minVersion;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto-detect: scan git tags for higher versions from other channels
|
||||||
|
if ($baseVersion !== null) {
|
||||||
|
$gitTagVersion = $this->getHighestGitTagVersion($root);
|
||||||
|
if ($gitTagVersion !== null && version_compare($gitTagVersion, $baseVersion, '>')) {
|
||||||
|
$this->log('INFO', "Git tag version {$gitTagVersion} is higher than manifest {$baseVersion} — using as base");
|
||||||
|
$baseVersion = $gitTagVersion;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($baseVersion === null) {
|
if ($baseVersion === null) {
|
||||||
$this->log('ERROR', "No version found in manifest.xml, README.md, or Joomla XML");
|
$this->log('ERROR', "No version found in manifest.xml, README.md, or Joomla XML");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -343,6 +372,54 @@ class VersionBumpCli extends CliFramework
|
|||||||
echo "{$old} -> {$newFull}\n";
|
echo "{$old} -> {$newFull}\n";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scan git release tags for the highest version across all channels.
|
||||||
|
*
|
||||||
|
* Checks release names like "MokoSuiteClient (VERSION: 02.45.00)" in
|
||||||
|
* git tags (stable, release-candidate, development, etc.) to find the
|
||||||
|
* highest version that has been released on any channel.
|
||||||
|
*/
|
||||||
|
private function getHighestGitTagVersion(string $root): ?string
|
||||||
|
{
|
||||||
|
$highest = null;
|
||||||
|
|
||||||
|
// Method 1: Parse version from git tag annotations / release commit messages
|
||||||
|
$output = [];
|
||||||
|
exec("cd " . escapeshellarg($root) . " && git log --all --oneline --grep='chore(version)' --grep='chore(release)' --format='%s' -20 2>/dev/null", $output);
|
||||||
|
|
||||||
|
foreach ($output as $line) {
|
||||||
|
if (preg_match('/(\d{2}\.\d{2}\.\d{2})/', $line, $m)) {
|
||||||
|
$v = preg_replace('/-(?:dev|alpha|beta|rc)$/', '', $m[1]);
|
||||||
|
if ($highest === null || version_compare($v, $highest, '>')) {
|
||||||
|
$highest = $v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method 2: Check version in remote branches' manifest files
|
||||||
|
$branches = ['origin/main', 'origin/rc', 'origin/dev'];
|
||||||
|
$manifestPaths = ['source/pkg_*.xml', 'pkg_*.xml'];
|
||||||
|
|
||||||
|
foreach ($branches as $branch) {
|
||||||
|
foreach ($manifestPaths as $pattern) {
|
||||||
|
$files = [];
|
||||||
|
exec("cd " . escapeshellarg($root) . " && git ls-tree --name-only {$branch} -- '{$pattern}' 2>/dev/null", $files);
|
||||||
|
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$content = shell_exec("cd " . escapeshellarg($root) . " && git show {$branch}:{$file} 2>/dev/null");
|
||||||
|
if ($content && preg_match('#<version>(\d{2}\.\d{2}\.\d{2})(?:-(?:dev|alpha|beta|rc))?</version>#', $content, $m)) {
|
||||||
|
$v = $m[1];
|
||||||
|
if ($highest === null || version_compare($v, $highest, '>')) {
|
||||||
|
$highest = $v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $highest;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$app = new VersionBumpCli();
|
$app = new VersionBumpCli();
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/version_bump_remote.php
|
* PATH: /cli/version_bump_remote.php
|
||||||
* BRIEF: Bump version in manifest XML and CHANGELOG.md on a remote branch via Gitea API
|
* BRIEF: Bump version in manifest XML and CHANGELOG.md on a remote branch via Gitea API
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,11 +6,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/version_check.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/version_check.php
|
* PATH: /cli/version_check.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Validate version consistency across README, manifests, and sub-packages
|
* BRIEF: Validate version consistency across README, manifests, and sub-packages
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/version_read.php
|
* PATH: /cli/version_read.php
|
||||||
* BRIEF: Read version — manifest.xml is canonical, falls back to README.md and Joomla XML
|
* BRIEF: Read version — manifest.xml is canonical, falls back to README.md and Joomla XML
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/version_reset_dev.php
|
* PATH: /cli/version_reset_dev.php
|
||||||
* BRIEF: Reset platform version to 'development' on a branch via Gitea API
|
* BRIEF: Reset platform version to 'development' on a branch via Gitea API
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,9 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /cli/version_set_platform.php
|
* PATH: /cli/version_set_platform.php
|
||||||
* BRIEF: Set version in platform-specific files (Dolibarr $this->version, Joomla <version>)
|
* BRIEF: Set version in platform-specific files (Dolibarr $this->version, Joomla <version>)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,12 +6,21 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.CLI
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /cli/wiki_sync.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
* BRIEF: Sync select wiki pages from MokoCLI to all template repos
|
||||||
|
=======
|
||||||
* DEFGROUP: mokoplatform.CLI
|
* DEFGROUP: mokoplatform.CLI
|
||||||
* INGROUP: mokoplatform
|
* INGROUP: mokoplatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /cli/wiki_sync.php
|
* PATH: /cli/wiki_sync.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
* BRIEF: Sync select wiki pages from mokoplatform to all template repos
|
* BRIEF: Sync select wiki pages from mokoplatform to all template repos
|
||||||
|
>>>>>>> main
|
||||||
*/
|
*/
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
@@ -25,7 +34,11 @@ class WikiSyncCli extends CliFramework
|
|||||||
private string $giteaUrl = 'https://git.mokoconsulting.tech';
|
private string $giteaUrl = 'https://git.mokoconsulting.tech';
|
||||||
private string $token = '';
|
private string $token = '';
|
||||||
private string $org = 'MokoConsulting';
|
private string $org = 'MokoConsulting';
|
||||||
|
<<<<<<< HEAD
|
||||||
|
private string $sourceRepo = 'MokoCLI';
|
||||||
|
=======
|
||||||
private string $sourceRepo = 'mokoplatform';
|
private string $sourceRepo = 'mokoplatform';
|
||||||
|
>>>>>>> main
|
||||||
private array $targetRepos = [];
|
private array $targetRepos = [];
|
||||||
private array $pages = [];
|
private array $pages = [];
|
||||||
private bool $allTemplates = false;
|
private bool $allTemplates = false;
|
||||||
@@ -38,10 +51,17 @@ class WikiSyncCli extends CliFramework
|
|||||||
|
|
||||||
protected function configure(): void
|
protected function configure(): void
|
||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$this->setDescription('Sync wiki pages from MokoCLI to template repos');
|
||||||
|
$this->addArgument('--token', 'Gitea API token (required)', '');
|
||||||
|
$this->addArgument('--org', 'Organization (default: MokoConsulting)', 'MokoConsulting');
|
||||||
|
$this->addArgument('--source', 'Source repo (default: MokoCLI)', 'MokoCLI');
|
||||||
|
=======
|
||||||
$this->setDescription('Sync wiki pages from mokoplatform to template repos');
|
$this->setDescription('Sync wiki pages from mokoplatform to template repos');
|
||||||
$this->addArgument('--token', 'Gitea API token (required)', '');
|
$this->addArgument('--token', 'Gitea API token (required)', '');
|
||||||
$this->addArgument('--org', 'Organization (default: MokoConsulting)', 'MokoConsulting');
|
$this->addArgument('--org', 'Organization (default: MokoConsulting)', 'MokoConsulting');
|
||||||
$this->addArgument('--source', 'Source repo (default: mokoplatform)', 'mokoplatform');
|
$this->addArgument('--source', 'Source repo (default: mokoplatform)', 'mokoplatform');
|
||||||
|
>>>>>>> main
|
||||||
$this->addArgument('--target', 'Target repo (can repeat)', '');
|
$this->addArgument('--target', 'Target repo (can repeat)', '');
|
||||||
$this->addArgument('--page', 'Page to sync (can repeat)', '');
|
$this->addArgument('--page', 'Page to sync (can repeat)', '');
|
||||||
$this->addArgument('--all-standards', 'Sync all UPPERCASE standards pages', false);
|
$this->addArgument('--all-standards', 'Sync all UPPERCASE standards pages', false);
|
||||||
|
|||||||
@@ -6,11 +6,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
* DEFGROUP: moko-platform.CLI
|
* DEFGROUP: MokoCLI.CLI
|
||||||
* INGROUP: moko-platform
|
* INGROUP: MokoCLI
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
* PATH: /cli/workflow_sync.php
|
* PATH: /cli/workflow_sync.php
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform
|
* BRIEF: Sync workflows from Generic → platform templates → live repos based on manifest.platform
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
{
|
{
|
||||||
|
<<<<<<< HEAD
|
||||||
|
"name": "mokoconsulting-tech/mokocli",
|
||||||
|
"description": "MokoCLI Enterprise API \u2014 PHP implementation",
|
||||||
|
=======
|
||||||
"name": "mokoconsulting-tech/enterprise",
|
"name": "mokoconsulting-tech/enterprise",
|
||||||
"description": "mokoplatform Enterprise API \u2014 PHP implementation",
|
"description": "mokoplatform Enterprise API \u2014 PHP implementation",
|
||||||
|
>>>>>>> main
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"version": "09.23.00",
|
"version": "09.23.00",
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
@@ -50,7 +55,12 @@
|
|||||||
"lib/Enterprise/CliFramework.php"
|
"lib/Enterprise/CliFramework.php"
|
||||||
],
|
],
|
||||||
"files": [
|
"files": [
|
||||||
|
<<<<<<< HEAD
|
||||||
|
"src/functions.php",
|
||||||
|
"src/aliases.php"
|
||||||
|
=======
|
||||||
"source/functions.php"
|
"source/functions.php"
|
||||||
|
>>>>>>> main
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"archive": {
|
"archive": {
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Scripts.Deploy
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /deploy/backup-before-deploy.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /deploy/backup-before-deploy.php
|
* PATH: /deploy/backup-before-deploy.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Snapshot Joomla directories before deployment for rollback capability
|
* BRIEF: Snapshot Joomla directories before deployment for rollback capability
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Scripts.Deploy
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /deploy/deploy-dolibarr.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /deploy/deploy-dolibarr.php
|
* PATH: /deploy/deploy-dolibarr.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync
|
* BRIEF: Deploy Dolibarr module files to a remote server via SFTP/rsync
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Scripts.Deploy
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /deploy/deploy-joomla.php
|
* PATH: /deploy/deploy-joomla.php
|
||||||
* BRIEF: Smart Joomla deploy — routes files to correct Joomla directories based on XML manifest
|
* BRIEF: Smart Joomla deploy — routes files to correct Joomla directories based on XML manifest
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -8,9 +8,15 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Scripts.Deploy
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
|
>>>>>>> main
|
||||||
* PATH: /deploy/deploy-sftp.php
|
* PATH: /deploy/deploy-sftp.php
|
||||||
* BRIEF: Deploy a repository src/ directory to a remote web server via SFTP
|
* BRIEF: Deploy a repository src/ directory to a remote web server via SFTP
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Scripts.Deploy
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /deploy/health-check.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /deploy/health-check.php
|
* PATH: /deploy/health-check.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Post-deploy health check — verify a Joomla site is responding correctly
|
* BRIEF: Post-deploy health check — verify a Joomla site is responding correctly
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,19 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*
|
*
|
||||||
* FILE INFORMATION
|
* FILE INFORMATION
|
||||||
|
<<<<<<< HEAD
|
||||||
|
* DEFGROUP: MokoCLI.Scripts.Deploy
|
||||||
|
* INGROUP: MokoCLI
|
||||||
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
||||||
|
* PATH: /deploy/rollback-joomla.php
|
||||||
|
* VERSION: 09.25.05
|
||||||
|
=======
|
||||||
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
* DEFGROUP: MokoPlatform.Scripts.Deploy
|
||||||
* INGROUP: MokoPlatform
|
* INGROUP: MokoPlatform
|
||||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
* REPO: https://git.mokoconsulting.tech/MokoConsulting/mokoplatform
|
||||||
* PATH: /deploy/rollback-joomla.php
|
* PATH: /deploy/rollback-joomla.php
|
||||||
* VERSION: 09.32.00
|
* VERSION: 09.32.00
|
||||||
|
>>>>>>> main
|
||||||
* BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot
|
* BRIEF: Rollback a Joomla deployment by restoring from a pre-deploy snapshot
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user