diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a9da0969..25ec282d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,12 +17,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 # workaround for npm registry key change # ref. `pnpm@10.1.0` / `pnpm@9.15.4` cannot be installed due to key id mismatch · Issue #612 · nodejs/corepack # - https://github.com/nodejs/corepack/issues/612#issuecomment-2629496091 - run: npm i -g corepack@latest && corepack enable - - uses: actions/setup-node@v4.4.0 + - uses: actions/setup-node@v6.0.0 with: node-version-file: .nvmrc diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 47793600..c5689d9c 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -16,7 +16,7 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Docker meta id: metal uses: docker/metadata-action@v5 diff --git a/.github/workflows/provenance.yml b/.github/workflows/provenance.yml new file mode 100644 index 00000000..4e1e78a0 --- /dev/null +++ b/.github/workflows/provenance.yml @@ -0,0 +1,22 @@ +name: ci + +on: + push: + branches: + - main + pull_request: + branches: + - main +permissions: + contents: read +jobs: + check-provenance: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + - name: Check provenance downgrades + uses: danielroe/provenance-action@41bcc969e579d9e29af08ba44fcbfdf95cee6e6c # v0.1.1 + with: + fail-on-provenance-change: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b733190d..f2bed5c1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,12 +12,12 @@ jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 - name: Set node - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version-file: .nvmrc diff --git a/.github/workflows/semantic-pull-request.yml b/.github/workflows/semantic-pull-request.yml index f3e6813a..6948034e 100644 --- a/.github/workflows/semantic-pull-request.yml +++ b/.github/workflows/semantic-pull-request.yml @@ -19,6 +19,6 @@ jobs: name: Semantic Pull Request steps: - name: Validate PR title - uses: amannn/action-semantic-pull-request@v5.5.3 + uses: amannn/action-semantic-pull-request@v6.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 5e134baa..4116c624 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ dist .output .pnpm-store .nuxt +.data .env .DS_Store .idea/ diff --git a/.npmrc b/.npmrc deleted file mode 100644 index c6d7600b..00000000 --- a/.npmrc +++ /dev/null @@ -1,4 +0,0 @@ -shamefully-hoist=true -shell-emulator=true -ignore-workspace-root-check=true -package-manager-strict=false diff --git a/.nvmrc b/.nvmrc index 8fdd954d..2bd5a0a9 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22 \ No newline at end of file +22 diff --git a/Dockerfile b/Dockerfile index 64974e1f..12661f15 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,13 +17,12 @@ RUN apk add git --no-cache # Prepare build deps ( ignore postinstall scripts for now ) COPY package.json ./ -COPY .npmrc ./ COPY pnpm-lock.yaml ./ -COPY patches ./patches RUN pnpm i --frozen-lockfile --ignore-scripts # Copy all source files COPY . ./ +RUN pnpm nuxt prepare # Run full install with every postinstall script ( This needs project file ) RUN pnpm i --frozen-lockfile diff --git a/README.md b/README.md index c12ea65c..a790712b 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ One could put Elk behind popular reverse proxies with SSL Handling like Traefik, 1. got into new source dir: ```cd elk``` 1. create local storage directory for settings: ```mkdir elk-storage``` 1. adjust permissions of storage dir: ```sudo chown 911:911 ./elk-storage``` -1. start container: ```docker-compose up --build -d``` +1. start container: ```docker compose up --build -d``` > [!NOTE] > The provided Dockerfile creates a container which will eventually run Elk as non-root user and create a persistent named Docker volume upon first start (if that volume does not yet exist). This volume is always created with root permission. Failing to change the permissions of ```/elk/data``` inside this volume to UID:GID 911 (as specified for Elk in the Dockerfile) will prevent Elk from storing it's config for user accounts. You either have to fix the permission in the created named volume, or mount a directory with the correct permission to ```/elk/data``` into the container. @@ -55,6 +55,7 @@ One could put Elk behind popular reverse proxies with SSL Handling like Traefik, These are known deployments using Elk as an alternative Web client for Mastodon servers or as a base for other projects in the fediverse: - [elk.fedified.com](https://elk.fedified.com) - Use Elk to log into any compatible instance +- [elk.mastodon.com.pl](https://elk.mastodon.com.pl) - Use Elk for the `mastodon.com.pl` Server - [elk.me.uk](https://elk.me.uk) - Use Elk to log into any compatible instance, hosted on Google Cloud Run with no Cloudflare proxy - [elk.h4.io](https://elk.h4.io) - Use Elk for the `h4.io` Server - [elk.universeodon.com](https://elk.universeodon.com) - Use Elk for the Universeodon Server diff --git a/app.vue b/app/app.vue similarity index 100% rename from app.vue rename to app/app.vue diff --git a/app/augments.d.ts b/app/augments.d.ts new file mode 100644 index 00000000..e94466b0 --- /dev/null +++ b/app/augments.d.ts @@ -0,0 +1,19 @@ +export {} + +declare module '#app' { + interface PageMeta { + wideLayout?: boolean + } + + interface RuntimeNuxtHooks { + 'elk-logo:click': () => void + } +} + +declare global { + namespace NodeJS { + interface Process { + mock?: Record + } + } +} diff --git a/components/account/AccountAvatar.vue b/app/components/account/AccountAvatar.vue similarity index 100% rename from components/account/AccountAvatar.vue rename to app/components/account/AccountAvatar.vue diff --git a/components/account/AccountBigAvatar.vue b/app/components/account/AccountBigAvatar.vue similarity index 100% rename from components/account/AccountBigAvatar.vue rename to app/components/account/AccountBigAvatar.vue diff --git a/components/account/AccountBigCard.vue b/app/components/account/AccountBigCard.vue similarity index 100% rename from components/account/AccountBigCard.vue rename to app/components/account/AccountBigCard.vue diff --git a/components/account/AccountBigCardSkeleton.vue b/app/components/account/AccountBigCardSkeleton.vue similarity index 100% rename from components/account/AccountBigCardSkeleton.vue rename to app/components/account/AccountBigCardSkeleton.vue diff --git a/components/account/AccountBotIndicator.vue b/app/components/account/AccountBotIndicator.vue similarity index 100% rename from components/account/AccountBotIndicator.vue rename to app/components/account/AccountBotIndicator.vue diff --git a/components/account/AccountCard.vue b/app/components/account/AccountCard.vue similarity index 100% rename from components/account/AccountCard.vue rename to app/components/account/AccountCard.vue diff --git a/components/account/AccountDisplayName.vue b/app/components/account/AccountDisplayName.vue similarity index 100% rename from components/account/AccountDisplayName.vue rename to app/components/account/AccountDisplayName.vue diff --git a/components/account/AccountFollowButton.vue b/app/components/account/AccountFollowButton.vue similarity index 97% rename from components/account/AccountFollowButton.vue rename to app/components/account/AccountFollowButton.vue index 10061519..0d27cda2 100644 --- a/components/account/AccountFollowButton.vue +++ b/app/components/account/AccountFollowButton.vue @@ -1,6 +1,6 @@ + + diff --git a/components/list/ListEntry.vue b/app/components/list/ListEntry.vue similarity index 100% rename from components/list/ListEntry.vue rename to app/components/list/ListEntry.vue diff --git a/components/list/Lists.vue b/app/components/list/Lists.vue similarity index 100% rename from components/list/Lists.vue rename to app/components/list/Lists.vue diff --git a/components/magickeys/MagickeysKeyboardShortcuts.vue b/app/components/magickeys/MagickeysKeyboardShortcuts.vue similarity index 100% rename from components/magickeys/MagickeysKeyboardShortcuts.vue rename to app/components/magickeys/MagickeysKeyboardShortcuts.vue diff --git a/components/main/MainContent.vue b/app/components/main/MainContent.vue similarity index 77% rename from components/main/MainContent.vue rename to app/components/main/MainContent.vue index dc3ba261..8f45d773 100644 --- a/components/main/MainContent.vue +++ b/app/components/main/MainContent.vue @@ -30,21 +30,21 @@ const containerClass = computed(() => { sticky top-0 z-20 pt="[env(safe-area-inset-top,0)]" bg="[rgba(var(--rgb-bg-base),0.7)]" - class="native:lg:w-[calc(100vw-5rem)] native:xl:w-[calc(135%+(100vw-1200px)/2)]" :class="{ 'backdrop-blur': !getPreferences(userSettings, 'optimizeForLowPerformanceDevice'), }" > -
-
- +
+ +
diff --git a/components/modal/DurationPicker.vue b/app/components/modal/DurationPicker.vue similarity index 93% rename from components/modal/DurationPicker.vue rename to app/components/modal/DurationPicker.vue index 897dcd02..90614ae9 100644 --- a/components/modal/DurationPicker.vue +++ b/app/components/modal/DurationPicker.vue @@ -13,9 +13,9 @@ watchEffect(() => { } const duration - = days.value * 24 * 60 * 60 - + hours.value * 60 * 60 - + minutes.value * 60 + = days.value * 24 * 60 * 60 + + hours.value * 60 * 60 + + minutes.value * 60 if (duration <= 0) { isValid.value = false diff --git a/components/modal/ModalConfirm.vue b/app/components/modal/ModalConfirm.vue similarity index 99% rename from components/modal/ModalConfirm.vue rename to app/components/modal/ModalConfirm.vue index f41d8df1..142fbcea 100644 --- a/components/modal/ModalConfirm.vue +++ b/app/components/modal/ModalConfirm.vue @@ -1,5 +1,5 @@ diff --git a/components/modal/ModalMediaPreview.vue b/app/components/modal/ModalMediaPreview.vue similarity index 100% rename from components/modal/ModalMediaPreview.vue rename to app/components/modal/ModalMediaPreview.vue diff --git a/components/modal/ModalMediaPreviewCarousel.vue b/app/components/modal/ModalMediaPreviewCarousel.vue similarity index 100% rename from components/modal/ModalMediaPreviewCarousel.vue rename to app/components/modal/ModalMediaPreviewCarousel.vue diff --git a/components/nav/NavBottom.vue b/app/components/nav/NavBottom.vue similarity index 100% rename from components/nav/NavBottom.vue rename to app/components/nav/NavBottom.vue diff --git a/components/nav/NavBottomMoreMenu.vue b/app/components/nav/NavBottomMoreMenu.vue similarity index 100% rename from components/nav/NavBottomMoreMenu.vue rename to app/components/nav/NavBottomMoreMenu.vue diff --git a/components/nav/NavFooter.vue b/app/components/nav/NavFooter.vue similarity index 100% rename from components/nav/NavFooter.vue rename to app/components/nav/NavFooter.vue diff --git a/components/nav/NavLogo.vue b/app/components/nav/NavLogo.vue similarity index 100% rename from components/nav/NavLogo.vue rename to app/components/nav/NavLogo.vue diff --git a/components/nav/NavSide.vue b/app/components/nav/NavSide.vue similarity index 100% rename from components/nav/NavSide.vue rename to app/components/nav/NavSide.vue diff --git a/components/nav/NavSideItem.vue b/app/components/nav/NavSideItem.vue similarity index 100% rename from components/nav/NavSideItem.vue rename to app/components/nav/NavSideItem.vue diff --git a/components/nav/NavTitle.vue b/app/components/nav/NavTitle.vue similarity index 69% rename from components/nav/NavTitle.vue rename to app/components/nav/NavTitle.vue index 74850614..10cbe768 100644 --- a/components/nav/NavTitle.vue +++ b/app/components/nav/NavTitle.vue @@ -18,7 +18,7 @@ router.afterEach(() => {