From 845c20ad9384084b358607ee1c29a7bac228db78 Mon Sep 17 00:00:00 2001 From: peace-maker Date: Sun, 9 May 2021 01:46:08 +0200 Subject: [PATCH] Start using Github Actions (#1488) * Start using Github Actions Build on windows and linux. Cannot build for macos, since the builders only support xcode 10+ which dropped x86 support. * Build sourcepawn tooling as separate package Upload build artifacts containing only spcomp and the includes. This adds a new `--scripting-only` flag to configure.py which skips everything and goes straight to building spcomp and packaging the include folder with it. * Only run the workflows for the master branch * Split common operations into PackageHelpers file Don't duplicate the code for packaging releases for the tooling-only packages. Instead use a common `PackageHelpers` class which provides the functionality common to both packages. This replaces the explicit list of files to package with a directory scan, so we don't have to list them all. The pgsql sql-init-scripts were missing from the release package before, so they were added here as well. Three scripts from the testsuite were missing from the explicit list (mapdisplayname, floats, findmap), so they're now included. * Fix Python 2 compatibility os.scandir is Python 3 only. --- .github/workflows/ci.yml | 96 +++++++ .github/workflows/scripting.yml | 78 +++++ AMBuildScript | 76 +++-- configure.py | 2 + core/logic/BaseWorker.cpp | 2 +- tools/buildbot/PackageHelpers | 73 +++++ tools/buildbot/PackageScript | 459 ++---------------------------- tools/buildbot/ToolsPackageScript | 11 + 8 files changed, 337 insertions(+), 460 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/scripting.yml create mode 100644 tools/buildbot/PackageHelpers create mode 100644 tools/buildbot/ToolsPackageScript diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..6333bdd3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,96 @@ +name: Continuous Integration +on: + push: + branches: + - master + pull_request: + branches: + - master +jobs: + test: + strategy: + matrix: + os: [ubuntu-18.04, ubuntu-latest, windows-latest] + include: + - os: windows-latest + os_short: win + compiler_cc: msvc + - os: ubuntu-latest + os_short: linux + compiler_cc: clang + compiler_cxx: clang++ + - os: ubuntu-18.04 + os_short: linux + compiler_cc: clang-3.9 + compiler_cxx: clang++-3.9 + fail-fast: false + runs-on: ${{ matrix.os }} + name: ${{ matrix.os_short }}-${{ matrix.compiler_cc }} + env: + SDKS: '["episode1","css","tf2","l4d2","csgo"]' + ARCH: x86,x86_64 + DEPENDENCIES_FOLDER: dependencies + DEPENDENCIES_ROOT: ${{ github.workspace }}/dependencies + MYSQL_VERSION: '5.5' + MMSOURCE_VERSION: '1.10' + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + path: sourcemod + + - name: Cache dependencies + uses: actions/cache@v2 + env: + cache-name: hl2sdk-mysql-mmsource + with: + path: ${{ env.DEPENDENCIES_ROOT }} + key: ${{ runner.os }}-build-${{ env.cache-name }}-mysql${{ env.MYSQL_VERSION }}-mmsource${{ env.MMSOURCE_VERSION }}-${{ join(fromJSON(env.SDKS), '') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}-mysql${{ env.MYSQL_VERSION }}-mmsource${{ env.MMSOURCE_VERSION }}- + ${{ runner.os }}-build-${{ env.cache-name }}-mysql${{ env.MYSQL_VERSION }}- + + # Setup Python for AMBuild + - uses: actions/setup-python@v2 + name: Setup Python 3.8 + with: + python-version: 3.8 + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip setuptools wheel + + - name: Install dependencies + shell: bash + run: | + mkdir -p ${{ env.DEPENDENCIES_FOLDER }} + cd ${{ env.DEPENDENCIES_FOLDER }} + + # Satisfy checkout-deps requirement for a "sourcemod" folder. + mkdir -p sourcemod + ../sourcemod/tools/checkout-deps.sh -s ${{ join(fromJSON(env.SDKS)) }} + + - name: Install Linux dependencies + if: startsWith(runner.os, 'Linux') + run: | + sudo dpkg --add-architecture i386 + sudo apt-get update + sudo apt-get install -y --no-install-recommends \ + gcc-multilib g++-multilib libstdc++6 lib32stdc++6 \ + libc6-dev libc6-dev-i386 linux-libc-dev \ + linux-libc-dev:i386 lib32z1-dev ${{ matrix.compiler_cc }} + + - name: Select clang compiler + if: startsWith(runner.os, 'Linux') + run: | + echo "CC=${{ matrix.compiler_cc }}" >> $GITHUB_ENV + echo "CXX=${{ matrix.compiler_cxx }}" >> $GITHUB_ENV + ${{ matrix.compiler_cc }} --version + ${{ matrix.compiler_cxx }} --version + + - name: Build + working-directory: sourcemod + run: | + mkdir build + cd build + python ../configure.py --enable-optimize --sdks=${{ join(fromJSON(env.SDKS)) }} --targets=${{ env.ARCH }} --mms-path=${{ env.DEPENDENCIES_ROOT }}/mmsource-${{ env.MMSOURCE_VERSION }} --hl2sdk-root=${{ env.DEPENDENCIES_ROOT }} --mysql-path=${{ env.DEPENDENCIES_ROOT }}/mysql-${{ env.MYSQL_VERSION }} --mysql64-path=${{ env.DEPENDENCIES_ROOT }}/mysql-${{ env.MYSQL_VERSION }}-x86_64 + ambuild diff --git a/.github/workflows/scripting.yml b/.github/workflows/scripting.yml new file mode 100644 index 00000000..dfe026cc --- /dev/null +++ b/.github/workflows/scripting.yml @@ -0,0 +1,78 @@ +name: SourcePawn scripting +on: + push: + branches: + - master + paths: + - 'plugins/include/*' + - 'sourcepawn/**' + workflow_dispatch: + schedule: + - cron: '53 05 01 */3 *' # Artifacts expire every 3 months +jobs: + build: + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + include: + - os: ubuntu-latest + os_short: linux + - os: windows-latest + os_short: win + - os: macos-latest + os_short: mac + fail-fast: false + runs-on: ${{ matrix.os }} + env: + ARCH: x86,x86_64 + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + # Setup Python for AMBuild + - uses: actions/setup-python@v2 + name: Setup Python 3.8 + with: + python-version: 3.8 + - name: Install AMBuild + run: | + python -m pip install --upgrade pip setuptools wheel + pip install git+https://github.com/alliedmodders/ambuild + + - name: Build only for x64 on macOS + if: startsWith(runner.os, 'macOS') + run: echo "ARCH=x86_64" >> $GITHUB_ENV + + - name: Install Linux dependencies + if: startsWith(runner.os, 'Linux') + run: | + sudo dpkg --add-architecture i386 + sudo apt-get update + sudo apt-get install -y --no-install-recommends \ + gcc-multilib g++-multilib libstdc++6 lib32stdc++6 \ + libc6-dev libc6-dev-i386 linux-libc-dev \ + linux-libc-dev:i386 lib32z1-dev ${{ matrix.compiler_cc }} + + - name: Select clang compiler + if: startsWith(runner.os, 'Linux') || startsWith(runner.os, 'macOS') + run: | + echo "CC=clang" >> $GITHUB_ENV + echo "CXX=clang++" >> $GITHUB_ENV + clang --version + clang++ --version + + - name: Build + shell: bash + run: | + mkdir build + cd build + python ../configure.py --enable-optimize --scripting-only --targets=${{ env.ARCH }} + ambuild + echo "SM_VERSION=$(cat ../product.version)" >> $GITHUB_ENV + + - name: Archive tooling + uses: actions/upload-artifact@v2 + with: + name: sourcemod-tooling-${{ env.SM_VERSION }}-${{ matrix.os_short }} + path: build/package diff --git a/AMBuildScript b/AMBuildScript index 2e1224bf..a05fe9e8 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -331,7 +331,7 @@ class SMConfig(object): cxx.cflags += ['-Wno-sometimes-uninitialized'] # Work around SDK warnings. - if cxx.version >= 'clang-10.0': + if cxx.version >= 'clang-10.0' or cxx.version >= 'apple-clang-12.0': cxx.cflags += [ '-Wno-implicit-int-float-conversion', '-Wno-tautological-overlap-compare', @@ -667,7 +667,8 @@ if getattr(builder, 'target', None) is not None: SM = SMConfig() SM.detectProductVersion() -SM.detectSDKs() +if not getattr(builder.options, 'scripting_only', False): + SM.detectSDKs() SM.configure() SM.add_libamtl() @@ -703,47 +704,60 @@ class SPRoot(object): def libamtl(self): return SM.libamtl +SP_build_parts = ['core'] +if getattr(builder.options, 'scripting_only', False): + SP_build_parts = ['spcomp'] + # Build SourcePawn externally. SP = builder.Build('sourcepawn/AMBuildScript', { 'external_root': SPRoot(), 'external_amtl': os.path.join(builder.sourcePath, 'public', 'amtl'), - 'external_build': ['core'], + 'external_build': SP_build_parts, }) if len(SP.spcomp) > 1: SM.spcomp = SP.spcomp['x86'] else: SM.spcomp = SP.spcomp[list(SP.spcomp.keys())[0]] SM.spcomp_bins = list(SP.spcomp.values()) -for cxx in SM.all_targets: - SM.spvm += [ - SP.libsourcepawn[cxx.target.arch] + +if not getattr(builder.options, 'scripting_only', False): + for cxx in SM.all_targets: + SM.spvm += [ + SP.libsourcepawn[cxx.target.arch] + ] + +if getattr(builder.options, 'scripting_only', False): + BuildScripts = [ + 'tools/buildbot/PackageHelpers', + 'tools/buildbot/ToolsPackageScript', + ] +else: + BuildScripts = [ + 'loader/AMBuilder', + 'core/AMBuilder', + 'core/logic/AMBuilder', + 'extensions/bintools/AMBuilder', + 'extensions/clientprefs/AMBuilder', + 'extensions/curl/AMBuilder', + 'extensions/cstrike/AMBuilder', + 'extensions/geoip/AMBuilder', + 'extensions/mysql/AMBuilder', + 'extensions/pgsql/AMBuilder', + 'extensions/regex/AMBuilder', + 'extensions/sdkhooks/AMBuilder', + 'extensions/sdktools/AMBuilder', + 'extensions/sqlite/AMBuilder', + 'extensions/tf2/AMBuilder', + 'extensions/topmenus/AMBuilder', + 'extensions/updater/AMBuilder', ] -BuildScripts = [ - 'loader/AMBuilder', - 'core/AMBuilder', - 'core/logic/AMBuilder', - 'extensions/bintools/AMBuilder', - 'extensions/clientprefs/AMBuilder', - 'extensions/curl/AMBuilder', - 'extensions/cstrike/AMBuilder', - 'extensions/geoip/AMBuilder', - 'extensions/mysql/AMBuilder', - 'extensions/pgsql/AMBuilder', - 'extensions/regex/AMBuilder', - 'extensions/sdkhooks/AMBuilder', - 'extensions/sdktools/AMBuilder', - 'extensions/sqlite/AMBuilder', - 'extensions/tf2/AMBuilder', - 'extensions/topmenus/AMBuilder', - 'extensions/updater/AMBuilder', -] - -if builder.backend == 'amb2': - BuildScripts += [ - 'plugins/AMBuilder', - 'tools/buildbot/PackageScript', - ] + if builder.backend == 'amb2': + BuildScripts += [ + 'plugins/AMBuilder', + 'tools/buildbot/PackageHelpers', + 'tools/buildbot/PackageScript', + ] builder.Build(BuildScripts, { 'SM': SM }) diff --git a/configure.py b/configure.py index 77fdf1f7..f864d939 100644 --- a/configure.py +++ b/configure.py @@ -42,4 +42,6 @@ parser.options.add_argument('--disable-auto-versioning', action='store_true', de default=False, help='Disable the auto versioning script') parser.options.add_argument('--targets', type=str, dest='targets', default=None, help="Override the target architecture (use commas to separate multiple targets).") +parser.options.add_argument('--scripting-only', action='store_true', dest='scripting_only', default=False, + help="Only build and package the files required for scripting in SourcePawn.") parser.Configure() diff --git a/core/logic/BaseWorker.cpp b/core/logic/BaseWorker.cpp index 019af377..342d4cc3 100644 --- a/core/logic/BaseWorker.cpp +++ b/core/logic/BaseWorker.cpp @@ -40,7 +40,7 @@ BaseWorker::BaseWorker(IThreadWorkerCallbacks *hooks) : BaseWorker::~BaseWorker() { - if (m_state != Worker_Stopped || m_state != Worker_Invalid) + if (m_state != Worker_Stopped && m_state != Worker_Invalid) Stop(true); if (m_ThreadQueue.size()) diff --git a/tools/buildbot/PackageHelpers b/tools/buildbot/PackageHelpers new file mode 100644 index 00000000..4a803242 --- /dev/null +++ b/tools/buildbot/PackageHelpers @@ -0,0 +1,73 @@ +# vim: set ts=8 sts=2 sw=2 tw=99 et ft=python: +import os + +class PackageHelpers: + def __init__(self, builder): + self.folder_map = {} + self.builder = builder + + def CreateFolders(self, folder_list): + # Create the distribution folder hierarchy. + self.folder_map = {} + for folder in folder_list: + norm_folder = os.path.normpath(folder) + self.folder_map[folder] = self.builder.AddFolder(norm_folder) + return self.folder_map + + def lipo(self, binaries, outFolder): + bins = [] + binPaths = [] + for b in binaries: + bins.append(b.binary) + binPaths.append(os.path.join(self.builder.buildPath, b.binary.path)) + argv = ['lipo', '-create'] + binary = os.path.basename(binPaths[0]) + outputPath = os.path.join(self.builder.buildPath, self.builder.buildFolder, outFolder, binary) + self.builder.AddCommand( + argv = argv + binPaths + ['-output', outputPath], + inputs = bins, + outputs = [os.path.join(outFolder, binary)], + ) + + def CopySpcomp(self, target_folder): + if self.builder.host.platform == 'mac' and len(SM.target_archs) > 1: + self.lipo(SM.spcomp_bins, target_folder) + else: + for bin_task in SM.spcomp_bins: + if bin_task.target.arch == 'x86_64': + root, ext = os.path.splitext(os.path.basename(bin_task.binary.path)) + file = root + '64' + ext + self.builder.AddCopy(bin_task.binary, os.path.join(target_folder, file)) + else: + self.builder.AddCopy(bin_task.binary, self.folder_map[target_folder]) + + if self.builder.host.platform == 'windows': + self.CopyFiles('tools/batchtool', target_folder, '.exe') + else: + self.CopyFiles('plugins', target_folder, '.sh') + + def CopyFiles(self, src, dest, filter_ext=None): + if not dest: + dest = src + dest_entry = self.folder_map[dest] + source_path = os.path.join(self.builder.sourcePath, src) + for entry in os.listdir(source_path): + entry_path = os.path.join(source_path, entry) + if not os.path.isfile(entry_path): + continue + if filter_ext: + _, ext = os.path.splitext(entry) + if filter_ext != ext: + continue + self.builder.AddCopy(entry_path, dest_entry) + + def CopyIncludes(self, target_folder): + if SM.use_auto_versioning(): + # Copy version_auto.inc. + for header in SM.generated_headers: + if 'version_auto.inc' in header.path: + self.builder.AddCopy(header, self.folder_map[target_folder]) + + self.CopyFiles('plugins/include', target_folder, '.inc') + +SM.package_helpers = PackageHelpers(builder) \ No newline at end of file diff --git a/tools/buildbot/PackageScript b/tools/buildbot/PackageScript index d55b4ab9..9d7eb389 100644 --- a/tools/buildbot/PackageScript +++ b/tools/buildbot/PackageScript @@ -21,6 +21,7 @@ folder_list = [ 'addons/sourcemod/data', 'addons/sourcemod/configs/sql-init-scripts', 'addons/sourcemod/configs/sql-init-scripts/mysql', + 'addons/sourcemod/configs/sql-init-scripts/pgsql', 'addons/sourcemod/configs/sql-init-scripts/sqlite', 'addons/sourcemod/scripting', 'addons/sourcemod/scripting/include', @@ -44,11 +45,9 @@ if 'x86_64' in SM.target_archs: 'addons/sourcemod/extensions/x64', ]) -# Create the distribution folder hierarchy. -folder_map = {} -for folder in folder_list: - norm_folder = os.path.normpath(folder) - folder_map[folder] = builder.AddFolder(norm_folder) +helpers = SM.package_helpers +helpers.builder = builder +folder_map = helpers.CreateFolders(folder_list) # Copy binaries. for cxx_task in SM.binaries: @@ -70,37 +69,7 @@ for cxx_task in SM.spvm: elif cxx_task.target.arch == 'x86_64': builder.AddCopy(cxx_task.binary, folder_map['addons/sourcemod/bin/x64']) -def lipo(binaries, outFolder): - bins = [] - binPaths = [] - for bin in binaries: - bins.append(bin.binary) - binPaths.append(os.path.join(builder.buildPath, bin.binary.path)) - argv = ['lipo', '-create'] - binary = os.path.basename(binPaths[0]) - outputPath = os.path.join(builder.buildPath, builder.buildFolder, outFolder, binary) - builder.AddCommand( - argv = argv + binPaths + ['-output', outputPath], - inputs = bins, - outputs = [os.path.join(outFolder, binary)], - ) - -if builder.host.platform == 'mac' and len(SM.target_archs) > 1: - lipo(SM.spcomp_bins, 'addons/sourcemod/scripting') -else: - for bin_task in SM.spcomp_bins: - if bin_task.target.arch == 'x86_64': - root, ext = os.path.splitext(os.path.basename(bin_task.binary.path)) - file = root + '64' + ext - builder.AddCopy(bin_task.binary, os.path.normpath('addons/sourcemod/scripting/' + file)) - else: - builder.AddCopy(bin_task.binary, folder_map['addons/sourcemod/scripting']) - -if SM.use_auto_versioning(): - # Copy version_auto.inc. - for header in SM.generated_headers: - if 'version_auto.inc' in header.path: - builder.AddCopy(header, folder_map['addons/sourcemod/scripting/include']) +helpers.CopySpcomp('addons/sourcemod/scripting') # Export PDB files. We write to a file in the build folder which is pretty # verboten, but it's okay if it's in the root since AMBuild will never try @@ -129,396 +98,30 @@ for smx_file in SM.smx_files: builder.AddCopy(smx_entry, folder_map['addons/sourcemod/plugins']) # Do all straight-up file copies from the source tree. -def CopyFiles(src, dest, files): - if not dest: - dest = src - dest_entry = folder_map[dest] - for source_file in files: - source_path = os.path.join(builder.sourcePath, src, source_file) - builder.AddCopy(source_path, dest_entry) +helpers.CopyIncludes('addons/sourcemod/scripting/include') -CopyFiles('configs', 'addons/sourcemod/configs', - [ 'admin_groups.cfg', - 'admin_levels.cfg', - 'admin_overrides.cfg', - 'adminmenu_cfgs.txt', - 'adminmenu_custom.txt', - 'adminmenu_grouping.txt', - 'adminmenu_sorting.txt', - 'admins.cfg', - 'admins_simple.ini', - 'banreasons.txt', - 'core.cfg', - 'databases.cfg', - 'languages.cfg', - 'maplists.cfg', - ] -) -CopyFiles('configs/geoip', 'addons/sourcemod/configs/geoip', ['GeoIP.dat']) -CopyFiles('configs/cfg', 'cfg/sourcemod', - [ 'sm_warmode_off.cfg', - 'sm_warmode_on.cfg', - 'sourcemod.cfg', - ] -) -CopyFiles('configs/metamod', 'addons/metamod', ['sourcemod.vdf']) -CopyFiles('configs/sql-init-scripts/mysql', 'addons/sourcemod/configs/sql-init-scripts/mysql', - [ 'clientprefs-mysql.sql', - 'create_admins.sql', - 'update_admins_r1409.sql', - ] -) -CopyFiles('configs/sql-init-scripts/sqlite', 'addons/sourcemod/configs/sql-init-scripts/sqlite', - [ 'admins-sqlite.sq3', - 'clientprefs-sqlite.sq3', - 'clientprefs-sqlite.sql', - 'create_admins.sql', - 'update_admins-r1409.sql', - ] -) -CopyFiles('gamedata', 'addons/sourcemod/gamedata', - [ 'funcommands.games.txt', - 'sm-tf2.games.txt', - ] -) -CopyFiles('gamedata/sdkhooks.games', 'addons/sourcemod/gamedata/sdkhooks.games', - [ 'common.games.txt', - 'engine.blade.txt', - 'engine.contagion.txt', - 'engine.csgo.txt', - 'engine.darkm.txt', - 'engine.ep2v.txt', - 'engine.insurgency.txt', - 'engine.l4d.txt', - 'game.ag2.txt', - 'game.alienswarm.txt', - 'game.aoc.txt', - 'game.bms.txt', - 'game.cspromod.txt', - 'game.cstrike.txt', - 'game.dinodday.txt', - 'game.doi.txt', - 'game.empires.txt', - 'game.ff.txt', - 'game.fof.txt', - 'game.gesource.txt', - 'game.hidden.txt', - 'game.hl2ctf.txt', - 'game.insurgency.txt', - 'game.kz.txt', - 'game.l4d2.txt', - 'game.modularcombat.txt', - 'game.neotokyo.txt', - 'game.nmrih.txt', - 'game.nucleardawn.txt', - 'game.pvkii.txt', - 'game.reactivedrop.txt', - 'game.sgtls.txt', - 'game.sourceforts.txt', - 'game.synergy.txt', - 'game.zm.txt', - 'game.zpanic.txt', - 'master.games.txt', - ] -) -CopyFiles('gamedata/sdktools.games', 'addons/sourcemod/gamedata/sdktools.games', - [ 'common.games.txt', - 'engine.bgt.txt', - 'engine.blade.txt', - 'engine.contagion.txt', - 'engine.csgo.txt', - 'engine.css.txt', - 'engine.darkm.txt', - 'engine.ep1.txt', - 'engine.ep2.txt', - 'engine.ep2valve.txt', - 'engine.eye.txt', - 'engine.insurgency.txt', - 'engine.l4d.txt', - 'engine.l4d2.txt', - 'engine.sdk2013.txt', - 'engine.swarm.txt', - 'game.ag2.txt', - 'game.alienswarm.txt', - 'game.aoc.txt', - 'game.bg2.txt', - 'game.bms.txt', - 'game.cspromod.txt', - 'game.cstrike.txt', - 'game.dinodday.txt', - 'game.dod.txt', - 'game.doi.txt', - 'game.dystopia.txt', - 'game.empires.txt', - 'game.esmod.txt', - 'game.fas.txt', - 'game.ff.txt', - 'game.fof.txt', - 'game.gesource.txt', - 'game.hidden.txt', - 'game.hl2ctf.txt', - 'game.hl2mp.txt', - 'game.insurgency.txt', - 'game.ios.txt', - 'game.kz.txt', - 'game.left4dead2.txt', - 'game.modularcombat.txt', - 'game.neotokyo.txt', - 'game.nmrih.txt', - 'game.nucleardawn.txt', - 'game.obsidian.txt', - 'game.pvkii.txt', - 'game.reactivedrop.txt', - 'game.rnlbeta.txt', - 'game.ship.txt', - 'game.sourceforts.txt', - 'game.synergy.txt', - 'game.tf.txt', - 'game.zm.txt', - 'game.zpanic.txt', - 'master.games.txt', - ] -) -CopyFiles('gamedata/core.games', 'addons/sourcemod/gamedata/core.games', - [ 'blocklist.plugins.txt', - 'common.games.txt', - 'engine.bgt.txt', - 'engine.blade.txt', - 'engine.bms.txt', - 'engine.contagion.txt', - 'engine.csgo.txt', - 'engine.css.txt', - 'engine.darkm.txt', - 'engine.ep1.txt', - 'engine.ep2.txt', - 'engine.ep2valve.txt', - 'engine.eye.txt', - 'engine.insurgency.txt', - 'engine.l4d.txt', - 'engine.l4d2.txt', - 'engine.sdk2013.txt', - 'engine.swarm.txt', - 'game.dinodday.txt', - 'master.games.txt', - ] -) -CopyFiles('gamedata/sm-cstrike.games', 'addons/sourcemod/gamedata/sm-cstrike.games', - [ 'game.csgo.txt', - 'game.css.txt', - 'master.games.txt', - ] -) -CopyFiles('plugins', 'addons/sourcemod/scripting', - [ 'admin-sql-prefetch.sp', - 'admin-sql-threaded.sp', - 'adminhelp.sp', - 'adminmenu.sp', - 'antiflood.sp', - 'basebans.sp', - 'basechat.sp', - 'basecomm.sp', - 'basecommands.sp', - 'basetriggers.sp', - 'basevotes.sp', - 'clientprefs.sp', - 'funcommands.sp', - 'funvotes.sp', - 'mapchooser.sp', - 'nextmap.sp', - 'nominations.sp', - 'playercommands.sp', - 'randomcycle.sp', - 'reservedslots.sp', - 'rockthevote.sp', - 'sounds.sp', - 'sql-admin-manager.sp', - ] -) -CopyFiles('plugins/include', 'addons/sourcemod/scripting/include', - [ 'admin.inc', - 'adminmenu.inc', - 'adt.inc', - 'adt_array.inc', - 'adt_stack.inc', - 'adt_trie.inc', - 'banning.inc', - 'basecomm.inc', - 'bitbuffer.inc', - 'clientprefs.inc', - 'clients.inc', - 'commandfilters.inc', - 'commandline.inc', - 'console.inc', - 'convars.inc', - 'core.inc', - 'cstrike.inc', - 'datapack.inc', - 'dbi.inc', - 'entity.inc', - 'entity_prop_stocks.inc', - 'events.inc', - 'files.inc', - 'float.inc', - 'functions.inc', - 'geoip.inc', - 'halflife.inc', - 'handles.inc', - 'helpers.inc', - 'keyvalues.inc', - 'lang.inc', - 'logging.inc', - 'mapchooser.inc', - 'menus.inc', - 'nextmap.inc', - 'profiler.inc', - 'protobuf.inc', - 'regex.inc', - 'sdkhooks.inc', - 'sdktools.inc', - 'sdktools_client.inc', - 'sdktools_engine.inc', - 'sdktools_variant_t.inc', - 'sdktools_entinput.inc', - 'sdktools_entoutput.inc', - 'sdktools_functions.inc', - 'sdktools_gamerules.inc', - 'sdktools_hooks.inc', - 'sdktools_sound.inc', - 'sdktools_stocks.inc', - 'sdktools_stringtables.inc', - 'sdktools_tempents.inc', - 'sdktools_tempents_stocks.inc', - 'sdktools_trace.inc', - 'sdktools_voice.inc', - 'sorting.inc', - 'sourcemod.inc', - 'string.inc', - 'testing.inc', - 'textparse.inc', - 'tf2.inc', - 'tf2_stocks.inc', - 'timers.inc', - 'topmenus.inc', - 'usermessages.inc', - 'vector.inc', - 'version.inc', - ] -) -CopyFiles('translations', 'addons/sourcemod/translations', - [ 'adminhelp.phrases.txt', - 'adminmenu.phrases.txt', - 'antiflood.phrases.txt', - 'basebans.phrases.txt', - 'basecomm.phrases.txt', - 'basetriggers.phrases.txt', - 'basevotes.phrases.txt', - 'clientprefs.phrases.txt', - 'common.phrases.txt', - 'core.phrases.txt', - 'funcommands.phrases.txt', - 'funvotes.phrases.txt', - 'mapchooser.phrases.txt', - 'nextmap.phrases.txt', - 'nominations.phrases.txt', - 'playercommands.phrases.txt', - 'plugin.basecommands.txt', - 'reservedslots.phrases.txt', - 'rockthevote.phrases.txt', - 'sounds.phrases.txt', - 'sqladmins.phrases.txt', - ] -) -CopyFiles('licenses', 'addons/sourcemod', - [ 'GPLv2.txt', - 'GPLv3.txt', - 'LICENSE.txt' - ] -) -CopyFiles('plugins/admin-flatfile', 'addons/sourcemod/scripting/admin-flatfile', - [ 'admin-flatfile.sp', - 'admin-groups.sp', - 'admin-overrides.sp', - 'admin-simple.sp', - 'admin-users.sp', - ] -) -CopyFiles('plugins/adminmenu', 'addons/sourcemod/scripting/adminmenu', ['dynamicmenu.sp']) -CopyFiles('plugins/testsuite', 'addons/sourcemod/scripting/testsuite', - [ 'benchmark.sp', - 'bug4059.sp', - 'callfunctest.sp', - 'capstest.sp', - 'clientprefstest.sp', - 'cstrike-test.sp', - 'entpropelements.sp', - 'fakenative1.sp', - 'fakenative2.sp', - 'filetest.sp', - 'fwdtest1.sp', - 'fwdtest2.sp', - 'gamerules-props.sp', - 'goto_test.sp', - 'outputtest.sp', - 'ptstest.sp', - 'sorttest.sp', - 'sqltest.sp', - 'sqltest.sql', - 'stacktest.sp', - 'structtest.sp', - 'tf2-test.sp', - 'tries.sp', - 'keyvalues.sp', - ] -) -CopyFiles('plugins/basecommands', 'addons/sourcemod/scripting/basecommands', - [ 'cancelvote.sp', - 'execcfg.sp', - 'kick.sp', - 'map.sp', - 'reloadadmins.sp', - 'who.sp', - ] -) -CopyFiles('plugins/basecomm', 'addons/sourcemod/scripting/basecomm', - [ 'forwards.sp', - 'gag.sp', - 'natives.sp', - ] -) -CopyFiles('plugins/funvotes', 'addons/sourcemod/scripting/funvotes', - [ 'votealltalk.sp', - 'voteburn.sp', - 'voteff.sp', - 'votegravity.sp', - 'voteslay.sp', - ] -) -CopyFiles('plugins/basevotes', 'addons/sourcemod/scripting/basevotes', - [ 'voteban.sp', - 'votekick.sp', - 'votemap.sp', - ] -) -CopyFiles('plugins/basebans', 'addons/sourcemod/scripting/basebans', ['ban.sp']) -CopyFiles('plugins/funcommands', 'addons/sourcemod/scripting/funcommands', - [ 'beacon.sp', - 'blind.sp', - 'drug.sp', - 'fire.sp', - 'gravity.sp', - 'ice.sp', - 'noclip.sp', - 'timebomb.sp', - ] -) -CopyFiles('plugins/playercommands', 'addons/sourcemod/scripting/playercommands', - [ 'rename.sp', - 'slap.sp', - 'slay.sp', - ] -) - -if builder.host.platform == 'windows': - CopyFiles('tools/batchtool', 'addons/sourcemod/scripting', ['compile.exe']) -else: - CopyFiles('plugins', 'addons/sourcemod/scripting', ['compile.sh']) +helpers.CopyFiles('configs', 'addons/sourcemod/configs') +helpers.CopyFiles('configs/geoip', 'addons/sourcemod/configs/geoip') +helpers.CopyFiles('configs/cfg', 'cfg/sourcemod') +helpers.CopyFiles('configs/metamod', 'addons/metamod') +helpers.CopyFiles('configs/sql-init-scripts/mysql', 'addons/sourcemod/configs/sql-init-scripts/mysql') +helpers.CopyFiles('configs/sql-init-scripts/pgsql', 'addons/sourcemod/configs/sql-init-scripts/pgsql') +helpers.CopyFiles('configs/sql-init-scripts/sqlite', 'addons/sourcemod/configs/sql-init-scripts/sqlite') +helpers.CopyFiles('gamedata', 'addons/sourcemod/gamedata') +helpers.CopyFiles('gamedata/sdkhooks.games', 'addons/sourcemod/gamedata/sdkhooks.games') +helpers.CopyFiles('gamedata/sdktools.games', 'addons/sourcemod/gamedata/sdktools.games') +helpers.CopyFiles('gamedata/core.games', 'addons/sourcemod/gamedata/core.games') +helpers.CopyFiles('gamedata/sm-cstrike.games', 'addons/sourcemod/gamedata/sm-cstrike.games') +helpers.CopyFiles('plugins', 'addons/sourcemod/scripting', '.sp') +helpers.CopyFiles('translations', 'addons/sourcemod/translations') +helpers.CopyFiles('licenses', 'addons/sourcemod') +helpers.CopyFiles('plugins/admin-flatfile', 'addons/sourcemod/scripting/admin-flatfile') +helpers.CopyFiles('plugins/adminmenu', 'addons/sourcemod/scripting/adminmenu') +helpers.CopyFiles('plugins/testsuite', 'addons/sourcemod/scripting/testsuite') +helpers.CopyFiles('plugins/basecommands', 'addons/sourcemod/scripting/basecommands') +helpers.CopyFiles('plugins/basecomm', 'addons/sourcemod/scripting/basecomm') +helpers.CopyFiles('plugins/funvotes', 'addons/sourcemod/scripting/funvotes') +helpers.CopyFiles('plugins/basevotes', 'addons/sourcemod/scripting/basevotes') +helpers.CopyFiles('plugins/basebans', 'addons/sourcemod/scripting/basebans') +helpers.CopyFiles('plugins/funcommands', 'addons/sourcemod/scripting/funcommands') +helpers.CopyFiles('plugins/playercommands', 'addons/sourcemod/scripting/playercommands') diff --git a/tools/buildbot/ToolsPackageScript b/tools/buildbot/ToolsPackageScript new file mode 100644 index 00000000..1bddca23 --- /dev/null +++ b/tools/buildbot/ToolsPackageScript @@ -0,0 +1,11 @@ +# vim: set ts=8 sts=2 sw=2 tw=99 et ft=python: + +builder.SetBuildFolder('package') + +helpers = SM.package_helpers +helpers.builder = builder +helpers.CreateFolders(['.', 'include']) + +helpers.CopySpcomp('.') +helpers.CopyIncludes('include') +helpers.CopyFiles('licenses', '.')