Skip to content

deploy cross packages #1

deploy cross packages

deploy cross packages #1

Workflow file for this run

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 }}