User:Digiku/Cross-platform deployment

From SRB2 Wiki
Jump to: navigation, search
An installation package generated for MacOS by Deployer.

You can easily deploy your SRB2 builds to OS X and Linux by using Travis-CI. SRB2's codebase includes a Deployer utility script to upload Travis-CI builds to FTP or Launchpad PPA. This occurs automatically and you do not need to have the host OS installed to take advantage of this system.

AppVeyor will also build 32-bit and 64-bit Windows installers with a limited configuration; see #Windows Deployment with AppVeyor.

How to Use

Location of Travis-CI repo settings.

To use this system, set up Travis-CI for your SRB2 fork on GitHub. Then, set the below parameters as Environment Variables in your Travis-CI repo settings.

Environment variables are encrypted and stored securely, and they are not printed on the log. You may use them to store passwords.

Pull request builds do not have access to these parameters, and so Deployer will only operate on commit builds.

Note that if Deployer is enabled for a Travis job, that job will only generate installation packages, not test builds. If you want to do standard build testing, do not enable Deployer for that job.

You must push the code to any branch name containing deployer. Otherwise, Deployer skips the build.

Best Practices

Global Environment Variables

Here are the recommended parameters to set. Do this in your Travis-CI settings:

  • DPL_ENABLED=1 - Must be set for Deployer to run.
  • DPL_TAG_ENABLED=1 - Trigger Deployer when any release tag is pushed. The release tag does not have to be on a deployer-named branch.
  • DPL_TERMINATE_TESTS=1 - Terminate non-Deployer jobs in any deployer-named branch. This does not affect jobs outside of these branches.

You may also toggle these two parameters, as necessary:

  • DPL_TERMINATE_ASSETS=1 - Terminate asset package builds; Linux only.
  • DPL_TERMINATE_MAIN=1 - Terminate main package builds.

You can set this parameter either per-job or globally:

  • ASSET_FILES_OPTIONAL_GET=1 - Download and package the optional assets; this would typically be music.dta. This is forced on when building a release tag.

Next, you need to supply signing keys for Linux install packages. You can do this either in your Travis-CI settings or per-job in .travis.yml:

  • DPL_PGP_KEY_PRIVATE=RWdnbWFuJ3Mgc28gZmF0IQ== - Base64-encoded PGP private key file, required to sign Debian packages.
  • DPL_PGP_KEY_PASSPHRASE=passphrase - Passphrase to decode the PGP key file.
  • DPL_SSH_KEY_PRIVATE=RWdnbWFuJ3Mgc28gZmF0IQ== - Base64-encoded SSH private key file, required to sign DPUT package uploads.
  • DPL_SSH_KEY_PASSPHRASE=passphrase - Passphrase to decode the SSH key file.

Optional

You may wish to restrict deployment to certain jobs and commits. Do this in your Travis-CI settings:

  • DPL_JOBNAMES=name1,name2 - Whitelist for specific job names, or unset to operate on all job names.
  • DPL_OSNAMES=osx,linux - Whitelist for specific OSes, or unset to operate on all OSes.
  • DPL_TRIGGER=Deployer - String to search for in a commit message to trigger Deployer.
    • The commit message needs to have this word in brackets, e.g., [Deployer] or [Deployer-jobname] or [Deployer-osname]
    • This setting has no effect when building a release tag.
  • DPL_BRANCHES=branch1,branch2 - Whitelist for specific branch names, or unset to operate on all branches containing deployer.
    • NOTE that even with this parameter, your branches must still have the word deployer in the name!
    • This setting has no effect when building a release tag.

Note that even if you use these settings, all jobs will spin up before the filters are checked. Any non-matching jobs will terminate when the check is reached: after installing build dependencies and before the build itself. This takes about 1 minute for each job.

Job-Specific Environment Variables

Finally, you need to have a couple of the #Job-Specific Parameters specified per-job in your .travis.yml. These may be:

  • _DPL_JOB_ENABLED=1 - Enable a specific job for Deployment.
  • _DPL_JOB_NAME=osxDeployer - A name identifier for the job, used for trigger filtering and upload identification. Do not use spaces or illegal filename characters.

