diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 31f92bb8..3a11602f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,7 @@ name: Release permissions: - contents: write + contents: write # This task will run whenever you push a git tag that looks like a version # like "v1", "v1.2.0", "v0.1.0-prerelease01", "my-app-v1.0.0", etc. @@ -40,140 +40,153 @@ permissions: # If there's a prerelease-style suffix to the version then the Github Release™ # will be marked as a prerelease. on: - push: - tags: - - "*-?v[0-9]+*" + push: + tags: + - "*-?v[0-9]+*" jobs: - # Create the Github Release™ so the packages have something to be uploaded to - create-release: - if: github.repository == 'bottlerocket-os/twoliter' - environment: release - runs-on: - group: bottlerocket - labels: bottlerocket_ubuntu-latest_16-core - outputs: - has-releases: ${{ steps.create-release.outputs.has-releases }} - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GITHUB_REF_NAME: ${{ github.ref_name }} - steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - name: Install crane for testing - uses: ./.github/actions/install-crane + # Create the Github Release™ so the packages have something to be uploaded to + create-release: + if: github.repository == 'cbgbt/twoliter' + environment: release + runs-on: ubuntu-latest + outputs: + has-releases: ${{ steps.create-release.outputs.has-releases }} env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Install cargo-dist - run: | - cargo install --locked \ - --git "https://github.com/webern/cargo-dist" \ - --rev "3dcbe823db0c4068f38db790d996a4af54e68b3e" - - id: create-release - run: | - export PATH=$CARGO_HOME/bin:$PATH - cargo dist plan --tag="${GITHUB_REF_NAME}" --output-format=json > dist-manifest.json - echo "dist plan ran successfully" - cat dist-manifest.json + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_REF_NAME: ${{ github.ref_name }} + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Install crane for testing + uses: ./.github/actions/install-crane + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Install cargo-dist + run: | + cargo install --locked \ + --git "https://github.com/webern/cargo-dist" \ + --rev "3dcbe823db0c4068f38db790d996a4af54e68b3e" + - id: create-release + run: | + export PATH=$CARGO_HOME/bin:$PATH + cargo dist plan --tag="${GITHUB_REF_NAME}" --output-format=json > dist-manifest.json + echo "dist plan ran successfully" + cat dist-manifest.json - # Create the Github Release™ based on what cargo-dist thinks it should be - ANNOUNCEMENT_TITLE=$(jq --raw-output ".announcement_title" dist-manifest.json) - IS_PRERELEASE=$(jq --raw-output ".announcement_is_prerelease" dist-manifest.json) - jq --raw-output ".announcement_github_body" dist-manifest.json > new_dist_announcement.md - gh release create "${GITHUB_REF_NAME}" --draft --prerelease="$IS_PRERELEASE" --title="$ANNOUNCEMENT_TITLE" --notes-file=new_dist_announcement.md - echo "created announcement!" + # Create the Github Release™ based on what cargo-dist thinks it should be + ANNOUNCEMENT_TITLE=$(jq --raw-output ".announcement_title" dist-manifest.json) + IS_PRERELEASE=$(jq --raw-output ".announcement_is_prerelease" dist-manifest.json) + jq --raw-output ".announcement_github_body" dist-manifest.json > new_dist_announcement.md + gh release create "${GITHUB_REF_NAME}" --draft --prerelease="$IS_PRERELEASE" --title="$ANNOUNCEMENT_TITLE" --notes-file=new_dist_announcement.md + echo "created announcement!" - # Upload the manifest to the Github Release™ - gh release upload "${GITHUB_REF_NAME}" dist-manifest.json - echo "uploaded manifest!" + # Upload the manifest to the Github Release™ + gh release upload "${GITHUB_REF_NAME}" dist-manifest.json + echo "uploaded manifest!" - # Disable all the upload-artifacts tasks if we have no actual releases - HAS_RELEASES=$(jq --raw-output ".releases != null" dist-manifest.json) - echo "has-releases=$HAS_RELEASES" >> "$GITHUB_OUTPUT" + # Disable all the upload-artifacts tasks if we have no actual releases + HAS_RELEASES=$(jq --raw-output ".releases != null" dist-manifest.json) + echo "has-releases=$HAS_RELEASES" >> "$GITHUB_OUTPUT" - # Build and packages all the things - upload-artifacts: - # Let the initial task tell us to not run (currently very blunt) - needs: create-release - if: >- - ${{ needs.create-release.outputs.has-releases == 'true' - && github.repository == 'bottlerocket-os/twoliter' - }} - strategy: - fail-fast: false - matrix: - # For these target platforms - include: - - dist-args: "--artifacts=local --target=x86_64-unknown-linux-musl" - install-dist: | - cargo install --locked \ - --git "https://github.com/webern/cargo-dist" \ - --rev "3dcbe823db0c4068f38db790d996a4af54e68b3e" - - dist-args: "--artifacts=local --target=aarch64-unknown-linux-musl" - install-dist: | - cargo install --locked \ - --git "https://github.com/webern/cargo-dist" \ - --rev "3dcbe823db0c4068f38db790d996a4af54e68b3e" - runs-on: - group: bottlerocket - labels: bottlerocket_ubuntu-latest_16-core - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - MATRIX_DIST_ARGS: ${{ matrix.dist-args }} - GITHUB_REF_NAME: ${{ github.ref_name }} - steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - name: Install cargo-dist - run: ${{ matrix.install-dist }} - - name: Install Cross - # Pin cargo cross to a version that we know is working for us. - run: | - cargo install cross --git https://github.com/cross-rs/cross/ --rev 7b79041 --locked - - name: Run cargo-dist - # This logic is a bit janky because it's trying to be a polyglot between - # powershell and bash since this will run on windows, macos, and linux! - # The two platforms don't agree on how to talk about env vars but they - # do agree on 'cat' and '$()' so we use that to marshal values between commands. - run: | - export PATH=$CARGO_HOME/bin:$PATH - # Actually do builds and make zips and whatnot - cargo dist build --tag="${GITHUB_REF_NAME}" --output-format=json ${MATRIX_DIST_ARGS} > dist-manifest.json - echo "dist ran successfully" - cat dist-manifest.json + # Build and packages all the things + upload-artifacts: + # Let the initial task tell us to not run (currently very blunt) + needs: create-release + if: >- + ${{ needs.create-release.outputs.has-releases == 'true' + && github.repository == 'cbgbt/twoliter' + }} + strategy: + fail-fast: false + matrix: + # For these target platforms + include: + - dist-args: "--artifacts=local --target=x86_64-unknown-linux-musl" + install-dist: | + cargo install --locked \ + --git "https://github.com/webern/cargo-dist" \ + --rev "3dcbe823db0c4068f38db790d996a4af54e68b3e" + - dist-args: "--artifacts=local --target=aarch64-unknown-linux-musl" + install-dist: | + cargo install --locked \ + --git "https://github.com/webern/cargo-dist" \ + --rev "3dcbe823db0c4068f38db790d996a4af54e68b3e" + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MATRIX_DIST_ARGS: ${{ matrix.dist-args }} + GITHUB_REF_NAME: ${{ github.ref_name }} + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Install cargo-dist + run: ${{ matrix.install-dist }} + - name: Install Cross + # Pin cargo cross to a version that we know is working for us. + run: | + cargo install cross --git https://github.com/cross-rs/cross/ --rev 7b79041 --locked + - name: Run cargo-dist + # This logic is a bit janky because it's trying to be a polyglot between + # powershell and bash since this will run on windows, macos, and linux! + # The two platforms don't agree on how to talk about env vars but they + # do agree on 'cat' and '$()' so we use that to marshal values between commands. + run: | + export PATH=$CARGO_HOME/bin:$PATH + # Actually do builds and make zips and whatnot + cargo dist build --tag="${GITHUB_REF_NAME}" --output-format=json ${MATRIX_DIST_ARGS} > dist-manifest.json + echo "dist ran successfully" + cat dist-manifest.json + + # Parse out what we just built and upload it to the Github Release™ + jq --raw-output ".artifacts[]?.path | select( . != null )" dist-manifest.json > uploads.txt + echo "uploading..." + cat uploads.txt + gh release upload "${GITHUB_REF_NAME}" $(cat uploads.txt) + echo "uploaded!" - # Parse out what we just built and upload it to the Github Release™ - jq --raw-output ".artifacts[]?.path | select( . != null )" dist-manifest.json > uploads.txt - echo "uploading..." - cat uploads.txt - gh release upload "${GITHUB_REF_NAME}" $(cat uploads.txt) - echo "uploaded!" - - name: Upload attributions - run: | - make attributions - gh release upload "${GITHUB_REF_NAME}" twoliter-attributions.tar.gz + # Upload dependency attributions + upload-attributions: + needs: [create-release, upload-artifacts] + if: >- + ${{ needs.create-release.outputs.has-releases == 'true' + && github.repository == 'cbgbt/twoliter' + }} + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_REF_NAME: ${{ github.ref_name }} - # Mark the Github Release™ as a non-draft now that everything has succeeded! - publish-release: - # Only run after all the other tasks, but it's ok if upload-artifacts was skipped - needs: [create-release, upload-artifacts] - if: >- - ${{ github.repository == 'bottlerocket-os/twoliter' - && always() - && needs.create-release.result == 'success' - && (needs.upload-artifacts.result == 'skipped' - || needs.upload-artifacts.result == 'success') - }} - runs-on: ubuntu-latest - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GITHUB_REF_NAME: ${{ github.ref_name }} - steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - name: mark release as non-draft - run: | - gh release edit "${GITHUB_REF_NAME}" --draft=false + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Upload attributions + run: | + make attributions + gh release upload "${GITHUB_REF_NAME}" twoliter-attributions.tar.gz + + # Mark the Github Release™ as a non-draft now that everything has succeeded! + publish-release: + # Only run after all the other tasks, but it's ok if upload-artifacts was skipped + needs: [create-release, upload-artifacts, upload-attributions] + if: >- + ${{ github.repository == 'cbgbt/twoliter' + && always() + && needs.create-release.result == 'success' + && (needs.upload-artifacts.result == 'skipped' + || needs.upload-artifacts.result == 'success') + }} + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_REF_NAME: ${{ github.ref_name }} + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: mark release as non-draft + run: | + gh release edit "${GITHUB_REF_NAME}" --draft=false diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 279ab919..d8087836 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -10,9 +10,7 @@ on: - "**.svg" jobs: build: - runs-on: - group: bottlerocket - labels: bottlerocket_ubuntu-latest_16-core + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install crane for testing diff --git a/Cargo.lock b/Cargo.lock index 4553ddc0..eadb40fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3841,7 +3841,7 @@ dependencies = [ [[package]] name = "twoliter" -version = "0.4.6" +version = "0.4.7" dependencies = [ "anyhow", "async-recursion", diff --git a/twoliter/Cargo.toml b/twoliter/Cargo.toml index 68d02333..d9825cdb 100644 --- a/twoliter/Cargo.toml +++ b/twoliter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "twoliter" -version = "0.4.6" +version = "0.4.7" edition = "2021" description = "A command line tool for creating custom builds of Bottlerocket" authors = ["Matthew James Briggs "]