Release #385
Workflow file for this run
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: Release | |
on: | |
pull_request_review: | |
types: [submitted] | |
env: | |
YARN_ENABLE_GLOBAL_CACHE: false | |
jobs: | |
release: | |
name: Publish releases | |
if: | |
${{ github.event.review.state == 'approved' && github.event.sender.login | |
== github.event.pull_request.assignee.login && | |
github.event.pull_request.head.ref == 'release-candidate' }} | |
outputs: | |
companionWasReleased: | |
${{ steps.checkIfCompanionWasReleased.outputs.version }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: Get yarn cache directory path | |
id: yarn-cache-dir-path | |
run: | |
echo "dir=$(corepack yarn config get cacheFolder)" >> $GITHUB_OUTPUT | |
- uses: actions/cache@v4 | |
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) | |
with: | |
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-yarn- | |
- name: Install Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: lts/* | |
- name: Install dependencies | |
run: corepack yarn install --immutable | |
env: | |
# https://docs.cypress.io/guides/references/advanced-installation#Skipping-installation | |
CYPRESS_INSTALL_BINARY: 0 | |
- name: Get CHANGELOG diff | |
run: | |
git --no-pager diff HEAD^ -- CHANGELOG.md | awk '{ if( substr($0,0,1) | |
== "+" && $1 != "+##" && $1 != "+Released:" && $1 != "+++" ) { print | |
substr($0,2) } }' > CHANGELOG.diff.md | |
- name: Copy README for `uppy` package | |
run: cp README.md packages/uppy/. | |
- name: Build before publishing | |
run: corepack yarn run build | |
- name: Hack to allow the publish of the Angular package | |
run: corepack yarn workspace @uppy/angular prepublishOnly | |
- name: Publish to the npm registry | |
run: | |
corepack yarn workspaces foreach --no-private npm publish --access | |
public --tolerate-republish | |
env: | |
YARN_NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Merge PR | |
id: merge | |
run: | | |
gh api -X PUT repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/merge \ | |
-F merge_method="squash" \ | |
-F commit_message="$(cat CHANGELOG.diff.md)" \ | |
--jq 'if .merged then "sha="+.sha else error("not merged") end' >> $GITHUB_OUTPUT | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Create tags | |
run: | | |
git --no-pager diff --name-only HEAD^ | awk '$0 ~ /^packages\/.+\/package\.json$/ { print "jq -r '"'"'\"gh api /repos/{owner}/{repo}/git/refs -f ref=\\\"refs/tags/\"+.name+\"@\"+.version+\"\\\" -f sha=${{ steps.merge.outputs.sha }}\"'"'"' < " $0 }' > createTags.sh | |
cat createTags.sh | |
sh createTags.sh | sh | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Get Uppy version number | |
id: uppyVersion | |
run: | |
jq -r '"version="+.version' < packages/uppy/package.json >> | |
$GITHUB_OUTPUT | |
- name: Create GitHub release | |
run: | |
gh release create uppy@${{ steps.uppyVersion.outputs.version }} -t | |
"Uppy ${{ steps.uppyVersion.outputs.version }}" -F CHANGELOG.diff.md | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload `uppy` to CDN | |
run: corepack yarn run uploadcdn uppy | |
env: | |
EDGLY_KEY: ${{secrets.EDGLY_KEY}} | |
EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} | |
- name: Upload `@uppy/locales` to CDN if it was released | |
run: | |
git diff --exit-code --quiet HEAD^ -- | |
packages/@uppy/locales/package.json ||corepack yarn run uploadcdn | |
@uppy/locales | |
env: | |
EDGLY_KEY: ${{secrets.EDGLY_KEY}} | |
EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} | |
- name: Check if Companion was released | |
id: checkIfCompanionWasReleased | |
run: | |
git diff --exit-code --quiet HEAD^ -- | |
packages/@uppy/companion/package.json || echo "version=$(jq -r | |
.version < packages/@uppy/companion/package.json)" >> $GITHUB_OUTPUT | |
- name: Remove release-candidate branch | |
run: | |
gh api -X DELETE repos/${{ github.repository | |
}}/git/refs/heads/release-candidate || echo "Already deleted" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Remove release branch | |
run: | |
gh api -X DELETE repos/${{ github.repository }}/git/refs/heads/release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Disable Release workflow | |
run: gh workflow disable Release --repo ${{ github.repository }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: In case of failure | |
if: ${{ failure() }} | |
run: | |
gh pr comment ${{ github.event.pull_request.number }} --body "Release | |
job failed, please take action." | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# See also companion-deploy.yml | |
docker: | |
name: DockerHub | |
needs: release | |
if: ${{ needs.release.outputs.companionWasReleased }} | |
runs-on: ubuntu-latest | |
env: | |
DOCKER_BUILDKIT: 0 | |
COMPOSE_DOCKER_CLI_BUILD: 0 | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Docker meta | |
id: docker_meta | |
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1 | |
with: | |
images: transloadit/companion | |
tags: | | |
type=edge | |
type=semver,pattern={{version}},value=${{ needs.release.outputs.companionWasReleased }} | |
# set latest tag for default branch | |
type=raw,value=latest,enable=true | |
- uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 | |
- uses: docker/setup-buildx-action@v3 | |
- name: Log in to DockerHub | |
uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # v3.1.0 | |
with: | |
username: ${{secrets.DOCKER_USERNAME}} | |
password: ${{secrets.DOCKER_PASSWORD}} | |
- name: Build and push | |
uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0 | |
with: | |
push: true | |
context: . | |
platforms: linux/amd64,linux/arm64 | |
file: Dockerfile | |
tags: ${{ steps.docker_meta.outputs.tags }} | |
labels: ${{ steps.docker_meta.outputs.labels }} |