Finally, depending on the OS, you need to set the #Deployment Target Parameters and #Build Target Parameters. These will most likely be set per job in .travis.yml, but they can also be set in your Environment Variables.

Linux

  • _DPL_DPUT_TARGET=1 - Upload the package to a Debian package repository. See #DPUT Parameters for configuration.
  • _DPL_PACKAGE_SOURCE=1 - Build packages as source code distributions. Required by Launchpad.
  • _DPL_PACKAGE_MAIN=1 - Build the main binary installation package for SRB2. Enabled by default.
  • _DPL_PACKAGE_ASSET=1 - Build the asset installation package for SRB2. Optional.

OS X

  • _DPL_FTP_TARGET=1 - Upload the package to an FTP server. See #FTP Parameters for configuration.
  • _DPL_PACKAGE_BINARY=1 - Build a binary installation DMG package for SRB2. Includes assets.

Signing Keys for Linux Packages

To distribute Linux install packages, you need to generate two signing keys: a PGP key, and an SSH key. The PGP key is used to sign the package file, while the SSH key is used to authenticate your upload to Launchpad.

WIP: This information may not be completely accurate.

Generate PGP Key

You may generate a PGP key with the following:

You need to supply a name and email address to associate with the key. This must match the value of PACKAGE_NAME_EMAIL for the package you wish to sign.

Next, you need to supply a passphrase to encrypt the key. To avoid invalid characters when importing into Deployer, use only alphanumeric characters (A-Za-z0-9). Do not lose the passphrase or you will be unable to decrypt the key.

You will end up with a private key file and a public key file. Save both of them. Additionally, you need to make a note of the key's fingerprint (a long hexadecimal string), because you will need it to import to Launchpad.

Generate SSH Key

You may generate an SSH key with the following:

  • Windows: ssh-keygen in Git Bash
  • macOS: ssh-keygen in Terminal
  • Linux: ssh-keygen in Terminal

Follow the instructions at this link.

You will be asked to supply a label for the key. This can be anything you want to identify this key.

Next, you need to supply a passphrase to encrypt the key. To avoid invalid characters when importing into Deployer, use only alphanumeric characters (A-Za-z0-9). Do not lose the passphrase or you will be unable to decrypt the key.

You will end up with a private key file (id_rsa) and a public key file (id_rsa.pub). Save both of them.

Base64-encode the key files

The private PGP key file and the SSH key file both need to be encoded in base64 to input into Deployer. Use these commands to encode the file (taken from here):

  • Windows: certutil -encode [KEYFILE.ASC] tmp.b64 && findstr /v /c:- tmp.b64 > [KEYFILE.BASE64.TXT] && del tmp.b64
  • macOS: base64 -i [KEYFILE.ASC] -o [KEYFILE.BASE64.TXT]
  • Linux: base64 [KEYFILE.ASC] > [KEYFILE.BASE64.TXT]

After encoding both keys in base64, you need to edit the TXT files and remove the line breaks so that the entire file is one long string.

Import the key files into Deployer

Deployer accepts the PGP and SSH private keys along with their passphrases. Use the following parameters:

  • DPL_PGP_KEY_PRIVATE=RWdnbWFuJ3Mgc28gZmF0IQ== - Base64-encoded PGP private key file
  • DPL_PGP_KEY_PASSPHRASE=passphrase - Passphrase to decode the PGP key file.
  • DPL_SSH_KEY_PRIVATE=RWdnbWFuJ3Mgc28gZmF0IQ== - Base64-encoded SSH private key file
  • DPL_SSH_KEY_PASSPHRASE=passphrase - Passphrase to decode the SSH key file.

Import the key files into Launchpad

If you are using Launchpad PPA, you need to import the PGP and SSH public key files there.

Import the PGP public key

First, you need to publish the PGP public key to a keyserver:

  1. Go to http://keyserver.ubuntu.com
  2. Open the PGP public key file in Notepad.
  3. Copy-paste the public key text into the "Submit a key" textbox, then click "Submit this key"

Now, import the PGP public key into the Launchpad website:

  1. Go to https://launchpad.net/~/+editpgpkeys
  2. Copy your PGP public key fingerprint (a long hexadecimal string) into the entry box, then click "Import key"
  3. You will be asked to complete an Email challenge which involves an encrypted message. Decrypt the message with your key by using this software:

