Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 12 additions & 11 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,23 @@ This repository contains a SourcePawn plugin for SourceMod that provides an adva
## Technical Environment

- **Language**: SourcePawn
- **Platform**: SourceMod 1.11.0+ (latest stable recommended)
- **Build Tool**: SourceKnight (configured via `sourceknight.yaml`)
- **Compiler**: SourcePawn compiler (spcomp) via SourceKnight
- **Platform**: SourceMod 1.12.0+ (latest stable recommended)
- **Build Tool**: Native GitHub Actions workflow (`.github/workflows/ci.yml`)
- **Compiler**: SourcePawn compiler (spcomp) via `rumblefrog/setup-sp`
- **CI/CD**: GitHub Actions (`.github/workflows/ci.yml`)

## Development Setup

### Dependencies
- **SourceMod**: 1.11.0-git6917 (auto-downloaded by SourceKnight)
- **MultiColors**: Latest from srcdslab/sm-plugin-MultiColors (auto-downloaded)
- **SourceMod**: 1.12.x (installed by the CI workflow via `rumblefrog/setup-sp`)
- **MultiColors**: Latest from srcdslab/sm-plugin-MultiColors (cloned by the CI workflow)

### Build Process
```bash
# SourceKnight handles dependency management and compilation
# No manual setup required - dependencies are automatically fetched
# The CI workflow clones dependencies and compiles with spcomp directly.
# To build locally, clone srcdslab/sm-plugin-MultiColors, copy its
# addons/sourcemod/scripting/include contents next to this plugin's
# scripting folder, then run spcomp on AdvancedAdminList.sp.
```

### File Structure
Expand Down Expand Up @@ -102,7 +104,7 @@ addons/sourcemod/
4. Test database connectivity if using SourceBans

### Code Validation
- Plugin compiles without warnings via SourceKnight
- Plugin compiles without warnings via the GitHub Actions CI workflow
- Follow SourcePawn memory management best practices
- Ensure proper error handling for database operations

Expand All @@ -122,7 +124,7 @@ addons/sourcemod/
## Common Issues & Solutions

### Build Issues
- Ensure all dependencies are properly declared in `sourceknight.yaml`
- Ensure all dependencies are properly declared in `.github/workflows/ci.yml`
- Check SourceMod version compatibility
- Verify include files are accessible

Expand Down Expand Up @@ -162,8 +164,7 @@ addons/sourcemod/

- **Main plugin** (`AdvancedAdminList.sp`): Core logic changes
- **Config file** (`advancedadminlist.cfg`): Group colors and display order
- **Build config** (`sourceknight.yaml`): Dependencies and build targets
- **CI/CD** (`.github/workflows/ci.yml`): Build and release automation
- **CI/CD** (`.github/workflows/ci.yml`): Dependencies, build targets, and release automation

## SourcePawn-Specific Guidelines

Expand Down
195 changes: 104 additions & 91 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,91 +1,104 @@
name: CI

on: [push, pull_request, workflow_dispatch]

jobs:
build:
name: "Build"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04]
include:
- os: ubuntu-24.04
steps:
- uses: actions/checkout@v7
- name: Build sourcemod plugin
uses: maxime1907/action-sourceknight@v1
with:
cmd: build

- name: Create package
run: |
mkdir -p /tmp/package
cp -R .sourceknight/package/* /tmp/package
cp -R addons/sourcemod/configs /tmp/package/common/addons/sourcemod/

- name: Upload build archive for test runners
uses: actions/upload-artifact@v7
with:
name: ${{ runner.os }}
path: /tmp/package

tag:
name: Tag
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main'

- uses: dev-drprasad/delete-tag-and-release@v1.1
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main'
with:
delete_release: true
tag_name: latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- uses: rickstaa/action-create-tag@v1
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main'
with:
tag: "latest"
github_token: ${{ secrets.GITHUB_TOKEN }}

release:
name: Release
if: startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main'
needs: [build, tag]
runs-on: ubuntu-latest
steps:
- name: Download artifacts
uses: actions/download-artifact@v8
with:
name: ${{ runner.os }}
path: artifacts

- name: Versioning
run: |
version="latest"
if [[ "${{ github.ref_type }}" == 'tag' ]]; then
version=`echo $GITHUB_REF | sed "s/refs\/tags\///"`;
fi
echo "RELEASE_VERSION=$version" >> $GITHUB_ENV

- name: Package
run: |
cd artifacts
ls -Rall
tar -czf ../${{ github.event.repository.name }}-${{ env.RELEASE_VERSION }}.tar.gz .
cd ..
ls -la *.tar.gz

- name: Release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: '*.tar.gz'
tag: ${{ env.RELEASE_VERSION }}
file_glob: true
overwrite: true
name: CI

on: [push, pull_request, workflow_dispatch]

jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

- name: Setup SourcePawn compiler
uses: rumblefrog/setup-sp@v1.3.1
with:
version: "1.12.x"
github-token: ${{ secrets.GITHUB_TOKEN }}

- name: Install dependencies
run: |
set -euo pipefail
mkdir -p addons/sourcemod/scripting/include deps
git clone --depth=1 https://github.com/srcdslab/sm-plugin-MultiColors.git deps/multicolors
cp -R deps/multicolors/addons/sourcemod/scripting/include/* addons/sourcemod/scripting/include/

- name: Build sourcemod plugin
working-directory: addons/sourcemod/scripting
run: |
set -euo pipefail
mkdir -p ../plugins
spcomp -i include -o ../plugins/AdvancedAdminList.smx AdvancedAdminList.sp

- name: Create package
run: |
set -euo pipefail
mkdir -p /tmp/package/addons/sourcemod/plugins
cp addons/sourcemod/plugins/*.smx /tmp/package/addons/sourcemod/plugins/
cp -R addons/sourcemod/configs /tmp/package/addons/sourcemod/

- name: Upload build archive for test runners
uses: actions/upload-artifact@v7
with:
name: ${{ runner.os }}
path: /tmp/package

tag:
name: Tag
needs: build
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

- uses: dev-drprasad/delete-tag-and-release@v1.1
with:
delete_release: true
tag_name: latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- uses: rickstaa/action-create-tag@v1
with:
tag: latest
github_token: ${{ secrets.GITHUB_TOKEN }}

release:
name: Release
needs: [build, tag]
if: |
always() &&
needs.build.result == 'success' &&
(needs.tag.result == 'success' || needs.tag.result == 'skipped') &&
(startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main')
runs-on: ubuntu-latest
steps:
- name: Download artifacts
uses: actions/download-artifact@v8
with:
name: ${{ runner.os }}
path: artifacts

- name: Versioning
run: |
set -euo pipefail
version="latest"
if [[ "${{ github.ref_type }}" == "tag" ]]; then
version="${GITHUB_REF_NAME}"
fi
echo "RELEASE_VERSION=$version" >> "$GITHUB_ENV"

- name: Package
run: |
set -euo pipefail
cd artifacts
tar -czf "../${{ github.event.repository.name }}-${{ env.RELEASE_VERSION }}.tar.gz" .
cd ..

- name: Release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: "*.tar.gz"
tag: ${{ env.RELEASE_VERSION }}
file_glob: true
overwrite: true
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,4 @@ release/

*.smx
plugins/
.sourceknight
.venv
25 changes: 0 additions & 25 deletions sourceknight.yaml

This file was deleted.