name: Extension builder on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: strategy: matrix: os: [ubuntu-20.04, windows-2022] include: - os: ubuntu-20.04 cc: clang-10 cxx: clang++-10 - os: windows-2022 cc: msvc fail-fast: false name: ${{ matrix.os }} - ${{ matrix.cc }} runs-on: ${{ matrix.os }} env: PROJECT: 'connect' SDKS: 'css hl2dm dods tf2' MMSOURCE_VERSION: '1.12' SOURCEMOD_VERSION: '1.12' CACHE_PATH: ${{ github.workspace }}/cache steps: - name: Concatenate SDK Names shell: bash run: | # Paranoia SDKS_VAR="${{env.SDKS}}" # This will be used in our cache key echo "SDKS_KEY=${SDKS_VAR//[[:blank:]]/}" >> $GITHUB_ENV - name: 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.cc }} - uses: actions/setup-python@v5 name: Setup Python 3.9 with: python-version: 3.9 - name: Install Python dependencies run: | python -m pip install --upgrade pip setuptools wheel - uses: actions/checkout@v4 name: Repository checkout with: fetch-depth: 0 path: extension - uses: actions/cache@v4 name: Cache dependencies env: cache-name: connect-cache with: path: ${{ env.CACHE_PATH }} key: ${{ runner.os }}-build-${{ env.cache-name }}-sm${{ env.SOURCEMOD_VERSION }}-mmsource${{ env.MMSOURCE_VERSION }}-${{ env.SDKS_KEY }} - shell: bash name: Install dependencies run: | mkdir -p "${{ env.CACHE_PATH }}" cd "${{ env.CACHE_PATH }}" shallow_checkout () { # Param 1 is origin # Param 2 is branch # Param 3 is name if [ ! -d "$3" ]; then git clone "$1" --depth 1 --branch "$2" "$3" fi cd "$3" git submodule deinit --all --force git remote set-url origin "$1" git fetch --depth 1 origin "$2" git checkout --force --recurse-submodules FETCH_HEAD git submodule init git submodule update --depth 1 cd .. } # We are aware of what we are doing! git config --global advice.detachedHead false # Verify github cache, and see if we don't have the sdks already cloned and update them for sdk in ${{ env.SDKS }} do shallow_checkout "https://github.com/alliedmodders/hl2sdk" "${sdk}" "hl2sdk-${sdk}" done shallow_checkout "https://github.com/alliedmodders/ambuild" "master" "ambuild" shallow_checkout "https://github.com/alliedmodders/sourcemod" "${{env.SOURCEMOD_VERSION}}-dev" "sourcemod" shallow_checkout "https://github.com/alliedmodders/metamod-source/" "${{env.MMSOURCE_VERSION}}-dev" "metamod-source" # But maybe others aren't (also probably unnecessary because git actions but paranoia) git config --global advice.detachedHead true - name: Setup AMBuild shell: bash run: | cd "${{ env.CACHE_PATH }}" python -m pip install ./ambuild - name: Select clang compiler if: startsWith(runner.os, 'Linux') run: | echo "CC=${{ matrix.cc }}" >> $GITHUB_ENV echo "CXX=${{ matrix.cxx }}" >> $GITHUB_ENV ${{ matrix.cc }} --version ${{ matrix.cxx }} --version - name: Build shell: bash working-directory: extension run: | mkdir build cd build python ../configure.py --enable-auto-versioning --enable-optimize --sdks="${{ env.SDKS }}" --mms-path="${{ env.CACHE_PATH }}/metamod-source" --hl2sdk-root="${{ env.CACHE_PATH }}" --sm-path="${{ env.CACHE_PATH }}/sourcemod" ambuild PLATFORM="${{ runner.os }}" FILENAME="$(cat ./includes/filename_versioning.txt)" ZIP_FILENAME="${{ env.PROJECT }}-${FILENAME}-${PLATFORM,}.zip" echo "ZIP_FILENAME=${ZIP_FILENAME}" >> $GITHUB_ENV # if: github.event_name == 'push' && github.ref == 'refs/heads/action' && - name: Package release - Windows if: startsWith(matrix.os, 'windows-') working-directory: extension/build/package run: | Compress-Archive -Path * -Destination ${{ env.ZIP_FILENAME }} Copy-Item -Path ${{ env.ZIP_FILENAME }} -Destination ${{ matrix.os }}_${{ matrix.cc }}_${{ env.ZIP_FILENAME }} - name: Package release - Linux if: startsWith(matrix.os, 'ubuntu-') working-directory: extension/build/package run: | zip -r "${{ env.ZIP_FILENAME }}" . cp "${{ env.ZIP_FILENAME }}" "${{ matrix.os }}_${{ matrix.cc }}_${{ env.ZIP_FILENAME }}" - name: Upload release if: github.event_name == 'push' && github.ref == 'refs/heads/master' shell: bash working-directory: extension/build/package run: | echo "Begin upload..." AUTHORIZATION="$(echo -n '${{ secrets.USERNAME }}:${{ secrets.PASSWORD }}' | base64)" echo "::add-mask::${AUTHORIZATION}" HTTP_CODE=$(curl -XPOST -H "Authorization: Basic ${AUTHORIZATION}" -H "Content-Type: application/zip" --output /dev/null --silent --write-out "%{http_code}" --data-binary "@${{ env.ZIP_FILENAME }}" "https://builds.limetech.io/upload.php?project=${{ env.PROJECT }}&filename=${{ env.ZIP_FILENAME }}") if test ${HTTP_CODE} -ne 200; then exit ${HTTP_CODE} fi echo "Upload successful!" - name: Upload a Build Artifact uses: actions/upload-artifact@v4.6.1 with: # Artifact name name: ${{ matrix.os }}_${{ matrix.cc }}_${{ env.ZIP_FILENAME }} # optional, default is artifact # A file, directory or wildcard pattern that describes what to upload path: ${{ github.workspace }}/extension/build/package/${{ matrix.os }}_${{ matrix.cc }}_${{ env.ZIP_FILENAME }} # The desired behavior if no files are found using the provided path. if-no-files-found: error # Duration after which artifact will expire in days. 0 means using default retention. retention-days: 14