Import the SSH public key

Finally, import the SSH public key:

  1. Go to https://launchpad.net/~/+editsshkeys
  2. Open the SSH public key file in Notepad.
  3. Copy-paste the public key text into the entry box, then click "Import Public Key". You may need to add an identifying comment to the end of the string if there is not already one -- this can be anything you want, like email@example.com

More instructions

For more instructions, see these links:

Core Parameters

These determine global operation for Deployer.

Parameter Description
DPL_ENABLED=1 Must be set for any Deployer actions to occur.
DPL_TAG_ENABLED=1 Set to trigger Deployer on all release tags. The release tag does not need to be on a deployer-named branch.
DPL_JOB_ENABLE_ALL=1 Set to allow Deployer on all jobs, barring other filters such as trigger words and whitelists. If unset, only jobs with the _DPL_JOB_ENABLED environment variable will be allowed.
DPL_TERMINATE_TESTS=1 Set to skip non-deploying jobs, such as test builds. This only affects jobs within branch names containing the word deployer. Other branches are not affected.

When building a release tag and DPL_TAG_ENABLED is set, this setting is ignored.

DPL_TERMINATE_ASSETS=1 Terminate asset package builds; Linux only.
DPL_TERMINATE_MAIN=1 Terminate main package builds.
DPL_TRIGGER=word Trigger word to allow Deployer only on specified commits. The commit message must have -- in square brackets -- [word], [word-jobname], or [word-osname] to activate Deployer. If unset, all commits are allowed. Do not include the square brackets in the parameter setting. The match is case-sensitive.

The latter two patterns can filter the jobs by job name (_DPL_JOB_NAME set for the specific job) or OS name (osx or linux).

Note that DPL_JOB_ENABLE_ALL or _DPL_JOB_ENABLED must be set for a triggered job to run.

When building a release tag and DPL_TAG_ENABLED is set, this setting is ignored.

NOTE: You cannot trigger a deployment by a custom build on Travis! The custom message does not overwrite the old commit message. You must push a fresh commit to the repository. See #8641.

DPL_JOBNAMES=job1,job2 Whitelist of job names to allow (_DPL_JOB_NAME). If unset, all job names are allowed.
DPL_OSNAMES=osx,linux Whitelist of OS names to allow. If unset, all OSes are allowed.
DPL_BRANCHES=branch1,branch2,... Whitelist of branches to allow. If unset, all branches are allowed.

Even with this setting, each branch name must have the word deployer, or Deployer skips the build.

When building a release tag and DPL_TAG_ENABLED is set, this setting is ignored.

Job-Specific Parameters

Set these parameters in .travis.yml for the specific job that you want to modify. For example:

- matrix
    include:
      - os: osx
        env:
        - _DPL_JOB_ENABLED=1
        - _DPL_FTP_TARGET=1
        - _DPL_PACKAGE_BINARY=1
      - os: linux
        env:
        - _DPL_JOB_ENABLED=1
        - _DPL_DPUT_TARGET=1
        - _DPL_PACKAGE_SOURCE=1

See this source file for an example (search for "osx").

Job Parameters

Parameter Description
_DPL_JOB_ENABLED=1 Allow Deployer for this job. This variable is not necessary if DPL_JOB_ALL=1, as all jobs would be enabled.
_DPL_JOB_NAME=Name Human-readable custom name for the Deployer job. Do not use spaces or illegal filename characters:
<>:"/\|?*

This is used for logging and trigger word matching, as well as naming the FTP folder destination.

If unset, this defaults to the job's OS name.

Deployment Target Parameters

You need to set either one of these for Deployer to be active.

Parameter Description
_DPL_FTP_TARGET=1 Upload result binaries and/or packages to FTP. See #FTP Parameters for configuration.
_DPL_DPUT_TARGET=1 Upload result packages to a Debian package repository using DPUT. See #DPUT Parameters for configuration.

Build Target Parameters

For Linux, you will want to set these two pairs of parameters:

  • _DPL_PACKAGE_SOURCE=1 and/or _DPL_PACKAGE_BINARY=1 to build packages as Source or Binary distributions. You will likely just need to build a Source package.
  • _DPL_PACKAGE_MAIN=1 and/or _DPL_PACKAGE_ASSET=1 to build a Main and/or Asset package to be distributed as Source or Binary.

