index : static-web-server.git

ascending towards madness

author Jose Quintana <joseluisquintana20@gmail.com> 2022-10-20 23:43:54.0 +00:00:00
committer Jose Quintana <joseluisquintana20@gmail.com> 2022-10-20 23:43:54.0 +00:00:00
commit
b921fbd68c48ac1befc22a5fac83ae47eaf64019 [patch]
tree
a73d58fc6eed211f2ba5feab16d44956ada1e437
parent
5e76947e6033c9759a9d3abd3e07024caff54e4f
download
b921fbd68c48ac1befc22a5fac83ae47eaf64019.tar.gz

refactor: ci matrix for freebsd releases



Diff

 .cirrus.yml               | 128 ++++++++++++++++++-----------------------------
 ci/upload_release_file.sh |  41 +++++++++++++++-
 2 files changed, 91 insertions(+), 78 deletions(-)

diff --git a/.cirrus.yml b/.cirrus.yml
index 228d6b0..eb31a9e 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -49,86 +49,58 @@ task:
          cargo build --verbose --target i686-unknown-freebsd

task:
  name: freebsd-release
  only_if: $CIRRUS_TAG != ''
  env:
    RUSTFLAGS: -Dwarnings
    GITHUB_TOKEN: ENCRYPTED[d1766ef328d83729917d2ffb875d64c35d1c0177edf8f32e66ec464daf5c1b7b145d65fc6c044a73fffe2235d3b38349]
  setup_script:
    - pkg install -y bash curl jq
    - curl https://sh.rustup.rs -sSf --output rustup.sh
    - sh rustup.sh -y --profile minimal --default-toolchain stable
    - . $HOME/.cargo/env
    - rustup target add i686-unknown-freebsd
    - |
      echo "~~~~ rustc --version ~~~~"
      rustc --version
  build_script: |
    . $HOME/.cargo/env
    cargo build --verbose --release --target=x86_64-unknown-freebsd
    cargo build --verbose --release --target=i686-unknown-freebsd
  archive_x86_64_script: |
    . $HOME/.cargo/env
    staging="static-web-server-$CIRRUS_TAG-x86_64-unknown-freebsd"
    mkdir -p "$staging/"
    cp "target/x86_64-unknown-freebsd/release/static-web-server" "$staging/"
    strip "$staging/static-web-server"
    cp {README.md,LICENSE-APACHE,LICENSE-MIT} "$staging/"
    tar czf "$staging.tar.gz" "$staging"
  archive_i686_script: |
    . $HOME/.cargo/env
    staging="static-web-server-$CIRRUS_TAG-i686-unknown-freebsd"
    mkdir -p "$staging/"
    cp "target/i686-unknown-freebsd/release/static-web-server" "$staging/"
    strip "$staging/static-web-server"
    cp {README.md,LICENSE-APACHE,LICENSE-MIT} "$staging/"
    tar czf "$staging.tar.gz" "$staging"
  upload_script: |
    #!/usr/bin/env bash

    set -e

    . $HOME/.cargo/env

    if [[ "$GITHUB_TOKEN" == "" ]]; then
      echo "GitHub access token GITHUB_TOKEN env is not provided!"
      exit 1
    fi

    RETRIES=0
    until [ $RETRIES -eq 20 ]
    do
      echo "Finding the GitHub release associated with '$CIRRUS_TAG' tag..."
      CIRRUS_RELEASE=$(curl -sL -H "Authorization: token $GITHUB_TOKEN" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/$CIRRUS_REPO_FULL_NAME/releases | jq -c "[ .[] | select( .tag_name | contains(\"$CIRRUS_TAG\")) ] | .[0]" | jq -r '.id')
      [[ "$CIRRUS_RELEASE" != "null" ]] && break
      RETRIES=$((RETRIES+1))
      sleep 30
    done

    if [[ "$CIRRUS_RELEASE" == "null" ]]; then
        echo "Can not find the associated GitHub '$CIRRUS_TAG' release!"
        exit 1
    fi

    echo "GitHub release '$CIRRUS_TAG' found. Preparing asset files to upload..."

    file_content_type="application/octet-stream"
    files_to_upload=(
      static-web-server-$CIRRUS_TAG-i686-unknown-freebsd.tar.gz
      static-web-server-$CIRRUS_TAG-x86_64-unknown-freebsd.tar.gz
    )

    for fpath in "${files_to_upload[@]}"
    do
      echo "Uploading GitHub release asset '$fpath'..."
      name=$(basename "$fpath")
      url_to_upload="https://uploads.github.com/repos/$CIRRUS_REPO_FULL_NAME/releases/$CIRRUS_RELEASE/assets?name=$name"
      curl -LX POST \
        --data-binary @$fpath \
        --header "Authorization: token $GITHUB_TOKEN" \
        --header "Content-Type: $file_content_type" \
        $url_to_upload
    done
  matrix:
    - name: freebsd-amd64-release
      env:
        BINARY_ARCH: x86_64
      setup_script:
        - pkg install -y bash curl jq
        - curl https://sh.rustup.rs -sSf --output rustup.sh
        - sh rustup.sh -y --profile minimal --default-toolchain stable
        - . $HOME/.cargo/env
        - |
          echo "~~~~ rustc --version ~~~~"
          rustc --version
      build_script: |
        . $HOME/.cargo/env
        cargo build --verbose --release --target=x86_64-unknown-freebsd
      archive_script: |
        . $HOME/.cargo/env
        staging="static-web-server-$CIRRUS_TAG-x86_64-unknown-freebsd"
        mkdir -p "$staging/"
        cp "target/x86_64-unknown-freebsd/release/static-web-server" "$staging/"
        strip "$staging/static-web-server"
        cp {README.md,LICENSE-APACHE,LICENSE-MIT} "$staging/"
        tar czf "$staging.tar.gz" "$staging"
      upload_script: |
        ./ci/upload_release_file.sh

    echo
    echo "GitHub release '$CIRRUS_TAG' assets uploaded successfully."
    - name: freebsd-i686-release
      env:
        BINARY_ARCH: i686
      setup_script:
        - pkg install -y bash curl jq
        - curl https://sh.rustup.rs -sSf --output rustup.sh
        - sh rustup.sh -y --profile minimal --default-toolchain stable
        - . $HOME/.cargo/env
        - rustup target add i686-unknown-freebsd
        - |
          echo "~~~~ rustc --version ~~~~"
          rustc --version
      build_script: |
        . $HOME/.cargo/env
        cargo build --verbose --release --target=i686-unknown-freebsd
      archive_script: |
        . $HOME/.cargo/env
        staging="static-web-server-$CIRRUS_TAG-i686-unknown-freebsd"
        mkdir -p "$staging/"
        cp "target/i686-unknown-freebsd/release/static-web-server" "$staging/"
        strip "$staging/static-web-server"
        cp {README.md,LICENSE-APACHE,LICENSE-MIT} "$staging/"
        tar czf "$staging.tar.gz" "$staging"
      upload_script: |
        ./ci/upload_release_file.sh
