ci: update upload-artifact to v4.3.0 and download-artifact to v4.1.1 (#1399)

* ci: update upload-artifact to v4.3.0 and download-artifact to v4.1.1

* fix rpm/deb

* add exception for quay; idk what I'll do once node support is gone

* fix broken script

* fix download

* migrate 2-17 to cirrus to avoid node deprecation warnings

* prevent cirrus cancellation

* update cache to work with linux

* simplify cache

* update some comments

* add timeouts
This commit is contained in:
Clement Tsang 2024-01-28 18:11:05 -05:00 committed by GitHub
parent a377e93ecc
commit db9e97a0df
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 51 additions and 38 deletions

View File

@ -15,15 +15,16 @@ cache_template: &CACHE_TEMPLATE
folder: $HOME/.cargo/registry folder: $HOME/.cargo/registry
reupload_on_changes: "true" reupload_on_changes: "true"
fingerprint_script: fingerprint_script:
- md5 Cargo.lock - $HOME/.cargo/bin/rustc --version
- cat Cargo.lock
- echo $CIRRUS_OS - echo $CIRRUS_OS
- echo $CIRRUS_TASK_NAME - echo $CIRRUS_TASK_NAME
target_cache: target_cache:
folder: target folder: target
reupload_on_changes: "true" reupload_on_changes: "true"
fingerprint_script: fingerprint_script:
- . $HOME/.cargo/env && rustc --version - $HOME/.cargo/bin/rustc --version
- md5 Cargo.lock - cat Cargo.lock
- echo $CIRRUS_OS - echo $CIRRUS_OS
- echo $CIRRUS_TASK_NAME - echo $CIRRUS_TASK_NAME
@ -39,7 +40,7 @@ env:
CARGO_HUSKY_DONT_INSTALL_HOOKS: "true" CARGO_HUSKY_DONT_INSTALL_HOOKS: "true"
test_task: test_task:
auto_cancellation: $CIRRUS_BRANCH != "main" auto_cancellation: "false" # We set this to false to prevent nightly builds from affecting this
only_if: $CIRRUS_BUILD_SOURCE != "api" && ($CIRRUS_BRANCH == "main" || $CIRRUS_PR != "") only_if: $CIRRUS_BUILD_SOURCE != "api" && ($CIRRUS_BRANCH == "main" || $CIRRUS_PR != "")
timeout_in: "20m" timeout_in: "20m"
skip: "!changesInclude('.cargo/**', '.cirrus.yml', 'sample_configs/**', 'src/**', 'tests/**', 'build.rs', 'Cargo.lock', 'Cargo.toml', 'clippy.toml', 'rustfmt.toml')" skip: "!changesInclude('.cargo/**', '.cirrus.yml', 'sample_configs/**', 'src/**', 'tests/**', 'build.rs', 'Cargo.lock', 'Cargo.toml', 'clippy.toml', 'rustfmt.toml')"
@ -100,6 +101,13 @@ build_task:
env: env:
TARGET: "aarch64-apple-darwin" TARGET: "aarch64-apple-darwin"
NAME: "aarch64-apple-darwin" NAME: "aarch64-apple-darwin"
- name: "Legacy Linux (2.17)"
alias: "linux_2_17_build"
container:
image: quay.io/pypa/manylinux2014_x86_64
env:
TARGET: "x86_64-unknown-linux-gnu"
NAME: "x86_64-unknown-linux-gnu-2-17"
<<: *SETUP_TEMPLATE <<: *SETUP_TEMPLATE
<<: *CACHE_TEMPLATE <<: *CACHE_TEMPLATE
build_script: build_script:

View File

@ -46,13 +46,6 @@ jobs:
cross: false, cross: false,
generate-other-artifacts: true, generate-other-artifacts: true,
} }
- {
os: "ubuntu-20.04",
target: "x86_64-unknown-linux-gnu",
cross: false,
container: quay.io/pypa/manylinux2014_x86_64,
suffix: "2-17",
}
- { - {
os: "ubuntu-20.04", os: "ubuntu-20.04",
target: "i686-unknown-linux-gnu", target: "i686-unknown-linux-gnu",
@ -211,15 +204,16 @@ jobs:
cp ./desktop/bottom.desktop release/ cp ./desktop/bottom.desktop release/
- name: Save release as artifact - name: Save release as artifact
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
with: with:
retention-days: 3 retention-days: 3
name: release name: "release-${{ matrix.info.target }}${{ matrix.info.suffix }}"
path: release path: release
build-msi: build-msi:
name: "Build MSI installer" name: "Build MSI installer"
runs-on: "windows-2019" runs-on: "windows-2019"
timeout-minutes: 30
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -257,15 +251,16 @@ jobs:
mv bottom_x86_64_installer.msi release/ mv bottom_x86_64_installer.msi release/
- name: Save release as artifact - name: Save release as artifact
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
with: with:
retention-days: 3 retention-days: 3
name: release name: "release-build-msi"
path: release path: release
build-cirrus: build-cirrus:
name: "Build using Cirrus CI" name: "Build using Cirrus CI"
runs-on: "ubuntu-latest" runs-on: "ubuntu-latest"
timeout-minutes: 30
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -289,15 +284,16 @@ jobs:
python ./scripts/cirrus/build.py "$BRANCH" "release/" "${{ inputs.caller }}" python ./scripts/cirrus/build.py "$BRANCH" "release/" "${{ inputs.caller }}"
- name: Save release as artifact - name: Save release as artifact
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
with: with:
retention-days: 3 retention-days: 3
name: release name: release-build-cirrus
path: release path: release
build-deb: build-deb:
name: "Build .deb software packages" name: "Build .deb software packages"
runs-on: "ubuntu-20.04" runs-on: "ubuntu-20.04"
timeout-minutes: 30
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@ -410,16 +406,17 @@ jobs:
mv ${{ steps.verify.outputs.DEB_FILE }} release/ mv ${{ steps.verify.outputs.DEB_FILE }} release/
- name: Save release as artifact - name: Save release as artifact
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
with: with:
retention-days: 3 retention-days: 3
name: release name: release-build-deb-${{ matrix.info.target }}
path: release path: release
build-rpm: build-rpm:
name: "Build .rpm software packages" name: "Build .rpm software packages"
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: ghcr.io/clementtsang/almalinux-8 container: ghcr.io/clementtsang/almalinux-8
timeout-minutes: 30
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@ -494,8 +491,8 @@ jobs:
mv ${{ steps.verify.outputs.RPM_FILE }} release/ mv ${{ steps.verify.outputs.RPM_FILE }} release/
- name: Save release as artifact - name: Save release as artifact
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
with: with:
retention-days: 3 retention-days: 3
name: release name: release-build-rpm-${{ matrix.info.target }}
path: release path: release

View File

@ -1,6 +1,7 @@
# How we deploy a release. Covers binary builds. Also manages packaging for choco. # How we deploy a release. Covers binary builds. Also manages packaging for choco.
# #
# Based on https://github.com/BurntSushi/ripgrep/blob/master/.github/workflows/release.yml # Binaries are primarily built by GHA, though some Linux, M1 macOS, and FreeBSD builds are
# handled by CirrusCI.
name: deployment name: deployment
@ -67,10 +68,11 @@ jobs:
echo "Release version: ${{ env.RELEASE_VERSION }}" echo "Release version: ${{ env.RELEASE_VERSION }}"
- name: Get release artifacts - name: Get release artifacts
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1
with: with:
name: release pattern: release-*
path: release path: release
merge-multiple: true
- name: Execute choco packaging script - name: Execute choco packaging script
run: | run: |
@ -83,10 +85,10 @@ jobs:
mv choco.zip release/ mv choco.zip release/
- name: Save release as artifact - name: Save release as artifact
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
with: with:
retention-days: 3 retention-days: 3
name: release name: release-choco
path: release path: release
upload-release: upload-release:
@ -104,17 +106,18 @@ jobs:
echo "Release version: ${{ env.RELEASE_VERSION }}" echo "Release version: ${{ env.RELEASE_VERSION }}"
- name: Get release artifacts - name: Get release artifacts
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1
with: with:
name: release pattern: release-*
path: release path: release
merge-multiple: true
- name: Print out all release files - name: Print out all release files
run: | run: |
echo "Generated $(ls ./release | wc -l) files:" echo "Generated $(ls ./release | wc -l) files:"
du -h -d 0 ./release/* du -h -d 0 ./release/*
- name: Upload all saved release files - name: Create release and add release files
uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # 0.1.15 uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # 0.1.15
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -49,10 +49,11 @@ jobs:
needs: [build-release] needs: [build-release]
steps: steps:
- name: Get release artifacts - name: Get release artifacts
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1
with: with:
name: release pattern: release-*
path: release path: release
merge-multiple: true
- name: Print out all release files - name: Print out all release files
run: | run: |
@ -72,7 +73,7 @@ jobs:
run: sleep 10 run: sleep 10
if: github.event.inputs.isMock != 'mock' if: github.event.inputs.isMock != 'mock'
- name: Upload all saved release files if not mock - name: Add all release files to nightly release if not mock
uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # 0.1.15 uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # 0.1.15
if: github.event.inputs.isMock != 'mock' if: github.event.inputs.isMock != 'mock'
with: with:

View File

@ -4,6 +4,8 @@
# through Cirrus CI's GraphQL interface. # through Cirrus CI's GraphQL interface.
# #
# Expects the Cirrus CI API key to be set in the CIRRUS_KEY environment variable. # Expects the Cirrus CI API key to be set in the CIRRUS_KEY environment variable.
#
# TODO: Explain this in docs how the heck this works.
import os import os
import json import json
@ -12,16 +14,18 @@ import traceback
from textwrap import dedent from textwrap import dedent
from time import sleep, time from time import sleep, time
from pathlib import Path from pathlib import Path
from typing import Optional from typing import List, Optional, Tuple
from urllib.request import Request, urlopen, urlretrieve from urllib.request import Request, urlopen, urlretrieve
URL = "https://api.cirrus-ci.com/graphql" # Form of each task is (TASK_ALIAS, FILE_NAME).
TASKS = [ TASKS: List[Tuple[str, str]] = [
("freebsd_12_3_build", "bottom_x86_64-unknown-freebsd-13-2.tar.gz"), ("freebsd_13_2_build", "bottom_x86_64-unknown-freebsd-13-2.tar.gz"),
("freebsd_13_1_build", "bottom_x86_64-unknown-freebsd-14-0.tar.gz"), ("freebsd_14_0_build", "bottom_x86_64-unknown-freebsd-14-0.tar.gz"),
("macos_build", "bottom_aarch64-apple-darwin.tar.gz"), ("macos_build", "bottom_aarch64-apple-darwin.tar.gz"),
("linux_2_17_build", "bottom_x86_64-unknown-linux-gnu-2-17.tar.gz"),
] ]
URL = "https://api.cirrus-ci.com/graphql"
DL_URL_TEMPLATE = "https://api.cirrus-ci.com/v1/artifact/build/%s/%s/binaries/%s" DL_URL_TEMPLATE = "https://api.cirrus-ci.com/v1/artifact/build/%s/%s/binaries/%s"
@ -104,7 +108,7 @@ def check_build_status(key: str, id: str) -> Optional[str]:
def try_download(build_id: str, dl_path: Path): def try_download(build_id: str, dl_path: Path):
for task, file in TASKS: for task, file in TASKS:
url = DL_URL_TEMPLATE % (build_id, task, file) url = DL_URL_TEMPLATE % (build_id, task, file)
out = dl_path / file out = os.path.join(dl_path, file)
print("Downloading {} to {}".format(file, out)) print("Downloading {} to {}".format(file, out))
urlretrieve(url, out) urlretrieve(url, out)