deploy cross packages #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
on: | |
workflow_call: | |
inputs: | |
package: | |
description: Which package or commit to build (default is HEAD commit) | |
type: string | |
required: false | |
env: | |
MY_UNIVERSE: ${{ github.event.repository.name != 'cran' && format('https://{0}.r-universe.dev', github.event.repository.name) || '' }} | |
GH_APP_ID: '87942' | |
jobs: | |
prepare: | |
name: Determine package to build | |
runs-on: ubuntu-22.04 | |
if: "!contains(github.event.head_commit.message, 'Deleting packages')" | |
outputs: | |
repo_url: ${{ steps.lookup.outputs.repo_url }} | |
repo_name: ${{ steps.lookup.outputs.repo_name }} | |
repo_commit: ${{ steps.lookup.outputs.repo_commit }} | |
repo_subdir: ${{ steps.lookup.outputs.repo_subdir }} | |
repo_branch: ${{ steps.lookup.outputs.repo_branch }} | |
repo_registered: ${{ steps.lookup.outputs.repo_registered }} | |
universe_app: ${{ steps.lookup.outputs.universe_app }} | |
maintainer_login: ${{ steps.lookup.outputs.maintainer_login }} | |
build_docs: ${{ steps.lookup.outputs.build_docs }} | |
skip_binaries: ${{ steps.lookup.outputs.skip_binaries }} | |
is_rebuild: ${{ steps.lookup.outputs.is_rebuild }} | |
steps: | |
- id: lookup | |
name: Find changed package | |
uses: r-universe-org/find-changes@master | |
with: | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
# github-token: ${{secrets.PUBLIC_PAT}} | |
package: ${{ inputs.package }} | |
pendingstatus: | |
name: Set Status to Pending | |
runs-on: ubuntu-22.04 | |
needs: [prepare] | |
steps: | |
- name: Set upstream commit status | |
uses: r-universe-org/commit-status@master | |
env: | |
GH_APP_KEY: ${{ secrets.GH_APP_KEY }} | |
with: | |
repo: ${{ needs.prepare.outputs.repo_url }} | |
sha: ${{ needs.prepare.outputs.repo_commit }} | |
url: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} | |
universe: ${{ github.event.repository.name }} | |
has_app: ${{ needs.prepare.outputs.universe_app }} | |
package: ${{ needs.prepare.outputs.repo_name }} | |
deployed_packages: 'pending' | |
if: inputs.package == '' | |
docs: | |
needs: prepare | |
name: Build package documentation | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 60 | |
if: needs.prepare.outputs.build_docs | |
steps: | |
- name: Build package docs | |
uses: r-universe-org/build-docs@master | |
with: | |
repo_url: ${{ needs.prepare.outputs.repo_url }} | |
subdir: ${{ needs.prepare.outputs.repo_subdir }} | |
registry: ${{ github.event.repository.name }} | |
env: | |
GITHUB_PAT: ${{secrets.GITHUB_TOKEN}} | |
- name: "Save docs zip" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: docs-website | |
path: docs.zip | |
deploydocs: | |
name: Deploy to docs server | |
runs-on: ubuntu-22.04 | |
needs: docs | |
steps: | |
- name: Get artifacts for deployment | |
uses: actions/download-artifact@v4 | |
with: | |
name: docs-website | |
- id: deployment | |
name: Upload docs to server | |
uses: r-universe-org/deploy-docs@master | |
env: | |
BUILDLOG: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} | |
GITHUB_PAT: ${{ secrets.GHPAT }} | |
source: | |
needs: prepare | |
name: Build source package | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 90 | |
outputs: | |
commitinfo: ${{ steps.build.outputs.COMMITINFO }} | |
maintainerinfo: ${{ steps.build.outputs.MAINTAINERINFO }} | |
sourcepkg: ${{ steps.build.outputs.SOURCEPKG }} | |
package: ${{ steps.build.outputs.PACKAGE }} | |
version: ${{ steps.build.outputs.VERSION }} | |
java: ${{ steps.build.outputs.NEED_RJAVA }} | |
jags: ${{ steps.build.outputs.NEED_JAGS }} | |
cmdstan: ${{ steps.build.outputs.NEED_CMDSTAN }} | |
fortran: ${{ steps.build.outputs.NEED_FORTRAN }} | |
ostype: ${{ steps.build.outputs.OSTYPE }} | |
needcompile: ${{ steps.build.outputs.NEEDS_COMPILATION }} | |
steps: | |
- id: build | |
name: Build source package | |
uses: r-universe-org/build-source@master | |
env: | |
MAINTAINERLOGIN: ${{ needs.prepare.outputs.maintainer_login }} | |
GITHUB_PAT: ${{secrets.GITHUB_TOKEN}} | |
with: | |
url: ${{ needs.prepare.outputs.repo_url }} | |
ref: ${{ needs.prepare.outputs.repo_commit }} | |
subdir: ${{ needs.prepare.outputs.repo_subdir }} | |
branch: ${{ needs.prepare.outputs.repo_branch }} | |
articles: ${{ needs.prepare.outputs.repo_registered }} | |
- name: "Store source package" | |
uses: r-universe-org/store-package@master | |
if: ${{ always() && steps.build.outputs.PACKAGE }} | |
with: | |
name: package-source | |
REPO_URL: ${{ needs.prepare.outputs.repo_url }} | |
REPO_REGISTERED: ${{ needs.prepare.outputs.repo_registered }} | |
JOB_STATUS: ${{ job.status }} | |
DISTRO: ${{ steps.build.outputs.DISTRO }} | |
PACKAGE: ${{ steps.build.outputs.PACKAGE }} | |
VERSION: ${{ steps.build.outputs.VERSION }} | |
COMMITINFO: ${{ steps.build.outputs.COMMITINFO }} | |
MAINTAINERINFO: ${{ steps.build.outputs.MAINTAINERINFO }} | |
FILE: ${{ steps.build.outputs.SOURCEPKG }} | |
TARGET: ${{ steps.build.outputs.SOURCEPKG && 'source' || 'failure' }} | |
- name: "Store linux binary package" | |
uses: r-universe-org/store-package@master | |
if: ${{ always() && steps.build.outputs.BINARYPKG }} | |
with: | |
name: package-linux-release | |
REPO_URL: ${{ needs.prepare.outputs.repo_url }} | |
REPO_REGISTERED: ${{ needs.prepare.outputs.repo_registered }} | |
JOB_STATUS: ${{ job.status }} | |
DISTRO: ${{ steps.build.outputs.DISTRO }} | |
PACKAGE: ${{ steps.build.outputs.PACKAGE }} | |
VERSION: ${{ steps.build.outputs.VERSION }} | |
COMMITINFO: ${{ steps.build.outputs.COMMITINFO }} | |
MAINTAINERINFO: ${{ steps.build.outputs.MAINTAINERINFO }} | |
FILE: ${{ steps.build.outputs.BINARYPKG }} | |
TARGET: 'linux' | |
- name: "Cache package library" | |
uses: actions/cache/save@v3 | |
if: ${{ always() && steps.build.outputs.BINARYPKG }} | |
with: | |
path: pkglib | |
key: ${{ runner.os }}-${{ github.run_id }}-${{github.run_attempt}} | |
wasm: | |
needs: [prepare, source] | |
if: ${{ always() && needs.source.outputs.sourcepkg }} | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 60 | |
name: Build for webassembly | |
steps: | |
- name: "Restore package library" | |
uses: actions/cache/restore@v3 | |
with: | |
path: pkglib | |
key: ${{ runner.os }}-${{ github.run_id }}-${{github.run_attempt}} | |
restore-keys: ${{ runner.os }}-${{ github.run_id }} | |
- name: Download source package | |
uses: actions/download-artifact@v4 | |
with: | |
name: package-source | |
path: . | |
- id: build | |
name: Build wasm binary | |
uses: r-universe-org/build-wasm@master | |
with: | |
sourcepkg: ${{ needs.source.outputs.sourcepkg }} | |
env: | |
GITHUB_PAT: ${{secrets.GITHUB_TOKEN}} | |
- name: "Store package files" | |
uses: r-universe-org/store-package@master | |
if: ${{ always() && steps.build.outputs.binarypkg }} | |
with: | |
name: package-wasm-release | |
REPO_URL: ${{ needs.prepare.outputs.repo_url }} | |
REPO_REGISTERED: ${{ needs.prepare.outputs.repo_registered }} | |
JOB_STATUS: ${{ job.status }} | |
PACKAGE: ${{ needs.source.outputs.package }} | |
VERSION: ${{ needs.source.outputs.version }} | |
COMMITINFO: ${{ needs.source.outputs.commitinfo }} | |
MAINTAINERINFO: ${{ needs.source.outputs.maintainerinfo }} | |
FILE: ${{ steps.build.outputs.binarypkg }} | |
TARGET: "wasm" | |
binaries: | |
needs: [prepare, source] | |
if: ${{ always() && needs.source.outputs.sourcepkg && !needs.prepare.outputs.skip_binaries }} | |
runs-on: ${{ matrix.os }}-${{ matrix.os == 'macos' && '11' || 'latest' }} | |
timeout-minutes: 100 | |
name: Build R-${{ matrix.r }} for ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ windows, macos ] | |
r: [ 'release', 'oldrel' ] | |
include: | |
- os: 'windows' | |
r: 'devel' | |
steps: | |
- name: Prepare macOS system | |
if: runner.os == 'macos' | |
uses: r-universe-org/prepare-macos@master | |
with: | |
version: ${{ matrix.r }} | |
fortran: ${{ needs.source.outputs.fortran }} | |
- name: Install R | |
uses: r-universe-org/actions/setup-r@master | |
id: install-r | |
with: | |
r-version: ${{ matrix.r }} | |
env: | |
NOT_CRAN: false | |
- name: Download source package | |
uses: actions/download-artifact@v4 | |
with: | |
name: package-source | |
path: . | |
- name: "Build and check binaries" | |
uses: r-universe-org/build-and-check@v1 | |
id: buildandcheck | |
timeout-minutes: 60 | |
env: | |
GITHUB_PAT: ${{secrets.GITHUB_TOKEN}} | |
with: | |
sourcepkg: ${{ needs.source.outputs.sourcepkg }} | |
java: ${{ needs.source.outputs.java }} | |
jags: ${{ needs.source.outputs.jags }} | |
cmdstan: ${{ needs.source.outputs.cmdstan }} | |
fortran: ${{ needs.source.outputs.fortran }} | |
- name: "Save binary package" | |
uses: r-universe-org/store-package@master | |
if: ${{ always() && steps.buildandcheck.outputs.binarypkg }} | |
with: | |
name: package-${{ matrix.os }}-${{ matrix.r }} | |
REPO_URL: ${{ needs.prepare.outputs.repo_url }} | |
REPO_REGISTERED: ${{ needs.prepare.outputs.repo_registered }} | |
JOB_STATUS: ${{ job.status }} | |
DISTRO: ${{ matrix.os }} | |
PACKAGE: ${{ needs.source.outputs.package }} | |
VERSION: ${{ needs.source.outputs.version }} | |
COMMITINFO: ${{ needs.source.outputs.commitinfo }} | |
MAINTAINERINFO: ${{ needs.source.outputs.maintainerinfo }} | |
FILE: ${{ steps.buildandcheck.outputs.binarypkg }} | |
TARGET: ${{ matrix.os }} | |
- name: "Cross compile for MacOS ARM64" | |
id: crossbuild | |
if: always() && runner.os == 'macos' && env.R_HOME_CROSS && needs.source.outputs.needcompile && steps.buildandcheck.outputs.binarypkg | |
uses: r-universe-org/build-and-check/macos-cross@v1 | |
with: | |
sourcepkg: ${{ needs.source.outputs.sourcepkg }} | |
- name: "Cross compile for MacOS ARM64" | |
if: always() && steps.crossbuild.outputs.binarypkg | |
with: | |
name: package-${{ matrix.os }}-cross-${{ matrix.r }} | |
REPO_URL: ${{ needs.prepare.outputs.repo_url }} | |
REPO_REGISTERED: ${{ needs.prepare.outputs.repo_registered }} | |
JOB_STATUS: ${{ job.status }} | |
DISTRO: ${{ matrix.os }} | |
PACKAGE: ${{ needs.source.outputs.package }} | |
VERSION: ${{ needs.source.outputs.version }} | |
COMMITINFO: ${{ needs.source.outputs.commitinfo }} | |
MAINTAINERINFO: ${{ needs.source.outputs.maintainerinfo }} | |
FILE: ${{ steps.crossbuild.outputs.binarypkg }} | |
TARGET: ${{ matrix.os }} | |
deploy: | |
name: Deploy to package server | |
runs-on: ubuntu-22.04 | |
needs: [prepare, source, binaries, wasm, docs] | |
if: ${{ always() && needs.source.outputs.package }} | |
outputs: | |
deployed_packages: ${{ steps.deployment.outputs.deployed_packages }} | |
steps: | |
- name: Get artifacts for deployment | |
uses: actions/download-artifact@v4 | |
- id: deployment | |
name: Upload packages to server | |
uses: r-universe-org/deploy-packages@master | |
env: | |
CRANLIKEURL: https://${{ github.event.repository.name }}.r-universe.dev/packages | |
CRANLIKEPWD: ${{ secrets.CRANLIKEPWD }} | |
SLACK_TOKEN: ${{ secrets.SLACK_TOKEN }} | |
PKGDOCS: ${{ needs.docs.result }} | |
SKIP_BINARIES: ${{ needs.prepare.outputs.skip_binaries }} | |
finalstatus: | |
name: Set Github Status | |
runs-on: ubuntu-22.04 | |
needs: [prepare, docs, source, deploy, pendingstatus] | |
if: always() | |
steps: | |
- name: Set upstream commit status | |
uses: r-universe-org/commit-status@master | |
env: | |
GH_APP_KEY: ${{ secrets.GH_APP_KEY }} | |
GITHUB_PAT: ${{secrets.GHPAT}} | |
with: | |
repo: ${{ needs.prepare.outputs.repo_url }} | |
sha: ${{ needs.prepare.outputs.repo_commit }} | |
url: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} | |
universe: ${{ github.event.repository.name }} | |
deployed_packages: ${{ needs.deploy.outputs.deployed_packages }} | |
source_status: ${{ needs.source.result }} | |
docs_status: ${{ needs.docs.result }} | |
ostype: ${{ needs.source.outputs.ostype }} | |
package: ${{ needs.prepare.outputs.repo_name }} | |
has_app: ${{ needs.prepare.outputs.universe_app }} | |
is_rebuild: ${{ needs.prepare.outputs.is_rebuild }} | |
# cleanup: | |
# runs-on: ubuntu-latest | |
# needs: [wasm] | |
# if: always() | |
# name: Cleanup caches | |
# permissions: | |
# actions: write | |
# contents: read | |
# steps: | |
# - name: actions-cache delete | |
# run: | | |
# gh extension install actions/gh-actions-cache | |
# gh actions-cache delete ${{ runner.os }}-${{ github.run_id }} --repo ${{ github.repository }} --branch ${{ github.ref }} --confirm | |
# env: | |
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |