Build Installers #2203
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: Build Installers | |
on: | |
schedule: | |
- cron: "0 4 * * *" | |
workflow_dispatch: | |
inputs: | |
publish-release: | |
description: "Publish Release" | |
required: false | |
type: boolean | |
default: true | |
pre-release: | |
description: "Pre-release" | |
required: false | |
type: boolean | |
default: true | |
draft: | |
description: "Draft" | |
required: false | |
type: boolean | |
default: false | |
jobs: | |
configure: | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{steps.config.outputs.version}}.${{ steps.config.outputs.build_number}} | |
version_base: ${{steps.config.outputs.version}} | |
tag_name: v${{steps.config.outputs.version}}.${{ steps.config.outputs.build_number }} | |
release: v${{steps.config.outputs.version}}.${{ steps.config.outputs.build_number }} | |
changes: ${{ steps.config.outputs.changes }} | |
if: github.event_name != 'schedule' || (github.event_name == 'schedule' && github.repository == 'quarto-dev/quarto-cli') | |
steps: | |
- name: Install libc6-div | |
run: sudo apt-get install libc6-dev | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: config | |
id: config | |
run: | | |
source ./configuration | |
CHANGES= | |
# CHANGES=$(git log $(git describe --tags --abbrev=0)..HEAD --oneline) | |
# Escape \n, \r to preserve multiline variable | |
# See https://github.community/t/set-output-truncates-multiline-strings/16852/2 | |
# CHANGES="${CHANGES//'%'/'%25'}" | |
# CHANGES="${CHANGES//$'\n'/'%0A'}" | |
# CHANGES="${CHANGES//$'\r'/'%0D'}" | |
# echo "changes=$CHANGES" >> $GITHUB_OUTPUT | |
QUARTO_BUILD_NUMBER=$(($QUARTO_BUILD_RUN_OFFSET + $GITHUB_RUN_NUMBER)) | |
echo "version=$QUARTO_VERSION" >> $GITHUB_OUTPUT | |
echo "changes=$CHANGES" >> $GITHUB_OUTPUT | |
echo "build_number=$QUARTO_BUILD_NUMBER" >> $GITHUB_OUTPUT | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: News | |
path: ./news/changelog-${{steps.config.outputs.version}}.md | |
make-source-tarball: | |
runs-on: ubuntu-latest | |
needs: [configure] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Make Tarball | |
run: | | |
tar -zcvf quarto-${{needs.configure.outputs.version}}.tar.gz * | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Source | |
path: ./quarto-${{needs.configure.outputs.version}}.tar.gz | |
make-tarball: | |
runs-on: ubuntu-latest | |
needs: [configure] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Configure | |
run: | | |
./configure.sh | |
- name: Prepare Distribution | |
run: | | |
pushd package/src/ | |
./quarto-bld prepare-dist --set-version ${{needs.configure.outputs.version}} --log-level info | |
popd | |
- name: Make Tarball | |
run: | | |
pushd package/ | |
mv pkg-working quarto-${{needs.configure.outputs.version}} | |
tar -cvf quarto-${{needs.configure.outputs.version}}-linux-amd64.tar quarto-${{needs.configure.outputs.version}} | |
gzip quarto-${{needs.configure.outputs.version}}-linux-amd64.tar | |
mv quarto-${{needs.configure.outputs.version}} pkg-working | |
popd | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Deb Zip | |
path: ./package/quarto-${{needs.configure.outputs.version}}-linux-amd64.tar.gz | |
make-arm64-tarball: | |
runs-on: ubuntu-latest | |
needs: [configure] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Configure | |
run: | | |
./configure.sh | |
- name: Prepare Distribution | |
run: | | |
pushd package/src/ | |
./quarto-bld prepare-dist --set-version ${{needs.configure.outputs.version}} --arch aarch64 --log-level info | |
popd | |
- name: Make Tarball | |
run: | | |
pushd package/ | |
mv pkg-working quarto-${{needs.configure.outputs.version}} | |
tar -cvf quarto-${{needs.configure.outputs.version}}-linux-arm64.tar quarto-${{needs.configure.outputs.version}} | |
gzip quarto-${{needs.configure.outputs.version}}-linux-arm64.tar | |
mv quarto-${{needs.configure.outputs.version}} pkg-working | |
popd | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Deb Arm64 Zip | |
path: ./package/quarto-${{needs.configure.outputs.version}}-linux-arm64.tar.gz | |
make-tarball-rhel: | |
runs-on: ubuntu-latest | |
needs: [configure] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Configure | |
run: | | |
./configure.sh | |
- name: Prepare Distribution | |
run: | | |
pushd package/src/ | |
./quarto-bld prepare-dist --set-version ${{needs.configure.outputs.version}} --log-level info | |
popd | |
- name: Move Custom Deno | |
run: | | |
source ./configuration | |
echo Placing custom Deno ${DENO:1}. See available versions at https://anaconda.org/conda-forge/deno/files | |
curl -L https://anaconda.org/conda-forge/deno/${DENO:1}/download/linux-64/deno-${DENO:1}-h2f28480_0.conda --output deno.conda | |
unzip deno.conda | |
tar --use-compress-program=unzstd -xvf pkg-deno-${DENO:1}-h2f28480_0.tar.zst | |
cp bin/deno package/pkg-working/bin/tools/deno-x86_64-unknown-linux-gnu/deno | |
- name: Make Tarball | |
run: | | |
pushd package/ | |
mv pkg-working quarto-${{needs.configure.outputs.version}} | |
tar -cvf quarto-${{needs.configure.outputs.version}}-linux-rhel7-amd64.tar quarto-${{needs.configure.outputs.version}} | |
gzip quarto-${{needs.configure.outputs.version}}-linux-rhel7-amd64.tar | |
mv quarto-${{needs.configure.outputs.version}} pkg-working | |
popd | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: RHEL Zip | |
path: ./package/quarto-${{needs.configure.outputs.version}}-linux-rhel7-amd64.tar.gz | |
make-installer-arm64-deb: | |
runs-on: ubuntu-latest | |
needs: [configure] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Configure | |
run: | | |
./configure.sh | |
- name: Prepare Distribution | |
run: | | |
pushd package/src/ | |
./quarto-bld prepare-dist --set-version ${{needs.configure.outputs.version}} --arch aarch64 --log-level info | |
popd | |
- name: Make Installer | |
run: | | |
pushd package/src/ | |
./quarto-bld make-installer-deb --set-version ${{needs.configure.outputs.version}} --arch aarch64 --log-level info | |
popd | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Deb Arm64 Installer | |
path: ./package/out/quarto-${{needs.configure.outputs.version}}-linux-arm64.deb | |
make-installer-deb: | |
runs-on: ubuntu-latest | |
needs: [configure] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Configure | |
run: | | |
./configure.sh | |
- name: Prepare Distribution | |
run: | | |
pushd package/src/ | |
./quarto-bld prepare-dist --set-version ${{needs.configure.outputs.version}} --log-level info | |
popd | |
- name: Make Installer | |
run: | | |
pushd package/src/ | |
./quarto-bld make-installer-deb --set-version ${{needs.configure.outputs.version}} --log-level info | |
popd | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Deb Installer | |
path: ./package/out/quarto-${{needs.configure.outputs.version}}-linux-amd64.deb | |
test-tarball-linux: | |
runs-on: ubuntu-latest | |
needs: [configure, make-tarball] | |
steps: | |
- uses: actions/download-artifact@master | |
with: | |
name: Deb Zip | |
path: . | |
- run: | | |
tar -zxf quarto-${{needs.configure.outputs.version}}-linux-amd64.tar.gz | |
echo "$GITHUB_WORKSPACE/quarto-${{needs.configure.outputs.version}}/bin" >> $GITHUB_PATH | |
- run: | | |
ls -R | |
echo $PATH | |
quarto check | |
quarto --paths | |
quarto --version | |
make-installer-win: | |
runs-on: windows-latest | |
needs: [configure] | |
steps: | |
- uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: 1.63.0 | |
override: true | |
components: rustfmt, clippy | |
- uses: actions/checkout@v3 | |
- name: Configure | |
run: | | |
.\configure.cmd | |
- name: Prepare Distribution | |
run: | | |
pushd package\src\ | |
.\quarto-bld.cmd prepare-dist --set-version ${{needs.configure.outputs.version}} --log-level info | |
popd | |
- name: Build Launcher | |
run: | | |
cargo build --release --all-features --manifest-path package/launcher/Cargo.toml | |
cp package/launcher/target/release/quarto.exe package/pkg-working/bin/quarto.exe | |
- name: Make Installer | |
run: | | |
pushd package\src\ | |
.\quarto-bld.cmd make-installer-win --set-version ${{needs.configure.outputs.version}} --log-level debug | |
popd | |
env: | |
QUARTO_WIN_PFX: ${{ secrets.WIN_PFX }} | |
QUARTO_WIN_PFX_PW: ${{ secrets.WIN_PFX_PW }} | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Windows Installer | |
path: ./package/out/quarto-${{needs.configure.outputs.version}}-win.msi | |
- name: Upload Zip | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Windows Zip | |
path: ./package/out/quarto-${{needs.configure.outputs.version}}-win.zip | |
test-zip-win: | |
runs-on: windows-latest | |
needs: [configure, make-installer-win] | |
steps: | |
- uses: actions/download-artifact@master | |
with: | |
name: Windows Zip | |
path: . | |
- run: | | |
tar -xf quarto-${{needs.configure.outputs.version}}-win.zip | |
- run: Add-Content $env:GITHUB_PATH "$env:GITHUB_WORKSPACE\bin" | |
- run: | | |
quarto check | |
quarto --paths | |
quarto --version | |
make-installer-mac: | |
runs-on: macos-latest | |
needs: [configure] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Configure | |
run: | | |
./configure.sh | |
- uses: ./.github/workflows/actions/keychain | |
with: | |
certificate-value: ${{ secrets.APPLE_SIGN_P12 }} | |
certificate-password: ${{ secrets.APPLE_SIGN_PW }} | |
keychain: "build.keychain" | |
keychain-pw: ${{ secrets.APPLE_KEYCHAIN_PW }} | |
certificate-file: certificate.p12 | |
- uses: ./.github/workflows/actions/keychain | |
with: | |
certificate-value: ${{ secrets.APPLE_INSTALLER_P12 }} | |
certificate-password: ${{ secrets.APPLE_INSTALLER_PW }} | |
keychain: "build.keychain" | |
keychain-pw: ${{ secrets.APPLE_KEYCHAIN_PW }} | |
certificate-file: installer.p12 | |
- name: Prepare Distribution | |
run: | | |
security find-identity | |
security find-certificate -a | |
pushd package/src/ | |
./quarto-bld prepare-dist --set-version ${{needs.configure.outputs.version}} --log-level info | |
popd | |
- name: Make Installer | |
run: | | |
pushd package/src/ | |
./quarto-bld make-installer-mac --set-version ${{needs.configure.outputs.version}} --log-level info | |
popd | |
env: | |
QUARTO_APPLE_APP_DEV_ID: ${{ secrets.APPLE_SIGN_ID }} | |
QUARTO_APPLE_INST_DEV_ID: ${{ secrets.APPLE_INSTALLER_ID }} | |
QUARTO_APPLE_CONNECT_UN: ${{ secrets.APPLE_CONNECT_UN }} | |
QUARTO_APPLE_CONNECT_PW: ${{ secrets.APPLE_CONNECT_PW }} | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Mac Installer | |
path: ./package/out/quarto-${{needs.configure.outputs.version}}-macos.pkg | |
- name: Upload Zip | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Mac Zip | |
path: ./package/out/quarto-${{needs.configure.outputs.version}}-macos.tar.gz | |
- name: Cleanup Keychain | |
if: ${{ always() }} | |
run: | | |
security delete-keychain build.keychain | |
test-zip-mac: | |
runs-on: macos-latest | |
needs: [configure, make-installer-mac] | |
steps: | |
- uses: actions/download-artifact@master | |
with: | |
name: Mac Zip | |
path: . | |
- run: | | |
tar -zxf quarto-${{needs.configure.outputs.version}}-macos.tar.gz | |
echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH | |
- run: ls -R | |
- run: echo $PATH | |
- run: | | |
quarto check | |
quarto --paths | |
quarto --version | |
publish-release: | |
if: ${{ inputs.publish-release }} | |
runs-on: ubuntu-latest | |
needs: | |
[ | |
configure, | |
make-installer-deb, | |
make-installer-arm64-deb, | |
make-installer-win, | |
make-installer-mac, | |
make-tarball-rhel, | |
make-arm64-tarball, | |
make-tarball, | |
make-source-tarball, | |
test-zip-win, | |
test-zip-mac, | |
test-tarball-linux, | |
] | |
steps: | |
- name: Download Artifacts | |
uses: actions/download-artifact@v3 | |
- name: Create Release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{needs.configure.outputs.tag_name}} | |
release_name: ${{needs.configure.outputs.release}} | |
body: | | |
${{ needs.configure.outputs.changes }} | |
draft: ${{ inputs.draft }} | |
prerelease: ${{ inputs.pre-release }} | |
- name: Attach Source Tarball | |
id: attach-source-tarball | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./Source/quarto-${{needs.configure.outputs.version}}.tar.gz | |
asset_name: quarto-${{needs.configure.outputs.version}}.tar.gz | |
asset_content_type: application/gzip | |
- name: Attach Release Tarball | |
id: attach-release-tarball | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./Deb Zip/quarto-${{needs.configure.outputs.version}}-linux-amd64.tar.gz | |
asset_name: quarto-${{needs.configure.outputs.version}}-linux-amd64.tar.gz | |
asset_content_type: application/gzip | |
- name: Attach Arm64 Release Tarball | |
id: attach-arm4-release-tarball | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./Deb Arm64 Zip/quarto-${{needs.configure.outputs.version}}-linux-arm64.tar.gz | |
asset_name: quarto-${{needs.configure.outputs.version}}-linux-arm64.tar.gz | |
asset_content_type: application/gzip | |
- name: Attach RHEL Tarball | |
id: attach-rhel-tarball | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./RHEL Zip/quarto-${{needs.configure.outputs.version}}-linux-rhel7-amd64.tar.gz | |
asset_name: quarto-${{needs.configure.outputs.version}}-linux-rhel7-amd64.tar.gz | |
asset_content_type: application/gzip | |
- name: Attach Debian Installer | |
id: attach-deb-installer | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./Deb Installer/quarto-${{needs.configure.outputs.version}}-linux-amd64.deb | |
asset_name: quarto-${{needs.configure.outputs.version}}-linux-amd64.deb | |
asset_content_type: application/deb | |
- name: Attach Arm64 Debian Installer | |
id: attach-arm64-deb-installer | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./Deb Arm64 Installer/quarto-${{needs.configure.outputs.version}}-linux-arm64.deb | |
asset_name: quarto-${{needs.configure.outputs.version}}-linux-arm64.deb | |
asset_content_type: application/deb | |
- name: Attach Windows Installer | |
id: attach-win-installer | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./Windows Installer/quarto-${{needs.configure.outputs.version}}-win.msi | |
asset_name: quarto-${{needs.configure.outputs.version}}-win.msi | |
asset_content_type: application/msi | |
- name: Attach Windows Zip | |
id: attach-win-zip | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./Windows Zip/quarto-${{needs.configure.outputs.version}}-win.zip | |
asset_name: quarto-${{needs.configure.outputs.version}}-win.zip | |
asset_content_type: application/pkg | |
- name: Attach Mac Installer | |
id: attach-mac-installer | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./Mac Installer/quarto-${{needs.configure.outputs.version}}-macos.pkg | |
asset_name: quarto-${{needs.configure.outputs.version}}-macos.pkg | |
asset_content_type: application/pkg | |
- name: Attach Mac Zip | |
id: attach-mac-zip | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./Mac Zip/quarto-${{needs.configure.outputs.version}}-macos.tar.gz | |
asset_name: quarto-${{needs.configure.outputs.version}}-macos.tar.gz | |
asset_content_type: application/pkg | |
- name: Attach News | |
id: attach-news | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./News/changelog-${{needs.configure.outputs.version_base}}.md | |
asset_name: changelog.md | |
asset_content_type: text/markdown | |
- name: Generate Checksums | |
id: generate_checksum | |
run: | | |
pushd Windows\ Installer | |
sha256sum quarto-${{needs.configure.outputs.version}}-win.msi >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt | |
popd | |
pushd Windows\ Zip | |
sha256sum quarto-${{needs.configure.outputs.version}}-win.zip >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt | |
popd | |
pushd Mac\ Zip | |
sha256sum quarto-${{needs.configure.outputs.version}}-macos.tar.gz >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt | |
popd | |
pushd Mac\ Installer | |
sha256sum quarto-${{needs.configure.outputs.version}}-macos.pkg >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt | |
popd | |
pushd RHEL\ Zip | |
sha256sum quarto-${{needs.configure.outputs.version}}-linux-rhel7-amd64.tar.gz >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt | |
popd | |
pushd Deb\ Zip | |
sha256sum quarto-${{needs.configure.outputs.version}}-linux-amd64.tar.gz >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt | |
popd | |
pushd Deb\ Arm64\ Zip | |
sha256sum quarto-${{needs.configure.outputs.version}}-linux-arm64.tar.gz >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt | |
popd | |
pushd Deb\ Installer | |
sha256sum quarto-${{needs.configure.outputs.version}}-linux-amd64.deb >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt | |
popd | |
pushd Deb\ Arm64\ Installer | |
sha256sum quarto-${{needs.configure.outputs.version}}-linux-arm64.deb >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt | |
popd | |
pushd Source | |
sha256sum quarto-${{needs.configure.outputs.version}}.tar.gz >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt | |
popd | |
- name: Attach Checksum | |
id: attach-checksum | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: quarto-${{needs.configure.outputs.version}}-checksums.txt | |
asset_name: quarto-${{needs.configure.outputs.version}}-checksums.txt | |
asset_content_type: text/plain | |
docker-push: | |
if: ${{ inputs.publish-release }} | |
runs-on: ubuntu-latest | |
needs: [configure, publish-release] | |
steps: | |
- name: Download Artifacts | |
uses: actions/download-artifact@v3 | |
- uses: quarto-dev/quarto-cli/.github/actions/docker@main | |
with: | |
source: ./Deb Installer/quarto-${{needs.configure.outputs.version}}-linux-amd64.deb | |
version: ${{needs.configure.outputs.version}} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
username: ${{ github.actor }} | |
org: ${{ github.repository_owner }} | |
name: quarto | |
daily: ${{ inputs.pre-release }} |