Remove windows cache #489
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: multi-arch build | |
on: | |
push: | |
branches: | |
- master | |
- develop | |
jobs: | |
build: | |
name: ${{ matrix.type }} on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
include: | |
- { os: ubuntu-22.04, type: "linux_amd64_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "amd64", tripleArch: "x86_64", tripleGnu: "gnu", debianVersion: "buster-backports", native: "true" } | |
- { os: ubuntu-22.04, type: "linux_amd64_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "amd64", tripleArch: "x86_64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "true" } | |
- { os: ubuntu-22.04, type: "linux_amd64_clang_ssl3", compiler: "clang", ssl: "ssl3", debianArch: "amd64", tripleArch: "x86_64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "true" } | |
#- { os: ubuntu-22.04, type: "linux_i386_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "i386", tripleArch: "i386", tripleGnu: "gnu", debianVersion: "buster-backports", native: "false" } | |
#- { os: ubuntu-22.04, type: "linux_i386_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "i386", tripleArch: "i386", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" } | |
- { os: ubuntu-22.04, type: "linux_ppc64el_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "ppc64el", tripleArch: "powerpc64le", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" } | |
- { os: ubuntu-22.04, type: "linux_riscv64_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "riscv64", tripleArch: "riscv64", tripleGnu: "gnu", debianVersion: "sid", native: "false" } | |
- { os: ubuntu-22.04, type: "linux_armhf_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "armhf", tripleArch: "arm", tripleGnu: "gnueabihf", debianVersion: "buster-backports", native: "false" } | |
- { os: ubuntu-22.04, type: "linux_armhf_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "armhf", tripleArch: "arm", tripleGnu: "gnueabihf", debianVersion: "bookworm-backports", native: "false" } | |
- { os: ubuntu-22.04, type: "linux_arm64_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "arm64", tripleArch: "aarch64", tripleGnu: "gnu", debianVersion: "buster-backports", native: "false" } | |
- { os: ubuntu-22.04, type: "linux_arm64_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "arm64", tripleArch: "aarch64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" } | |
- { os: ubuntu-22.04, type: "linux_arm64_clang_ssl3", compiler: "clang", ssl: "ssl3", debianArch: "arm64", tripleArch: "aarch64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" } | |
- { os: windows-2019, type: "windows_amd64", vcpkgCommitId: "6ca56aeb457f033d344a7106cb3f9f1abf8f4e98", triplet: "x64-windows-static" } | |
- { os: macos-12, type: "macos_amd64" } | |
# todo: do not enable until github actions adds support to apple silicon, accepting PRs | |
# - { os: macos-12, type: "macos_arm64" } | |
steps: | |
- name: Checkout current repo | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
- name: Get version | |
shell: bash | |
run: | | |
set -xeo pipefail | |
# Get latest commit short hash | |
HASH_VERSION=$(git rev-parse --short HEAD) | |
# Strip git ref prefix from version | |
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') | |
# Strip "v" prefix from tag name | |
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') | |
# Use Docker `latest` tag convention | |
[ "$VERSION" == "master" ] && VERSION=latest | |
HASH_VERSION=$(echo "$HASH_VERSION" | awk '{print tolower($0)}') | |
VERSION=$(echo "$VERSION" | awk '{print tolower($0)}') | |
TYPE=${{ matrix.type }} | |
SAFE_TYPE=${TYPE///} # linux_amd64_ -> linux_amd64_ | |
COMPILER=${{ matrix.compiler }} | |
SSL=${{ matrix.ssl }} | |
DEBIAN_ARCH=${{ matrix.debianArch }} | |
TRIPLE_ARCH=${{ matrix.tripleArch }} | |
TRIPLE_GNU=${{ matrix.tripleGnu }} | |
NATIVE=${{ matrix.native }} | |
DEBIAN_VERSION=${{ matrix.debianVersion }} | |
REVISION=4.0.${{ github.run_number }} | |
GH_MATRIX_OS=${{ matrix.os }} | |
GH_MATRIX_TYPE=${{ matrix.type }} | |
# Store variable for future use | |
echo "HASH_VERSION=$HASH_VERSION" >> $GITHUB_ENV | |
echo "VERSION=$VERSION" >> $GITHUB_ENV | |
echo "TYPE=$TYPE" >> $GITHUB_ENV | |
echo "SAFE_TYPE=$SAFE_TYPE" >> $GITHUB_ENV | |
echo "COMPILER=$COMPILER" >> $GITHUB_ENV | |
echo "SSL=$SSL" >> $GITHUB_ENV | |
echo "DEBIAN_ARCH=$DEBIAN_ARCH" >> $GITHUB_ENV | |
echo "TRIPLE_ARCH=$TRIPLE_ARCH" >> $GITHUB_ENV | |
echo "TRIPLE_GNU=$TRIPLE_GNU" >> $GITHUB_ENV | |
echo "NATIVE=$NATIVE" >> $GITHUB_ENV | |
echo "DEBIAN_VERSION=$DEBIAN_VERSION" >> $GITHUB_ENV | |
echo "REVISION=$REVISION" >> $GITHUB_ENV | |
echo "GH_MATRIX_OS=$GH_MATRIX_OS" >> $GITHUB_ENV | |
echo "GH_MATRIX_TYPE=$GH_MATRIX_TYPE" >> $GITHUB_ENV | |
# Print debug info | |
echo "hash version: $HASH_VERSION" | |
echo "version: $VERSION" | |
echo "safe arch: $SAFE_ARCH" | |
echo "ssl: $SSL" | |
echo "debian arch: $DEBIAN_ARCH" | |
echo "triple arch: $TRIPLE_ARCH" | |
echo "triple gnu: $TRIPLE_GNU" | |
echo "Variables:" | |
# Save env to file | |
cat $GITHUB_ENV > github.env | |
- name: Setup Java (Snapshot) | |
if: github.ref == 'refs/heads/develop' | |
uses: actions/setup-java@v3 | |
with: | |
java-version: 11 | |
distribution: temurin | |
server-id: mchv-snapshot-distribution | |
server-username: MAVEN_USERNAME | |
server-password: MAVEN_PASSWORD | |
cache: 'maven' | |
- name: Setup Java (Release) | |
if: github.ref != 'refs/heads/develop' | |
uses: actions/setup-java@v3 | |
with: | |
java-version: 11 | |
distribution: temurin | |
server-id: mchv-release-distribution | |
server-username: MAVEN_USERNAME | |
server-password: MAVEN_PASSWORD | |
cache: 'maven' | |
- name: Setup PHP with Readline extension | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: '8.0' | |
extensions: readline | |
# - name: Install ubuntu 20.04 dependencies | |
# if: matrix.os == 'ubuntu-20.04' | |
# shell: bash | |
# run: | | |
# export DEBIAN_FRONTEND=noninteractive | |
# sudo apt-get --assume-yes update | |
# sudo apt-get --assume-yes install make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-12 lld-12 libc++-12-dev libc++abi-12-dev libgcc-9-dev libunwind-dev libclang-common-12-dev maven | |
- name: Install ubuntu 20.04 dependencies (cached) | |
if: matrix.os == 'ubuntu-20.04' | |
uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-12 lld-12 libc++-12-dev libc++abi-12-dev libgcc-9-dev libunwind-dev libclang-common-12-dev maven | |
version: 1.0 | |
# - name: Install ubuntu 22.04 dependencies | |
# if: matrix.os == 'ubuntu-22.04' | |
# shell: bash | |
# run: | | |
# export DEBIAN_FRONTEND=noninteractive | |
# sudo apt-get --assume-yes update | |
# sudo apt-get --assume-yes install make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-14 lld-14 libc++-14-dev libc++abi-14-dev libgcc-11-dev libunwind-14-dev libclang-common-14-dev maven | |
- name: Install ubuntu 22.04 dependencies (cached) | |
if: matrix.os == 'ubuntu-22.04' | |
uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-14 lld-14 libc++-14-dev libc++abi-14-dev libgcc-11-dev libunwind-14-dev libclang-common-14-dev maven | |
version: 1.0 | |
- name: Install custom dependencies | |
if: matrix.os == 'macos-12' || matrix.os == 'windows-2019' | |
shell: bash | |
run: | | |
set -xeo pipefail | |
echo "REVISION: $REVISION" | |
if [[ -f "./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh" ]]; then | |
if [[ "$GH_MATRIX_OS" == *"windows"* || "$GH_MATRIX_OS" == *"macos"* ]]; then | |
./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh | |
else | |
sudo ./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh | |
fi | |
fi | |
- name: Run sccache-cache | |
if: matrix.os != 'windows-2019' | |
uses: mozilla-actions/[email protected] | |
- name: Install MSVC | |
if: matrix.os == 'windows-2019' | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
toolset: 14.0 | |
vs-version: '[16.4,16.5)' | |
- name: Setup cmake | |
if: matrix.os == 'windows-2019' | |
uses: lukka/get-cmake@latest | |
- name: Set up Maven | |
uses: stCarolas/[email protected] | |
with: | |
maven-version: 3.8.2 | |
- name: Setup NASM | |
if: matrix.os == 'windows-2019' | |
uses: ilammy/setup-nasm@v1 | |
- name: Restore artifacts, or setup vcpkg (do not install any package) | |
if: matrix.os == 'windows-2019' | |
uses: lukka/[email protected] | |
with: | |
# Just install vcpkg for now, do not install any ports in this step yet. | |
setupOnly: true | |
# Location of the vcpkg submodule in the Git repository. | |
vcpkgDirectory: '${{ github.workspace }}/vcpkg' | |
vcpkgGitCommitId: '${{ matrix.vcpkgCommitId}}' | |
# Since the cache must be invalidated when content of the vcpkg.json file changes, let's | |
# compute its hash and append this to the computed cache's key. | |
appendedCacheKey: ${{ hashFiles( '**/vcpkg_manifest/vcpkg.json' ) }} | |
vcpkgTriplet: ${{ matrix.triplet }} | |
# Ensure the vcpkg artifacts are cached, they are generated in the 'CMAKE_BINARY_DIR/vcpkg_installed' directory. | |
additionalCachedPaths: ${{ github.workspace }}/vcpkg | |
- name: Install vcpkg deps | |
if: matrix.os == 'windows-2019' | |
run: | | |
set -xeo pipefail | |
./vcpkg/vcpkg install gperf openssl:x64-windows-static zlib:x64-windows-static | |
shell: bash | |
- name: Build | |
if: matrix.os == 'macos-12' | |
shell: bash | |
run: | | |
set -xeo pipefail | |
echo "REVISION: $REVISION" | |
source ./.github/workflows/scripts/build_${SAFE_TYPE}.sh | |
env: | |
SCCACHE_GHA_ENABLED: "on" | |
- name: Build | |
if: matrix.os == 'windows-2019' | |
shell: bash | |
run: | | |
set -xeo pipefail | |
echo "REVISION: $REVISION" | |
source ./.github/workflows/scripts/build_${SAFE_TYPE}.sh | |
- name: Set up Docker buildx | |
uses: docker/setup-buildx-action@v2 | |
if: matrix.os == 'ubuntu-22.04' | |
- name: Build | |
uses: docker/build-push-action@v4 | |
if: matrix.os == 'ubuntu-22.04' | |
with: | |
context: . | |
push: false | |
file: tdlight.arch.${{env.SSL}}.${{env.COMPILER}}.dockerfile | |
tags: tdlight.${{env.DEBIAN_ARCH}}.${{env.SSL}}.${{env.COMPILER}}:latest | |
build-args: | | |
SCCACHE_GHA_ENABLED=on | |
ACTIONS_CACHE_URL=${{env.ACTIONS_CACHE_URL}} | |
ACTIONS_RUNTIME_TOKEN=${{env.ACTIONS_RUNTIME_TOKEN}} | |
ARCH_DEBIAN=${{env.DEBIAN_ARCH}} | |
ARCH_TRIPLE=${{env.TRIPLE_ARCH}} | |
TRIPLE_GNU=${{env.TRIPLE_GNU}} | |
NATIVE=${{env.NATIVE}} | |
DEBIAN_VERSION=${{env.DEBIAN_VERSION}} | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
outputs: type=local,dest=./docker-out | |
- name: Copy built files from docker | |
if: matrix.os == 'ubuntu-22.04' | |
shell: bash | |
run: | | |
set -xeo pipefail | |
echo "REVISION: $REVISION" | |
rm -rf natives | |
mv ./docker-out/out/natives natives | |
mv ./docker-out/out/libtdjni.so "libtdjni.${REVISION}-${TYPE}.so" | |
mv ./docker-out/out/tdlight-natives.jar "natives/target-${TYPE}/tdlight-natives-${REVISION}-${TYPE}.jar" | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: tdlight-natives-${{env.REVISION}}-${{env.TYPE}}.jar | |
path: natives/target-${{env.TYPE}}/tdlight-natives-${{env.REVISION}}-${{env.TYPE}}.jar | |
- name: Deploy to Maven (Snapshot) | |
if: github.ref == 'refs/heads/develop' | |
shell: bash | |
run: | | |
set -xeo pipefail | |
echo "REVISION: $REVISION" | |
echo "TYPE: $TYPE" | |
mvn -B -f natives/pom.xml -Drevision="$REVISION" -Dnative.type.classifier="$TYPE" clean package | |
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv-snapshot \ | |
-DrepositoryId=mchv-snapshot-distribution \ | |
-Dfile=natives/target-$TYPE/tdlight-natives-$REVISION-$TYPE.jar \ | |
-Dpackaging=pom \ | |
-DgroupId=it.tdlight \ | |
-DartifactId=tdlight-natives \ | |
-Dversion=$REVISION \ | |
-Drevision=$REVISION \ | |
-Dclassifier=$TYPE \ | |
-Dnative.type.classifier="$TYPE" | |
if [[ "$TYPE" == "linux_amd64_gnu_ssl1" ]]; then | |
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv-snapshot \ | |
-DrepositoryId=mchv-snapshot-distribution \ | |
-Dfile=natives/.ci-friendly-pom.xml \ | |
-Dpackaging=pom \ | |
-DgroupId=it.tdlight \ | |
-DartifactId=tdlight-natives \ | |
-Dversion=$REVISION \ | |
-Drevision=$REVISION \ | |
-Dnative.type.classifier="$TYPE" | |
fi | |
echo "Done." | |
exit 0 | |
env: | |
MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }} | |
MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }} | |
- name: Deploy to Maven (Release) | |
if: github.ref == 'refs/heads/master' | |
shell: bash | |
run: | | |
set -xeo pipefail | |
echo "REVISION: $REVISION" | |
echo "TYPE: $TYPE" | |
mvn -B -f natives/pom.xml -Drevision="$REVISION" -Dnative.type.classifier="$TYPE" clean package | |
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv \ | |
-DrepositoryId=mchv-release-distribution \ | |
-Dfile=natives/target-$TYPE/tdlight-natives-$REVISION-$TYPE.jar \ | |
-Dpackaging=pom \ | |
-DgroupId=it.tdlight \ | |
-DartifactId=tdlight-natives \ | |
-Dversion=$REVISION \ | |
-Drevision=$REVISION \ | |
-Dclassifier=$TYPE \ | |
-Dnative.type.classifier="$TYPE" | |
if [[ "$TYPE" == "linux_amd64_gnu_ssl1" ]]; then | |
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv \ | |
-DrepositoryId=mchv-release-distribution \ | |
-Dfile=natives/.ci-friendly-pom.xml \ | |
-Dpackaging=pom \ | |
-DgroupId=it.tdlight \ | |
-DartifactId=tdlight-natives \ | |
-Dversion=$REVISION \ | |
-Drevision=$REVISION \ | |
-Dnative.type.classifier="$TYPE" | |
fi | |
echo "Done." | |
exit 0 | |
env: | |
MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }} | |
MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }} |