diff --git a/.github/workflows/cdn-deploy-release.yml b/.github/workflows/cdn-deploy-release.yml index 7c1a022..69472be 100644 --- a/.github/workflows/cdn-deploy-release.yml +++ b/.github/workflows/cdn-deploy-release.yml @@ -1,16 +1,11 @@ -name: Build, tag, & deploy CDN assets for release +name: Deploy CDN assets for release on: - workflow_dispatch: - inputs: - version: - description: The version to tag and release - required: true - + repository_dispatch: + types: az_icons_release jobs: deploy: - name: Build & deploy CDN assets - runs-on: ubuntu-20.04 - + name: Deploy CDN assets + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 @@ -24,17 +19,6 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-west-2 - - name: Create Release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: "v${{ github.event.inputs.version }}" - release_name: "v${{ github.event.inputs.version }}" - draft: false - prerelease: false - - name: Deploy CDN assets to S3 + CloudFront run: | aws s3 sync --delete --cache-control max-age=691200 dist/. s3://${{ secrets.AZ_DIGITAL_CDN_BUCKET }}/lib/az-icons/${{ github.event.inputs.version }}/ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..c8c631a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,115 @@ +name: Create Release +on: + workflow_dispatch: + inputs: + version: + description: The version to tag and release + required: true + +jobs: + release: + name: Create Release + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ssh-key: ${{ secrets.AZ_ICONS_DEPLOY_KEY }} + + - name: Set variables for Docker images + run: | + oldhash=${{ hashFiles('Dockerfile', 'package.json', 'package-lock.json', 'scripts/*') }} + registry='ghcr.io' + imageprefix="${registry}/${GITHUB_REPOSITORY}/" + imagename='az-nodejs-ephemeral' + imagestem="${imageprefix}${imagename}:" + echo "AZ_DOCKER_REGISTRY=${registry}" >> ${GITHUB_ENV} + echo "AZ_OLD_HASH=${oldhash}" >> ${GITHUB_ENV} + echo "AZ_IMAGE_STEM=${imagestem}" >> ${GITHUB_ENV} + echo "AZ_ICONS_SOURCE_DIR=az-icons-src" >> ${GITHUB_ENV} + echo "AZ_ICONS_FROZEN_DIR=/azbuild/az-icons" >> ${GITHUB_ENV} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker authentication + run: | + docker login "$AZ_DOCKER_REGISTRY" -u "$GITHUB_ACTOR" -p ${{ secrets.GITHUB_TOKEN }} + + - name: Unconditionally rebuild and save the Docker image + run: | + workingtitle=$(docker build -q . ) + tempname="old${AZ_OLD_HASH}" + docker run --name "$tempname" "$workingtitle" true + docker cp -a "${tempname}:${AZ_BOOTSTRAP_FROZEN_DIR}/." . + docker rm "$tempname" + lockhash=${{ hashFiles('Dockerfile', 'package.json', 'package-lock.json', 'scripts/*') }} + ephemeral="${AZ_IMAGE_STEM}${lockhash}" + docker tag "$workingtitle" "$ephemeral" + docker push "$ephemeral" + echo "AZ_EPHEMERAL_IMAGE=${ephemeral}" >> ${GITHUB_ENV} + + - name: Build variables + run: | + echo "AZ_VERSION=${{ github.event.inputs.version }}" >> ${GITHUB_ENV} + + - name: Update version + run: | + git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" + git config --global user.name "${GITHUB_ACTOR}" + docker run --rm -e "AZ_RELEASE_VERSION=${AZ_VERSION}" -v $(pwd):"/${AZ_ICONS_SOURCE_DIR}" "$AZ_EPHEMERAL_IMAGE" create-release + git add dist package.json package-lock.json + git commit -m '${{ github.event.inputs.version }}' + git push + echo "RELEASE_SHA=$(git rev-parse HEAD)" >> ${GITHUB_ENV} + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + commitish: "${{ env.RELEASE_SHA }}" + tag_name: "v${{ env.AZ_VERSION }}" + release_name: "v${{ env.AZ_VERSION }}" + draft: false + prerelease: false #${{ contains(env.AZ_VERSION, '-alpha') }} + + - name: Save new SHA to file + run: | + echo "{\"sha\": \"$(git rev-parse HEAD)\"}" > ${{ runner.temp }}/variables.json + + - name: Upload variables + uses: actions/upload-artifact@v4 + with: + name: variables-json-artifact + path: ${{ runner.temp }} + + dispatch: + needs: release + strategy: + matrix: + repo: + - az-digital/az-icons + - az-digital/az-icons-packagist + runs-on: ubuntu-latest + steps: + - name: Download variables + uses: actions/download-artifact@v4 + with: + name: variables-json-artifact + path: ${{ runner.temp }} + + - name: Update environment variables + run: | + variablesfile=${{ runner.temp }}/variables.json + echo "RELEASE_SHA=$(cat ${variablesfile} | jq -r '.sha' )" >> ${GITHUB_ENV} + echo "BRANCH_NAME=${GITHUB_REF_NAME}" >> ${GITHUB_ENV} + + - name: Notify dependencies + uses: peter-evans/repository-dispatch@v2 + with: + token: ${{ secrets.REPO_DISPATCH_TOKEN }} + repository: ${{ matrix.repo }} + event-type: az_icons_release + client-payload: '{"version": "${{ github.event.inputs.version }}", "ref": "${{ env.RELEASE_SHA }}", "sha": "${{ env.RELEASE_SHA }}", "branch": "${{env.BRANCH_NAME}}"}' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 70e9230..ab0e653 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,12 +62,12 @@ az-icons └── src ├── az-icons-styles.css ├── fonts - │ ├── az-icons.eot - │ ├── az-icons.svg - │ ├── az-icons.ttf - │ └── az-icons.woff + │ ├── az-icons.eot + │ ├── az-icons.svg + │ ├── az-icons.ttf + │ └── az-icons.woff ├── png - │ └── *.png + │ └── *.png └── svg └── *.svg ``` diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index 76adcd6..c779180 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -1,2 +1,2 @@ -Arizona Icons is Copyright (C) 2019-2022 +Arizona Icons is Copyright (C) 2019-2024 The Arizona Board of Regents on behalf of The University of Arizona. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0369910 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +FROM --platform=linux/amd64 node:20.11.0-bookworm-slim + +ENV LANG C.UTF-8 + +COPY scripts/copy-npm-config.sh /usr/local/bin/copy-npm-config +COPY scripts/create-release.sh /usr/local/bin/create-release + +# Build args don't normally persist as environment variables. +ARG AZ_ICONS_FROZEN_DIR +ENV AZ_ICONS_FROZEN_DIR ${AZ_ICONS_FROZEN_DIR:-/azbuild/az-icons} +ARG AZ_ICONS_SOURCE_DIR +ENV AZ_ICONS_SOURCE_DIR ${AZ_ICONS_SOURCE_DIR:-/az-icons-src} + +# Silence warnings from the update-notifier npm package. +ENV NO_UPDATE_NOTIFIER 1 + +WORKDIR $AZ_ICONS_SOURCE_DIR + +COPY "package.json" "$AZ_ICONS_FROZEN_DIR"/ + +RUN apt-get update \ + && apt-get install --no-install-recommends -y \ + git \ + python3 \ + python3-pip \ + python3-setuptools \ + python3-wheel \ + rsync \ + && rm -rf /var/lib/apt/lists/* \ + && pip3 install 'awscli~=1.19.41' \ + && cd "${AZ_ICONS_FROZEN_DIR}" \ + && npm config set cache='/tmp/.npm' \ + && chmod 755 /root \ + && chmod 644 /root/.npmrc \ + && npm install --location=global npm-check-updates@16.14.12 \ + && npm install \ + && find node_modules -name '.DS_Store' -exec rm {} \; diff --git a/demo.html b/demo.html index 438f963..76eb96a 100644 --- a/demo.html +++ b/demo.html @@ -327,6 +327,5 @@
Generated by IcoMoon
-