For OS X, you only need to set _DPL_PACKAGE_BINARY=1.

Parameter Description
_DPL_PACKAGE_SOURCE=1 Build a source package for Debian repositories. This is used by the repository provider and/or end user to build the program from source code included in the package.

Launchpad requires this for a successful upload.

For Linux, use _DPL_PACKAGE_MAIN=1 and _DPL_PACKAGE_ASSET=1 to toggle whether the main and/or data packages are built.

_DPL_PACKAGE_BINARY=1 Build an installable package. For Linux, this builds a Debian binary package; for OS X, a DMG image. The package will include libraries and assets as appropriate.

Launchpad will not accept binary packages for upload.

For Linux, use _DPL_PACKAGE_MAIN=1 and _DPL_PACKAGE_ASSET=1 to toggle whether the main and/or data packages are built.

_DPL_PACKAGE_MAIN=1 For Linux only: build the package for the main binary (srb2). This is set to 1 by default; set to 0 explicitly to skip.

Default: 1

_DPL_PACKAGE_ASSET=1 For Linux only: build the srb2-data asset package.
_DPL_BINARY=1 Build an executable binary only. This is equivalent to serving only srb2win.exe. Libraries and assets are not included.

Asset File Parameters

Files to download for packaging and to generate MD5 checks.

Parameter Description
ASSET_ARCHIVE_PATH=http://.../archive.7z Path to a single 7-zip archive of all asset files to include in the installer, sans music.dta.

Default: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-assets.7z

ASSET_ARCHIVE_OPTIONAL_PATH=http://.../archive.7z Path to a single 7-zip archive of optional files, downloaded if `ASSET_FILES_OPTIONAL_GET` is set. This would typically include just music.dta.

Default: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-optional-assets.7z

ASSET_FILES_HASHED=srb2.srb patch.dta ... List of filenames that must be MD5-checked by the game. Used by CMAKE to generate the MD5 hashes.

Default: srb2.srb zones.dta player.dta rings.dta patch.dta

ASSET_FILES_DOCS=README.txt LICENSE.txt ... List of documentation filenames that are packaged separately from the main asset files for OS X installers.

Default: README.txt LICENSE.txt LICENSE-3RD-PARTY.txt

ASSET_FILES_OPTIONAL_GET=1 Set to download optional filenames and package them.

If a release tag is pushed and DPL_TAG_ENABLED=1, this setting is forced on.

FTP Parameters

Parameters to upload builds to FTP. Note that this does not work for Linux! You need to use DPUT or HTTP POST instead! (POST not yet implemented.) More info at Travis-CI.

Builds are uploaded via FTP in a folder structure:

ftp://user:pass@example.com:21/path/to/upload/
    +-- author/ (e.g., STJr)
        +-- repo-name/ (e.g., SRB2)
            +-- branch-name/
                +-- [job id]-[job number]-[name] (e.g., 461111231-184.1-osx)
                    +-- commit.txt
                    +-- bin/
                    +-- package/
Parameter Description
DPL_FTP_PROTOCOL=ftp Protocol to use at the beginning of the FTP URI, e.g., ftp, sftp, ftpes.

Only tested with ftp; other protocols may need additional implementation.

Default: ftp

DPL_FTP_USER=username FTP username login. Never commit this to .travis.yml; always specify this in your Travis-CI settings.
DPL_FTP_PASS=password FTP password login. Never commit this to .travis.yml; always specify this in your Travis-CI settings.
DPL_FTP_HOSTNAME=example.com Domain name for the FTP URI.
DPL_FTP_PORT=21 Port number for the FTP URI.

Default: 21

DPL_FTP_PATH=path/to/upload Base path for uploads. Do not include the trailing slash. If this is not set, deployment will occur at the FTP root.

DPUT Parameters

Use the dput Debian package upload tool to publish to a remote repository.

This is tested only for Launchpad PPA; other repositories may need additional implementation. See Uploading a package to a PPA for specific requirements to Launchpad.

See #Package Signing Parameters for signing Debian packages. This is a required step and it uses a separate set of keys from signing repository uploads.