diff --git a/ci/upload_release_file.sh b/ci/upload_release_file.sh
new file mode 100755
index 0000000..4f5b86f
--- /dev/null
+++ b/ci/upload_release_file.sh
@@ -0,0 +1,41 @@
#!/usr/bin/env bash

set -e

. $HOME/.cargo/env

if [[ "$GITHUB_TOKEN" == "" ]]; then
    echo "GitHub access token GITHUB_TOKEN env is not provided!"
    exit 1
fi

RETRIES=0
until [ $RETRIES -eq 20 ]
do
    echo "Finding the GitHub release associated with '$CIRRUS_TAG' tag..."
    CIRRUS_RELEASE=$(curl -sL -H "Authorization: token $GITHUB_TOKEN" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/$CIRRUS_REPO_FULL_NAME/releases | jq -c "[ .[] | select( .tag_name | contains(\"$CIRRUS_TAG\")) ] | .[0]" | jq -r '.id')
    [[ "$CIRRUS_RELEASE" != "null" ]] && break
    RETRIES=$((RETRIES+1))
    sleep 30
done

if [[ "$CIRRUS_RELEASE" == "null" ]]; then
    echo "Can not find the associated GitHub '$CIRRUS_TAG' release!"
    exit 1
fi

echo "GitHub release '$CIRRUS_TAG' found. Preparing asset files to upload..."

files_to_upload="static-web-server-$CIRRUS_TAG-$BINARY_ARCH-unknown-freebsd.tar.gz"

echo "Uploading GitHub release asset '$files_to_upload'..."
name=$(basename "$files_to_upload")
url_to_upload="https://uploads.github.com/repos/$CIRRUS_REPO_FULL_NAME/releases/$CIRRUS_RELEASE/assets?name=$name"
curl -LX POST \
    --data-binary @$files_to_upload \
    --header "Authorization: token $GITHUB_TOKEN" \
    --header "Content-Type: application/octet-stream" \
    $url_to_upload

echo
echo "GitHub release '$CIRRUS_TAG' assets uploaded successfully."