From 2a7c3d9ac77008eaf2e1ed0faddd2d83bca6c6ce Mon Sep 17 00:00:00 2001 From: Paul Maskelyne Date: Fri, 3 Nov 2023 14:53:44 +0000 Subject: [PATCH] github pipelines --- .github/workflows/npm-gulp.yml | 29 +++++++++++ .github/workflows/release.yml | 88 ++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 .github/workflows/npm-gulp.yml create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/npm-gulp.yml b/.github/workflows/npm-gulp.yml new file mode 100644 index 0000000..ac73e46 --- /dev/null +++ b/.github/workflows/npm-gulp.yml @@ -0,0 +1,29 @@ +name: NodeJS with Gulp + +on: + push: + branches: [ "develop" ] + pull_request: + branches: [ "develop" ] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x] + + steps: + - uses: actions/checkout@v3 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + + - name: Install Dependencies + run: npm ci + + - name: Build + run: npm run build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..6a5e760 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,88 @@ +name: Create Release + +on: + push: + tags: + - 'release-*' + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x] + + steps: + - uses: actions/checkout@v3 + + - name: Set up variables + id: get_vars + run: | + TAG=${GITHUB_REF/refs\/tags\//} + echo ::set-output name=TAG_NAME::$TAG + echo ::set-output name=ZIP_NAME::ac2d20.zip + echo ::set-output name=RELEASE_DOWNLOAD_URL::https://github.com/${{github.repository}}/releases/latest/download/ac2d20.zip + echo ::set-output name=RELEASE_INSTALL_URL::https://github.com/${{github.repository}}/releases/download/$TAG/system.json + JSON=$(cat ./system/system.json) + echo ::set-output name=SYSTEM_JSON::${JSON//'%'/'%25'} + + # Run some tests to make sure our `system.json` is correct + # Exit before setting up node if not + - name: Verify Naming + env: + TAG_NAME: ${{ steps.get_vars.outputs.TAG_NAME }} + RELEASE_DOWNLOAD: ${{steps.get_vars.outputs.RELEASE_DOWNLOAD_URL}} + # Extract version and download url from system.json + # https://docs.github.com/en/actions/learn-github-actions/expressions#fromjson + PACKAGE_VERSION: ${{fromJSON(steps.get_vars.outputs.SYSTEM_JSON).version}} + PACKAGE_DOWNLOAD: ${{fromJSON(steps.get_vars.outputs.SYSTEM_JSON).download}} + run: | + # Validate that the tag being released matches the package version. + if [[ ! $TAG_NAME == release-$PACKAGE_VERSION ]]; then + echo "The system.json version does not match tag name." + echo "system.json: $PACKAGE_VERSION" + echo "tag name: $TAG_NAME" + echo "Please fix this and push the tag again." + exit 1 + fi + + # Validate that the package download url matches the release asset that will be created. + if [[ ! $RELEASE_DOWNLOAD == $PACKAGE_DOWNLOAD ]]; then + echo "The system.json download url does not match the created release asset url." + echo "system.json: $PACKAGE_DOWNLOAD" + echo "release asset url: $RELEASE_DOWNLOAD" + echo "Please fix this and push the tag again." + exit 1 + fi + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + - name: Install Dependencies + run: npm ci + + - name: Build + run: | + npm run build + cp --force LICENSE.txt system/. + cp --force README.md system/. + + - run: cd system && zip ../${{steps.get_vars.outputs.ZIP_NAME}} -r assets css fonts lang packs src templates ac2d20.mjs ac2d20-compiled.mjs ac2d20-compiled.mjs.map LICENSE.txt README.md system.json template.json + + # Create a release for this specific version + - name: Update Release with Files + id: create_version_release + uses: ncipollo/release-action@v1 + with: + allowUpdates: true # Set this to false if you want to prevent updating existing releases + name: ${{steps.get_vars.outputs.TAG_NAME}} + draft: false + prerelease: false + token: ${{ secrets.GITHUB_TOKEN }} + artifacts: './system/system.json, ./${{steps.get_vars.outputs.ZIP_NAME}}' + tag: ${{steps.get_vars.outputs.TAG_NAME}} + body: '**Installation:** To manually install this release, please use the following manifest URL: ${{steps.get_vars.outputs.RELEASE_INSTALL_URL}}'