ci-package #1
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
# ********************************************************** | |
# Copyright (c) 2020-2024 Google, Inc. All rights reserved. | |
# ********************************************************** | |
# Redistribution and use in source and binary forms, with or without | |
# modification, are permitted provided that the following conditions are met: | |
# | |
# * Redistributions of source code must retain the above copyright notice, | |
# this list of conditions and the following disclaimer. | |
# | |
# * Redistributions in binary form must reproduce the above copyright notice, | |
# this list of conditions and the following disclaimer in the documentation | |
# and/or other materials provided with the distribution. | |
# | |
# * Neither the name of Google, Inc. nor the names of its contributors may be | |
# used to endorse or promote products derived from this software without | |
# specific prior written permission. | |
# | |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
# ARE DISCLAIMED. IN NO EVENT SHALL VMWARE, INC. OR CONTRIBUTORS BE LIABLE | |
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | |
# DAMAGE. | |
# Github Actions workflow for release packages. | |
name: ci-package | |
on: | |
# Our weekly cronbuild: 9pm EST on Fridays. | |
schedule: | |
- cron: '0 2 * * SAT' | |
# Manual trigger using the Actions page. | |
workflow_dispatch: | |
inputs: | |
version: | |
description: 'Package version number (blank for cronbuild)' | |
required: false | |
default: '' | |
build: | |
description: 'Package build number' | |
required: true | |
default: '0' | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
########################################################################### | |
# Linux x86 tarball with 64-bit and 32-bit builds: | |
linux-x86: | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: Fetch Sources | |
run: | | |
git fetch --no-tags --depth=1 origin master | |
# Include Dr. Memory in packages. | |
# We do shallow clones and assume DrM will update its DR at least once | |
# every 250 DR commits. | |
git clone --depth=2 https://github.com/DynamoRIO/drmemory.git drmemory | |
cd drmemory && git submodule update --init --recursive --depth 250 && cd .. | |
# Install multilib for non-cross-compiling Linux build. | |
# GA CI uses packages.microsoft.com which is missing i386 packages, and | |
# attempts at using apt with us.archive-ubuntu.com hit dep issues: | |
# so we manually install the i386 packages we need. | |
- name: Create Build Environment | |
run: | | |
sudo apt update | |
sudo apt-get -y install doxygen vera++ zlib1g-dev libsnappy-dev \ | |
liblz4-dev g++-multilib libunwind-dev | |
sudo add-apt-repository 'deb [arch=i386] http://us.archive.ubuntu.com/ubuntu focal main' | |
apt download libunwind8:i386 libunwind-dev:i386 liblzma5:i386 \ | |
zlib1g:i386 zlib1g-dev:i386 | |
mkdir ../extract | |
for i in *.deb; do dpkg-deb -x $i ../extract; done | |
sudo rsync -av ../extract/usr/lib/i386-linux-gnu/ /usr/lib/i386-linux-gnu/ | |
sudo rsync -av ../extract/lib/i386-linux-gnu/ /usr/lib/i386-linux-gnu/ | |
sudo rsync -av ../extract/usr/include/i386-linux-gnu/ /usr/include/ | |
# Use a newer cmake to avoid 32-bit toolchain problems (i#4830). | |
- name: Setup newer cmake | |
uses: jwlawson/actions-setup-cmake@v1.8 | |
with: | |
cmake-version: '3.19.7' | |
- name: Get Version | |
id: version | |
# XXX: For now we duplicate this version number here with CMakeLists.txt. | |
# We should find a way to share (xref i#1565). | |
# We support setting the version and build for manual builds. | |
# We only use a non-zero build # when making multiple manual builds in one day. | |
run: | | |
if test -z "${{ github.event.inputs.version }}"; then | |
export VERSION_NUMBER=10.0.$((`git log -n 1 --format=%ct` / (60*60*24))) | |
else | |
export VERSION_NUMBER=${{ github.event.inputs.version }} | |
fi | |
if [ "${{ github.event.inputs.build }}" -ne 0 ]; then | |
export VERSION_NUMBER="${VERSION_NUMBER}-${{ github.event.inputs.build }}" | |
fi | |
echo "::set-output name=version_number::${VERSION_NUMBER}" | |
- name: Build Package | |
working-directory: ${{ github.workspace }} | |
run: ./suite/runsuite_wrapper.pl automated_ci | |
env: | |
CI_TARGET: package | |
VERSION_NUMBER: ${{ steps.version.outputs.version_number }} | |
# We do not update the web documentation here because a newer | |
# Doxygen is needed but we have not yet tested our tests and | |
# packages built on newer Ubuntu on GA CI. | |
DEPLOY_DOCS: no | |
DYNAMORIO_CROSS_AARCHXX_LINUX_ONLY: no | |
CI_TRIGGER: ${{ github.event_name }} | |
CI_BRANCH: ${{ github.ref }} | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v2 | |
with: | |
name: linux-tarball | |
path: DynamoRIO-Linux-${{ steps.version.outputs.version_number }}.tar.gz | |
- name: Send failure mail to dynamorio-devs | |
if: failure() && github.ref == 'refs/heads/master' | |
uses: dawidd6/action-send-mail@v2 | |
with: | |
server_address: smtp.gmail.com | |
server_port: 465 | |
username: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_USERNAME}} | |
password: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_PASSWORD}} | |
subject: | | |
[${{github.repository}}] ${{github.workflow}} FAILED | |
on ${{github.event_name}} at ${{github.ref}} | |
body: | | |
Github Actions CI workflow run FAILED! | |
Workflow: ${{github.workflow}}/linux-x86 | |
Repository: ${{github.repository}} | |
Branch ref: ${{github.ref}} | |
SHA: ${{github.sha}} | |
Triggering actor: ${{github.actor}} | |
Triggering event: ${{github.event_name}} | |
Run Id: ${{github.run_id}} | |
See more details on github.com/DynamoRIO/dynamorio/actions/runs/${{github.run_id}} | |
to: dynamorio-devs@googlegroups.com | |
from: Github Action package jobs | |
########################################################################### | |
# Linux AArch64 tarball: | |
linux-aarch64: | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: Fetch Sources | |
run: | | |
git fetch --no-tags --depth=1 origin master | |
# Include Dr. Memory in packages. | |
git clone --depth=2 https://github.com/DynamoRIO/drmemory.git drmemory | |
cd drmemory && git submodule update --init --recursive --depth 250 && cd .. | |
# Install cross-compiler for cross-compiling Linux build. | |
# Unfortunately there are no libunwind or compression cross-compile | |
# packages so we unpack the native versions and copy their files. | |
- name: Create Build Environment | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install doxygen vera++ cmake g++-aarch64-linux-gnu | |
sudo add-apt-repository 'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal main' | |
apt download libunwind8:arm64 libunwind-dev:arm64 liblzma5:arm64 \ | |
zlib1g:arm64 zlib1g-dev:arm64 libsnappy1v5:arm64 libsnappy-dev:arm64 \ | |
liblz4-1:arm64 liblz4-dev:arm64 | |
mkdir ../extract | |
for i in *.deb; do dpkg-deb -x $i ../extract; done | |
for i in include lib; do sudo rsync -av ../extract/usr/${i}/aarch64-linux-gnu/ /usr/aarch64-linux-gnu/${i}/; done | |
sudo rsync -av ../extract/usr/include/ /usr/aarch64-linux-gnu/include/ | |
sudo rsync -av ../extract/lib/aarch64-linux-gnu/ /usr/aarch64-linux-gnu/lib/ | |
- name: Get Version | |
id: version | |
# XXX: See x86 job comments on sharing the default ver# with CMakeLists.txt. | |
run: | | |
if test -z "${{ github.event.inputs.version }}"; then | |
export VERSION_NUMBER=10.0.$((`git log -n 1 --format=%ct` / (60*60*24))) | |
else | |
export VERSION_NUMBER=${{ github.event.inputs.version }} | |
fi | |
if [ "${{ github.event.inputs.build }}" -ne 0 ]; then | |
export VERSION_NUMBER="${VERSION_NUMBER}-${{ github.event.inputs.build }}" | |
fi | |
echo "::set-output name=version_number::${VERSION_NUMBER}" | |
- name: Build Package | |
working-directory: ${{ github.workspace }} | |
run: ./suite/runsuite_wrapper.pl automated_ci 64_only | |
env: | |
CI_TARGET: package | |
VERSION_NUMBER: ${{ steps.version.outputs.version_number }} | |
DYNAMORIO_CROSS_AARCHXX_LINUX_ONLY: yes | |
CI_TRIGGER: ${{ github.event_name }} | |
CI_BRANCH: ${{ github.ref }} | |
- name: Upload AArch64 | |
uses: actions/upload-artifact@v2 | |
with: | |
name: aarch64-tarball | |
path: DynamoRIO-AArch64-Linux-${{ steps.version.outputs.version_number }}.tar.gz | |
- name: Send failure mail to dynamorio-devs | |
if: failure() && github.ref == 'refs/heads/master' | |
uses: dawidd6/action-send-mail@v2 | |
with: | |
server_address: smtp.gmail.com | |
server_port: 465 | |
username: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_USERNAME}} | |
password: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_PASSWORD}} | |
subject: | | |
[${{github.repository}}] ${{github.workflow}} FAILED | |
on ${{github.event_name}} at ${{github.ref}} | |
body: | | |
Github Actions CI workflow run FAILED! | |
Workflow: ${{github.workflow}}/linux-aarch64 | |
Repository: ${{github.repository}} | |
Branch ref: ${{github.ref}} | |
SHA: ${{github.sha}} | |
Triggering actor: ${{github.actor}} | |
Triggering event: ${{github.event_name}} | |
Run Id: ${{github.run_id}} | |
See more details on github.com/DynamoRIO/dynamorio/actions/runs/${{github.run_id}} | |
to: dynamorio-devs@googlegroups.com | |
from: Github Action package jobs | |
########################################################################### | |
# Linux ARM tarball (package.cmake does not support same job as AArch64): | |
linux-arm: | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: Fetch Sources | |
run: | | |
git fetch --no-tags --depth=1 origin master | |
# Include Dr. Memory in packages. | |
git clone --depth=2 https://github.com/DynamoRIO/drmemory.git drmemory | |
cd drmemory && git submodule update --init --recursive --depth 250 && cd .. | |
# Install cross-compiler for cross-compiling Linux build. | |
# Unfortunately there are no libunwind or compression cross-compile | |
# packages so we unpack the native versions and copy their files. | |
- name: Create Build Environment | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install doxygen vera++ cmake g++-arm-linux-gnueabihf | |
sudo add-apt-repository 'deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports focal main' | |
apt download libunwind8:armhf libunwind-dev:armhf liblzma5:armhf \ | |
zlib1g:armhf zlib1g-dev:armhf libsnappy1v5:armhf libsnappy-dev:armhf \ | |
liblz4-1:armhf liblz4-dev:armhf | |
mkdir ../extract | |
for i in *.deb; do dpkg-deb -x $i ../extract; done | |
for i in include lib; do sudo rsync -av ../extract/usr/${i}/arm-linux-gnueabihf/ /usr/arm-linux-gnueabihf/${i}/; done | |
sudo rsync -av ../extract/usr/include/ /usr/arm-linux-gnueabihf/include/ | |
sudo rsync -av ../extract/lib/arm-linux-gnueabihf/ /usr/arm-linux-gnueabihf/lib/ | |
- name: Get Version | |
id: version | |
# XXX: See x86 job comments on sharing the default ver# with CMakeLists.txt. | |
run: | | |
if test -z "${{ github.event.inputs.version }}"; then | |
export VERSION_NUMBER=10.0.$((`git log -n 1 --format=%ct` / (60*60*24))) | |
else | |
export VERSION_NUMBER=${{ github.event.inputs.version }} | |
fi | |
if [ "${{ github.event.inputs.build }}" -ne 0 ]; then | |
export VERSION_NUMBER="${VERSION_NUMBER}-${{ github.event.inputs.build }}" | |
fi | |
echo "::set-output name=version_number::${VERSION_NUMBER}" | |
- name: Build Package | |
working-directory: ${{ github.workspace }} | |
run: ./suite/runsuite_wrapper.pl automated_ci 32_only | |
env: | |
CI_TARGET: package | |
VERSION_NUMBER: ${{ steps.version.outputs.version_number }} | |
DYNAMORIO_CROSS_AARCHXX_LINUX_ONLY: yes | |
CI_TRIGGER: ${{ github.event_name }} | |
CI_BRANCH: ${{ github.ref }} | |
- name: Upload ARM | |
uses: actions/upload-artifact@v2 | |
with: | |
name: arm-tarball | |
path: DynamoRIO-ARM-Linux-EABIHF-${{ steps.version.outputs.version_number }}.tar.gz | |
- name: Send failure mail to dynamorio-devs | |
if: failure() && github.ref == 'refs/heads/master' | |
uses: dawidd6/action-send-mail@v2 | |
with: | |
server_address: smtp.gmail.com | |
server_port: 465 | |
username: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_USERNAME}} | |
password: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_PASSWORD}} | |
subject: | | |
[${{github.repository}}] ${{github.workflow}} FAILED | |
on ${{github.event_name}} at ${{github.ref}} | |
body: | | |
Github Actions CI workflow run FAILED! | |
Workflow: ${{github.workflow}}/linux-arm | |
Repository: ${{github.repository}} | |
Branch ref: ${{github.ref}} | |
SHA: ${{github.sha}} | |
Triggering actor: ${{github.actor}} | |
Triggering event: ${{github.event_name}} | |
Run Id: ${{github.run_id}} | |
See more details on github.com/DynamoRIO/dynamorio/actions/runs/${{github.run_id}} | |
to: dynamorio-devs@googlegroups.com | |
from: Github Action package jobs | |
########################################################################### | |
# Android ARM tarball: | |
android-arm: | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: Fetch Sources | |
run: | | |
git fetch --no-tags --depth=1 origin master | |
# Include Dr. Memory in packages. | |
git clone --depth=2 https://github.com/DynamoRIO/drmemory.git drmemory | |
cd drmemory && git submodule update --init --recursive --depth 250 && cd .. | |
# Fetch and install Android NDK for Andoid cross-compile build. | |
- name: Create Build Environment | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install doxygen vera++ cmake | |
cd /tmp | |
wget https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip | |
unzip -q android-ndk-r10e-linux-x86_64.zip | |
export ANDROID_NDK_ROOT=/tmp/android-ndk-r10e | |
android-ndk-r10e/build/tools/make-standalone-toolchain.sh --arch=arm \ | |
--toolchain=arm-linux-androideabi-4.9 --platform=android-21 \ | |
--install-dir=/tmp/android-gcc-arm-ndk-10e | |
# Manually force using ld.bfd, setting CMAKE_LINKER does not work. | |
ln -sf ld.bfd /tmp/android-gcc-arm-ndk-10e/arm-linux-androideabi/bin/ld | |
ln -sf arm-linux-androideabi-ld.bfd \ | |
/tmp/android-gcc-arm-ndk-10e/bin/arm-linux-androideabi-ld | |
- name: Get Version | |
id: version | |
# XXX: See x86 job comments on sharing the default ver# with CMakeLists.txt. | |
run: | | |
if test -z "${{ github.event.inputs.version }}"; then | |
export VERSION_NUMBER=10.0.$((`git log -n 1 --format=%ct` / (60*60*24))) | |
else | |
export VERSION_NUMBER=${{ github.event.inputs.version }} | |
fi | |
if [ "${{ github.event.inputs.build }}" -ne 0 ]; then | |
export VERSION_NUMBER="${VERSION_NUMBER}-${{ github.event.inputs.build }}" | |
fi | |
echo "::set-output name=version_number::${VERSION_NUMBER}" | |
- name: Build Package | |
working-directory: ${{ github.workspace }} | |
run: ./suite/runsuite_wrapper.pl automated_ci 32_only | |
env: | |
CI_TARGET: package | |
VERSION_NUMBER: ${{ steps.version.outputs.version_number }} | |
DYNAMORIO_CROSS_AARCHXX_LINUX_ONLY: no | |
DYNAMORIO_CROSS_ANDROID_ONLY: yes | |
DYNAMORIO_ANDROID_TOOLCHAIN: /tmp/android-gcc-arm-ndk-10e | |
CI_TRIGGER: ${{ github.event_name }} | |
CI_BRANCH: ${{ github.ref }} | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v2 | |
with: | |
name: android-tarball | |
path: DynamoRIO-ARM-Android-EABI-${{ steps.version.outputs.version_number }}.tar.gz | |
- name: Send failure mail to dynamorio-devs | |
if: failure() && github.ref == 'refs/heads/master' | |
uses: dawidd6/action-send-mail@v2 | |
with: | |
server_address: smtp.gmail.com | |
server_port: 465 | |
username: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_USERNAME}} | |
password: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_PASSWORD}} | |
subject: | | |
[${{github.repository}}] ${{github.workflow}} FAILED | |
on ${{github.event_name}} at ${{github.ref}} | |
body: | | |
Github Actions CI workflow run FAILED! | |
Workflow: ${{github.workflow}}/android-arm | |
Repository: ${{github.repository}} | |
Branch ref: ${{github.ref}} | |
SHA: ${{github.sha}} | |
Triggering actor: ${{github.actor}} | |
Triggering event: ${{github.event_name}} | |
Run Id: ${{github.run_id}} | |
See more details on github.com/DynamoRIO/dynamorio/actions/runs/${{github.run_id}} | |
to: dynamorio-devs@googlegroups.com | |
from: Github Action package jobs | |
########################################################################### | |
# Windows .zip with 32-bit and 64-bit x86 builds: | |
windows: | |
runs-on: windows-2019 | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: Fetch Sources | |
run: | | |
git fetch --no-tags --depth=1 origin master | |
# Include Dr. Memory in packages. | |
git clone --depth=2 https://github.com/DynamoRIO/drmemory.git drmemory | |
cd drmemory && git submodule update --init --recursive --depth 250 && cd .. | |
- name: Download Packages | |
shell: powershell | |
run: | | |
md c:\projects\install | |
(New-Object System.Net.WebClient).DownloadFile("https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip", "c:\projects\install\ninja.zip") | |
(New-Object System.Net.WebClient).DownloadFile("https://sourceforge.net/projects/doxygen/files/rel-1.8.19/doxygen-1.8.19.windows.x64.bin.zip", "c:\projects\install\doxygen.zip") | |
- name: Get Version | |
id: version | |
# XXX: See x86 job comments on sharing the default ver# with CMakeLists.txt. | |
run: | | |
if test -z "${{ github.event.inputs.version }}"; then | |
export VERSION_NUMBER=10.0.$((`git log -n 1 --format=%ct` / (60*60*24))) | |
else | |
export VERSION_NUMBER=${{ github.event.inputs.version }} | |
fi | |
if [ "${{ github.event.inputs.build }}" -ne 0 ]; then | |
export VERSION_NUMBER="${VERSION_NUMBER}-${{ github.event.inputs.build }}" | |
fi | |
echo "::set-output name=version_number::${VERSION_NUMBER}" | |
- name: Build Package | |
working-directory: ${{ github.workspace }} | |
shell: cmd | |
# We need to set up WiX for Dr. Memory. | |
run: | | |
echo ------ Setting up paths ------ | |
7z x c:\projects\install\ninja.zip -oc:\projects\install\ninja > nul | |
set PATH=c:\projects\install\ninja;%PATH% | |
7z x c:\projects\install\doxygen.zip -oc:\projects\install\doxygen > nul | |
set PATH=c:\projects\install\doxygen;%PATH% | |
dir "c:\Program Files (x86)\WiX Toolset"* | |
set PATH=C:\Program Files (x86)\WiX Toolset v3.14\bin;%PATH% | |
call "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars32.bat" | |
echo ------ Running suite ------ | |
echo PATH is "%PATH%" | |
echo Running in directory "%CD%" | |
perl suite/runsuite_wrapper.pl automated_ci use_ninja | |
env: | |
CI_TARGET: package | |
VERSION_NUMBER: ${{ steps.version.outputs.version_number }} | |
CI_TRIGGER: ${{ github.event_name }} | |
CI_BRANCH: ${{ github.ref }} | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v2 | |
with: | |
name: windows-zip | |
path: DynamoRIO-Windows-${{ steps.version.outputs.version_number }}.zip | |
- name: Send failure mail to dynamorio-devs | |
if: failure() && github.ref == 'refs/heads/master' | |
uses: dawidd6/action-send-mail@v2 | |
with: | |
server_address: smtp.gmail.com | |
server_port: 465 | |
username: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_USERNAME}} | |
password: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_PASSWORD}} | |
subject: | | |
[${{github.repository}}] ${{github.workflow}} FAILED | |
on ${{github.event_name}} at ${{github.ref}} | |
body: | | |
Github Actions CI workflow run FAILED! | |
Workflow: ${{github.workflow}}/windows | |
Repository: ${{github.repository}} | |
Branch ref: ${{github.ref}} | |
SHA: ${{github.sha}} | |
Triggering actor: ${{github.actor}} | |
Triggering event: ${{github.event_name}} | |
Run Id: ${{github.run_id}} | |
See more details on github.com/DynamoRIO/dynamorio/actions/runs/${{github.run_id}} | |
to: dynamorio-devs@googlegroups.com | |
from: Github Action package jobs | |
########################################################################### | |
# Create release and populate with files. | |
# We can't have each OS job create the release because only the first | |
# succeeds and the others fail: there is no check in the create-release | |
# action to use an existing release if it already exists. | |
# Thus, our strategy is to share files from the build jobs with this | |
# single release job via artifacts. | |
create_release: | |
needs: [linux-x86, linux-aarch64, linux-arm, android-arm, windows] | |
runs-on: ubuntu-20.04 | |
steps: | |
# We need a checkout to run git log for the version. | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: Get Version | |
id: version | |
# XXX: See x86 job comments on sharing the default ver# with CMakeLists.txt. | |
run: | | |
if test -z "${{ github.event.inputs.version }}"; then | |
export VERSION_NUMBER="10.0.$((`git log -n 1 --format=%ct` / (60*60*24)))" | |
export PREFIX="cronbuild-" | |
else | |
export VERSION_NUMBER=${{ github.event.inputs.version }} | |
export PREFIX="release_" | |
fi | |
if [ "${{ github.event.inputs.build }}" -ne 0 ]; then | |
export VERSION_NUMBER="${VERSION_NUMBER}-${{ github.event.inputs.build }}" | |
fi | |
echo "::set-output name=version_number::${VERSION_NUMBER}" | |
echo "::set-output name=version_string::${PREFIX}${VERSION_NUMBER}" | |
- name: Create Release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ steps.version.outputs.version_string }} | |
release_name: ${{ steps.version.outputs.version_string }} | |
body: | | |
Auto-generated periodic build. | |
draft: false | |
prerelease: false | |
- name: Download Linux | |
uses: actions/download-artifact@v2 | |
with: | |
name: linux-tarball | |
- name: Upload Linux | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
# This action doesn't seem to support a glob so we need the exact name. | |
asset_path: DynamoRIO-Linux-${{ steps.version.outputs.version_number }}.tar.gz | |
asset_name: DynamoRIO-Linux-${{ steps.version.outputs.version_number }}.tar.gz | |
asset_content_type: application/x-gzip | |
- name: Download AArch64 | |
uses: actions/download-artifact@v2 | |
with: | |
name: aarch64-tarball | |
- name: Upload AArch64 | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
# This action doesn't seem to support a glob so we need the exact name. | |
asset_path: DynamoRIO-AArch64-Linux-${{ steps.version.outputs.version_number }}.tar.gz | |
asset_name: DynamoRIO-AArch64-Linux-${{ steps.version.outputs.version_number }}.tar.gz | |
asset_content_type: application/x-gzip | |
- name: Download ARM | |
uses: actions/download-artifact@v2 | |
with: | |
name: arm-tarball | |
- name: Upload ARM | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
# This action doesn't seem to support a glob so we need the exact name. | |
asset_path: DynamoRIO-ARM-Linux-EABIHF-${{ steps.version.outputs.version_number }}.tar.gz | |
asset_name: DynamoRIO-ARM-Linux-EABIHF-${{ steps.version.outputs.version_number }}.tar.gz | |
asset_content_type: application/x-gzip | |
- name: Download Android | |
uses: actions/download-artifact@v2 | |
with: | |
name: android-tarball | |
- name: Upload Android | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
# This action doesn't seem to support a glob so we need the exact name. | |
asset_path: DynamoRIO-ARM-Android-EABI-${{ steps.version.outputs.version_number }}.tar.gz | |
asset_name: DynamoRIO-ARM-Android-EABI-${{ steps.version.outputs.version_number }}.tar.gz | |
asset_content_type: application/x-gzip | |
- name: Download Windows | |
uses: actions/download-artifact@v2 | |
with: | |
name: windows-zip | |
- name: Upload Windows | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
# This action doesn't seem to support a glob so we need the exact name. | |
asset_path: DynamoRIO-Windows-${{ steps.version.outputs.version_number }}.zip | |
asset_name: DynamoRIO-Windows-${{ steps.version.outputs.version_number }}.zip | |
asset_content_type: application/zip | |
- name: Send failure mail to dynamorio-devs | |
if: failure() && github.ref == 'refs/heads/master' | |
uses: dawidd6/action-send-mail@v2 | |
with: | |
server_address: smtp.gmail.com | |
server_port: 465 | |
username: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_USERNAME}} | |
password: ${{secrets.DYNAMORIO_NOTIFICATION_EMAIL_PASSWORD}} | |
subject: | | |
[${{github.repository}}] ${{github.workflow}} FAILED | |
on ${{github.event_name}} at ${{github.ref}} | |
body: | | |
Github Actions CI workflow run FAILED! | |
Workflow: ${{github.workflow}}/create_release | |
Repository: ${{github.repository}} | |
Branch ref: ${{github.ref}} | |
SHA: ${{github.sha}} | |
Triggering actor: ${{github.actor}} | |
Triggering event: ${{github.event_name}} | |
Run Id: ${{github.run_id}} | |
See more details on github.com/DynamoRIO/dynamorio/actions/runs/${{github.run_id}} | |
to: dynamorio-devs@googlegroups.com | |
from: Github Action package jobs |