diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 00000000..7a96afe0 --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,78 @@ +--- + +name: Build and Push Docker Image + +on: + push: + branches: [master] + tags: + - 'v*.*.*' + # Only build when files in these directories have been changed + paths: + - client/** + - server/** + - index.js + - package.json + release: + types: [published, edited] + # Allows you to run workflow manually from Actions tab + workflow_dispatch: + +jobs: + build: + if: "!contains(github.event.head_commit.message, 'skip ci')" + runs-on: ubuntu-20.04 + + steps: + - name: Check out + uses: actions/checkout@v2 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + images: advplyr/audiobookshelf,ghcr.io/${{ github.repository_owner }}/audiobookshelf + tags: | + type=edge,branch=master + type=semver,pattern={{version}} + - name: Setup QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Cache Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Login to Dockerhub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Login to ghcr + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GHCR_PASSWORD }} + + - name: Build image + uses: docker/build-push-action@v2 + with: + tags: ${{ steps.meta.outputs.tags }} + context: . + platforms: linux/amd64,linux/arm64,linux/arm/v7 + push: true + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache diff --git a/client/components/app/BookShelfCategorized.vue b/client/components/app/BookShelfCategorized.vue index 3fcc7df9..0e624b1d 100644 --- a/client/components/app/BookShelfCategorized.vue +++ b/client/components/app/BookShelfCategorized.vue @@ -128,8 +128,7 @@ export default { type: 'series', entities: this.results.series.map((seriesObj) => { return { - name: seriesObj.series.name, - series: seriesObj.series, + ...seriesObj.series, books: seriesObj.books, type: 'series' } diff --git a/client/components/app/SideRail.vue b/client/components/app/SideRail.vue index 38d0d36d..73cf3a11 100644 --- a/client/components/app/SideRail.vue +++ b/client/components/app/SideRail.vue @@ -52,7 +52,7 @@
- +

Search

@@ -82,6 +82,9 @@ export default { showExperimentalFeatures() { return this.$store.state.showExperimentalFeatures }, + userIsAdminOrUp() { + return this.$store.getters['user/getIsAdminOrUp'] + }, paramId() { return this.$route.params ? this.$route.params.id || '' : '' }, diff --git a/client/components/covers/GroupCover.vue b/client/components/covers/GroupCover.vue index 8af50fd0..015e539f 100644 --- a/client/components/covers/GroupCover.vue +++ b/client/components/covers/GroupCover.vue @@ -44,6 +44,14 @@ export default { this.$nextTick(this.init) } } + }, + width: { + handler(newVal) { + if (newVal) { + this.isInit = false + this.$nextTick(this.init) + } + } } }, computed: { diff --git a/client/components/modals/AccountModal.vue b/client/components/modals/AccountModal.vue index 7623a1a5..409dd80a 100644 --- a/client/components/modals/AccountModal.vue +++ b/client/components/modals/AccountModal.vue @@ -1,5 +1,5 @@