Create diskuvbox releases #120
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
########################################################################## | |
# File: .github/workflows/dkml-release.yml # | |
# # | |
# Copyright 2022 Diskuv, Inc. # | |
# # | |
# Licensed under the Open Software License version 3.0 # | |
# (the "License"); you may not use this file except in compliance # | |
# with the License. You may obtain a copy of the License at # | |
# # | |
# https://opensource.org/license/osl-3-0-php/ # | |
# # | |
########################################################################## | |
# Maintainer note: This .yml file is used as the simple example of dkml-workflows. Keep it simple and documented! | |
name: Create diskuvbox releases | |
env: | |
OPAM_PACKAGE: "diskuvbox" | |
EXECUTABLE_NAME: "diskuvbox" | |
DKML_COMPILER: "" # You can override the dkml-compiler package version. Example: 2.0.2 | |
CACHE_PREFIX: "v1" | |
# Secondary switch 'two' used to install opam-installer for Dune-ified crosscompiling builds | |
SECONDARY_SWITCH: "true" | |
# Trigger whenever there is a git push to main/master branch, or whenever a version tag is pushed | |
on: | |
push: | |
branches: | |
- "main" | |
tags: | |
- "[0-9]+.*" | |
- "v*" | |
# ... or trigger manually from GitHub web interface | |
workflow_dispatch: | |
# ... or prime the caches every Wednesday at 18:00 UTC | |
schedule: | |
- cron: 0 18 * * WED | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- gh_os: windows-2019 | |
abi_pattern: win32-windows_x86 | |
dkml_host_abi: windows_x86 | |
- gh_os: windows-2019 | |
abi_pattern: win32-windows_x86_64 | |
dkml_host_abi: windows_x86_64 | |
- gh_os: ubuntu-latest | |
abi_pattern: manylinux2014-linux_x86 | |
dkml_host_abi: linux_x86 | |
- gh_os: ubuntu-latest | |
abi_pattern: manylinux2014-linux_x86_64 | |
dkml_host_abi: linux_x86_64 | |
- gh_os: macos-latest | |
abi_pattern: macos-darwin_all | |
dkml_host_abi: darwin_x86_64 | |
runs-on: ${{ matrix.gh_os }} | |
name: build / ${{ matrix.abi_pattern }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Cache cross-compilation tools | |
uses: actions/cache@v3 | |
with: | |
path: .ci/cross | |
key: | |
"${{ runner.os }}-cross-${{ hashFiles('ci/*.sh') }}" | |
- name: Cache DkML compilers code | |
uses: actions/cache@v3 | |
id: cache-dkml-compilers | |
with: | |
path: .ci/dkml-compilers | |
key: ${{ runner.os }} | |
- name: Checkout DkML compilers code | |
if: steps.cache-dkml-compilers.outputs.cache-hit != 'true' | |
# For help: ./dk dkml.workflow.compilers HELP | |
run: ./dk dkml.workflow.compilers PRERELEASE CI GitHub | |
# The .ci/dkml-compilers "pre" actions will create the environment variables: | |
# opam_root, exe_ext, dkml_host_abi, abi_pattern (and many more) | |
# | |
- name: Setup DkML compilers on a Windows host | |
if: startsWith(matrix.dkml_host_abi, 'windows_') | |
uses: ./.ci/dkml-compilers/gh-windows/pre | |
with: | |
DKML_COMPILER: ${{ env.DKML_COMPILER }} | |
CACHE_PREFIX: ${{ env.CACHE_PREFIX }} | |
SECONDARY_SWITCH: ${{ env.SECONDARY_SWITCH }} | |
- name: Setup DkML compilers on a Linux host | |
if: startsWith(matrix.dkml_host_abi, 'linux_') | |
uses: ./.ci/dkml-compilers/gh-linux/pre | |
with: | |
DKML_COMPILER: ${{ env.DKML_COMPILER }} | |
CACHE_PREFIX: ${{ env.CACHE_PREFIX }} | |
SECONDARY_SWITCH: ${{ env.SECONDARY_SWITCH }} | |
- name: Setup DkML compilers on a Darwin host | |
if: startsWith(matrix.dkml_host_abi, 'darwin_') | |
uses: ./.ci/dkml-compilers/gh-darwin/pre | |
with: | |
DKML_COMPILER: ${{ env.DKML_COMPILER }} | |
CACHE_PREFIX: ${{ env.CACHE_PREFIX }} | |
SECONDARY_SWITCH: ${{ env.SECONDARY_SWITCH }} | |
# This section is for your own build logic which you should place in | |
# ci/build-test.sh or a similar file | |
- name: Build and test the package on Windows host | |
if: startsWith(matrix.dkml_host_abi, 'windows_') | |
shell: msys2 {0} | |
run: ci/build-test.sh --opam-package ${{ env.OPAM_PACKAGE }} --executable-name ${{ env.EXECUTABLE_NAME }} | |
- name: Build and test the package on non-Windows host | |
if: "!startsWith(matrix.dkml_host_abi, 'windows_')" | |
run: ci/build-test.sh --opam-package ${{ env.OPAM_PACKAGE }} --executable-name ${{ env.EXECUTABLE_NAME }} | |
# The .ci/dkml-compilers "post" actions will finalize caching, etc. | |
- name: Teardown DkML compilers on a Windows host | |
if: startsWith(matrix.dkml_host_abi, 'windows_') | |
uses: ./.ci/dkml-compilers/gh-windows/post | |
- name: Teardown DkML compilers on a Darwin host | |
if: startsWith(matrix.dkml_host_abi, 'darwin_') | |
uses: ./.ci/dkml-compilers/gh-darwin/post | |
- name: Teardown DkML compilers on a Linux host | |
if: startsWith(matrix.dkml_host_abi, 'linux_') | |
uses: ./.ci/dkml-compilers/gh-linux/post | |
# Upload artifact | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.dkml_host_abi }} | |
path: dist/ | |
#-------- | |
# Release | |
#-------- | |
release: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write # Needed for softprops/action-gh-release@v1 | |
# Wait until `build` complete | |
needs: | |
- build | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
path: dist | |
- name: Restructure multi-ABI directories | |
run: ci/prepare-release.sh | |
- name: Release (only when Git tag pushed) | |
uses: softprops/action-gh-release@v1 | |
if: startsWith(github.ref, 'refs/tags/') | |
with: | |
files: | | |
_release/* |