Name Description
DPL_DPUT_DOMAIN=ppa.launchpad.net Domain of the remote repository. Fills the fqdn field in ~/.dput.cf

Default: ppa.launchpad.net

DPL_DPUT_METHOD=sftp Protocol to use for publishing. Fills the method field in ~/.dput.cf

As FTP does not work for Linux in Travis-CI, this should not be set to ftp.

Default: sftp

DPL_DPUT_INCOMING=~user/ubuntu/ppaname/ Path to use for publishing. Fills the incoming field in ~/.dput.cf

This is provider-specific. For Launchpad, this takes the form ~<your_launchpad_id>/ubuntu/<ppa_name>/

DPL_DPUT_LOGIN=username Login string to use for publishing. Fills the login field in ~/.dput.cf

For Launchpad, if DPL_DPUT_METHOD=sftp, then this must be your username. Otherwise, if using ftp, this must be anonymous.

Default: anonymous

DPL_SSH_KEY_PRIVATE=RWdnbWFuJ3Mgc28gZmF0IQ== Base64-encoded SSH private key ASC file, required to sign repository uploads. Never commit this to .travis.yml; always specify this in your Travis-CI settings.
DPL_SSH_KEY_PASSPHRASE=passphrase Passphrase to decrypt the SSH private key. Never commit this to .travis.yml; always specify this in your Travis-CI settings.

Package Parameters

Used when possible for installation packages.

Main Package Parameters

Parameter Description
PACKAGE_NAME=srb2 Unique name for the package, for APT.

Default: srb2

PACKAGE_VERSION=2.1.21 Version identifier for the package.

Default: 2.1.21

PACKAGE_SUBVERSION=~14.04trusty Subversion identifier for the package. The version string takes the form 2.1.21~[subversion]-[revision].

Include the tilde ~ as the beginning character of this string. The subversion may be any alphanumeric sequence as long as it is sorted greater than any previous version.

Per Debian convention, the subversion may be used to note the distro version that this package is built for. For example, if you build SRB2 for multiple Ubuntu versions, a series of subversions may be ~18.10cosmic, ~18.04bionic, ~16.04xenial, ~14.04trusty, etc.

If this is not set, no subversion will be appended. It's recommended to have a subversion for binary packages, but it's not necessary for asset packages.

PACKAGE_REVISION=-12 Revision identifier for the package. The version string takes the form 2.1.21~[subversion]-[revision].

Include the hyphen - as the beginning character of this string. The revision may be any alphanumeric sequence as long as it is sorted greater than any previous version.

Per Debian convention, this is used as the build number for a package. Higher build numbers are considered newer while lower build numbers are considered older.

If this is not set, a revision identifier will be automatically generated based on the UTC datetime of the build.

Default: -201812160530 (example of build time)

PACKAGE_INSTALL_PATH=/usr/games/SRB2 System path to install the game files.

Default: /usr/games/SRB2

PACKAGE_LINK_PATH=/usr/games System path to install a symlink that points to the program binary. This should be set to a location in the user's PATH.

Default: /usr/games

PACKAGE_DISTRO=trusty Ubuntu-based version series to build the install package on.

It's recommended to also set PACKAGE_SUBVERSION to reflect this distro version, e.g., ~14.04trusty.

Default: trusty

PACKAGE_URGENCY=high Urgency to mark the package in APT.

Default: high

PACKAGE_NAME_EMAIL="John Doe <jdoe@example.com>" Name and email address string in the Debian package format. Wrap this in double quotes. This must match the signature string of the GPG key that you will use to sign the package.

Default: Sonic Team Junior <stjr@srb2.org>

PACKAGE_GROUP_NAME_EMAIL="Games Inc. <games@example.com>" Team and email address string in the Debian package format, for publication purposes. Wrap this in double quotes.

Default: Sonic Team Junior <stjr@srb2.org>

PACKAGE_WEBSITE=<http://www.srb2.org> Website enclosed in angle brackets, for publication purposes.

Default: <http://www.srb2.org>

Asset Package Parameters

Name Description
PACKAGE_ASSET_MINVERSION=2.1.21 Minimum compatible version for the srb2-data asset package.

Set this to the version number before the required version, because the program does a "greater-than" check instead of a "greater-or-equal-to".

