From 2fae983746e5532f1b902d7e0e5f972265cf0f7b Mon Sep 17 00:00:00 2001 From: thrillfall Date: Sat, 14 Aug 2021 19:57:50 +0200 Subject: [PATCH] add github workflow to automate nextcloud appstore release --- .github/workflows/build_release.yml | 36 ++++++++++ Makefile | 104 ++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 .github/workflows/build_release.yml create mode 100644 Makefile diff --git a/.github/workflows/build_release.yml b/.github/workflows/build_release.yml new file mode 100644 index 0000000..6325308 --- /dev/null +++ b/.github/workflows/build_release.yml @@ -0,0 +1,36 @@ +name: Build and publish app release + +on: + release: + types: [published] + +env: + APP_NAME: gpoddersync + +jobs: + build_and_publish: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + path: ${{ env.APP_NAME }} + - name: Run build + run: cd ${{ env.APP_NAME }} && make appstore + - name: Upload app tarball to release + uses: svenstaro/upload-release-action@v2 + id: attach_to_release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ env.APP_NAME }}/build/artifacts/appstore/${{ env.APP_NAME }}.tar.gz + asset_name: ${{ env.APP_NAME }}.tar.gz + tag: ${{ github.ref }} + overwrite: true + - name: Upload app to Nextcloud appstore + uses: R0Wi/nextcloud-appstore-push-action@v1 + env: + app_name: ${{ env.APP_NAME }} + appstore_token: ${{ secrets.APPSTORE_TOKEN }} + download_url: ${{ steps.attach_to_release.outputs.browser_download_url }} + app_private_key: ${{ secrets.APP_PRIVATE_KEY }} + nightly: ${{ github.event.release.prerelease }} diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..51be6c8 --- /dev/null +++ b/Makefile @@ -0,0 +1,104 @@ +# Makefile for building the project + +app_name=gpoddersync + +project_dir=$(CURDIR)/../$(app_name) +build_dir=$(CURDIR)/build/artifacts +appstore_dir=$(build_dir)/appstore +source_dir=$(build_dir)/source +sign_dir=$(build_dir)/sign +package_name=$(app_name) +cert_dir=$(HOME)/.nextcloud/certificates +version+=master + +all: dev-setup build-js-production + +dev-setup: clean-dev npm-init + +dependabot: dev-setup npm-update build-js-production + +release: appstore create-tag + +build-js: + npm run dev + +build-js-production: + npm run build + +watch-js: + npm run watch + +test: + npm run test:unit + +lint: + npm run lint + +lint-fix: + npm run lint:fix + +npm-init: + npm ci + +npm-update: + npm update + +clean: + rm -rf js/* + rm -rf $(build_dir) + +clean-dev: clean + rm -rf node_modules + +create-tag: + git tag -a v$(version) -m "Tagging the $(version) release." + git push origin v$(version) + +appstore: + rm -rf $(build_dir) + mkdir -p $(sign_dir) + rsync -a \ + --exclude=babel.config.js \ + --exclude=/build \ + --exclude=composer.json \ + --exclude=composer.lock \ + --exclude=docs \ + --exclude=.drone.yml \ + --exclude=.eslintignore \ + --exclude=.eslintrc.js \ + --exclude=.git \ + --exclude=.gitattributes \ + --exclude=.github \ + --exclude=.gitignore \ + --exclude=jest.config.js \ + --exclude=.l10nignore \ + --exclude=mkdocs.yml \ + --exclude=Makefile \ + --exclude=node_modules \ + --exclude=package.json \ + --exclude=package-lock.json \ + --exclude=.php_cs.dist \ + --exclude=.php_cs.cache \ + --exclude=README.md \ + --exclude=src \ + --exclude=.stylelintignore \ + --exclude=stylelint.config.js \ + --exclude=.tx \ + --exclude=tests \ + --exclude=vendor \ + --exclude=release \ + --exclude=webpack.*.js \ + $(project_dir)/ $(sign_dir)/$(app_name) + @if [ -f $(cert_dir)/$(app_name).key ]; then \ + echo "Signing app files…"; \ + php ../../occ integrity:sign-app \ + --privateKey=$(cert_dir)/$(app_name).key\ + --certificate=$(cert_dir)/$(app_name).crt\ + --path=$(sign_dir)/$(app_name); \ + fi + tar -czf $(build_dir)/$(app_name)-$(version).tar.gz \ + -C $(sign_dir) $(app_name) + @if [ -f $(cert_dir)/$(app_name).key ]; then \ + echo "Signing package…"; \ + openssl dgst -sha512 -sign $(cert_dir)/$(app_name).key $(build_dir)/$(app_name)-$(version).tar.gz | openssl base64; \ + fi