Default: 2.1.21

PACKAGE_ASSET_MAXVERSION=2.1.23 Maximum compatible version for the srb2-data asset package.

Set this to the version number after the required version, because the program does a "less-than" check instead of a "lesser-or-equal-to".

Default: 2.1.23

Program Parameters

Name Description
PROGRAM_NAME=Sonic Robo Blast 2 Human-readable program name, for publication purposes.

Default: Sonic Robo Blast 2

PROGRAM_VERSION=2.1.21 Current program version, for publication purposes.

Default: 2.1.21

PROGRAM_DESCRIPTION=Lorem ipsum... A short one-line description, for publication purposes.

Default: A free 3D Sonic the Hedgehog fangame closely inspired by the original Sonic games on the Sega Genesis.

PROGRAM_FILENAME=srb2 Name of the executable file. Also the name of the PNG icon in the repo root to use for the Application Manager. ([srb2]icon.png)

Default: srb2

Package Signing Parameters

Debian packages must be signed before they are uploaded to Launchpad.

Name Description
DPL_PGP_KEY_PRIVATE=RWdnbWFuJ3Mgc28gZmF0IQ== Base64-encoded PGP private key ASC file, required to sign Debian packages. Never commit this to .travis.yml; always specify this in your Travis-CI settings.
DPL_PGP_KEY_PASSPHRASE=passphrase Passphrase to decrypt the PGP private key. Never commit this to .travis.yml; always specify this in your Travis-CI settings.

Windows Deployment with AppVeyor

AppVeyor will build full installers and patch ZIP files for Windows 32-bit and 64-bit.

As with Deployer on Travis, installer builds will trigger when DPL_ENABLED=1 and a branch name is pushed that contains the word deployer. A build will also trigger when a release tag is pushed and DPL_TAG_ENABLED=1.

The installer file can be downloaded under the build job's "Artifacts" page in AppVeyor. FTP deployment and other endpoints are not implemented.

Configuration

These determine global operation for Deployer on AppVeyor.

Parameter Description
DPL_ENABLED=1 Must be set for any Deployer actions to occur.
DPL_TAG_ENABLED=1 Set to trigger Deployer on all release tags. The release tag does not need to be on a deployer-named branch.
DPL_INSTALLER_NAME=SRB2-v2123 Filename prefix for the installer and patch ZIP.
ASSET_FILES_OPTIONAL_GET=1 Set to download optional filenames and package them.

If a release tag is pushed and DPL_TAG_ENABLED=1, this setting is forced on.

PACKAGE_PATCH_DLL_GET=1 Set to package DLLs into the patch ZIP, corresponding to the 32-bit or 64-bit target.
ASSET_CLEAN=1 Set to delete asset archives from the AppVeyor cache and force them to re-download.

You will want to do this if the archives have changed, or there was an error downloading at least one of the files.

Archive Sources

Deployer on AppVeyor grabs asset files from the following archives:

Parameter Description
ASSET_ARCHIVE_PATH=http://.../archive.7z Path to a 7-zip archive of game asset files and documentation files to be packaged in the full installer -- everything except the EXE and DLLs.

Default: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-assets.7z

ASSET_ARCHIVE_PATCH_PATH=http://.../archive.7z Path to a 7-zip archive of any files to be packaged in the patch ZIP, except the EXE and DLLs.

Default: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-patch-assets.7z

ASSET_ARCHIVE_X86_PATH=http://.../archive.7z Path to a 7-zip archive of 32-bit DLLs. The contents are packaged into the 32-bit installer as well as the patch if PACKAGE_PATCH_DLL_GET is set.

Default: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-x86-assets.7z

ASSET_ARCHIVE_X64_PATH=http://.../archive.7z Path to a 7-zip archive of 64-bit DLLs. The contents are packaged into the 64-bit installer as well as the patch if PACKAGE_PATCH_DLL_GET is set.

Default: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-x64-assets.7z

ASSET_ARCHIVE_OPTIONAL_PATH=http://.../archive.7z Path to a 7-zip archive of optional files for the full installer, downloaded if ASSET_FILES_OPTIONAL_GET is set. Typically, this archive would include just music.dta.

Default: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-optional-assets.7z