name: Build & Deploy on: push: branches: [main] schedule: - cron: "*/45 * * * *" workflow_dispatch: jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - name: Install dependencies run: npm ci - name: Fetch homepage config from node jail run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa mkdir -p content/.indiekit scp -P 222 -o StrictHostKeyChecking=no \ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/usr/local/bastille/jails/node/root/usr/local/indiekit/content/.indiekit/homepage.json \ content/.indiekit/homepage.json - name: Build CSS run: npm run build:css - name: Create .env file env: SITE_URL: ${{ secrets.SITE_URL }} SITE_NAME: ${{ secrets.SITE_NAME }} SITE_SOCIAL: ${{ secrets.SITE_SOCIAL }} AUTHOR_NAME: ${{ secrets.AUTHOR_NAME }} SITE_DESCRIPTION: ${{ secrets.SITE_DESCRIPTION }} AUTHOR_BIO: ${{ secrets.AUTHOR_BIO }} AUTHOR_EMAIL: ${{ secrets.AUTHOR_EMAIL }} AUTHOR_LOCATION: ${{ secrets.AUTHOR_LOCATION }} GITHUB_USERNAME: ${{ secrets.GH_USERNAME }} MASTODON_INSTANCE: ${{ secrets.MASTODON_INSTANCE }} MASTODON_USER: ${{ secrets.MASTODON_USER }} BLUESKY_HANDLE: ${{ secrets.BLUESKY_HANDLE }} ACTIVITYPUB_HANDLE: ${{ secrets.ACTIVITYPUB_HANDLE }} AUTHOR_AVATAR: ${{ secrets.AUTHOR_AVATAR }} AUTHOR_TITLE: ${{ secrets.AUTHOR_TITLE }} AUTHOR_PRONOUN: ${{ secrets.AUTHOR_PRONOUN }} SITE_LOCALE: ${{ secrets.SITE_LOCALE }} OWNYOURSWARM_FEED_URL: ${{ secrets.OWNYOURSWARM_FEED_URL }} OWNYOURSWARM_FEED_TOKEN: ${{ secrets.OWNYOURSWARM_FEED_TOKEN }} LISTENING_FETCH_CACHE_DURATION: ${{ secrets.LISTENING_FETCH_CACHE_DURATION }} FUNKWHALE_FETCH_CACHE_DURATION: ${{ secrets.FUNKWHALE_FETCH_CACHE_DURATION }} LASTFM_FETCH_CACHE_DURATION: ${{ secrets.LASTFM_FETCH_CACHE_DURATION }} run: | { printf 'SITE_URL=%s\n' "$SITE_URL" printf 'SITE_NAME=%s\n' "$SITE_NAME" printf 'SITE_SOCIAL=%s\n' "$SITE_SOCIAL" printf 'AUTHOR_NAME=%s\n' "$AUTHOR_NAME" printf 'SITE_DESCRIPTION=%s\n' "$SITE_DESCRIPTION" printf 'AUTHOR_BIO=%s\n' "$AUTHOR_BIO" printf 'AUTHOR_EMAIL=%s\n' "$AUTHOR_EMAIL" printf 'AUTHOR_LOCATION=%s\n' "$AUTHOR_LOCATION" printf 'GITHUB_USERNAME=%s\n' "$GITHUB_USERNAME" printf 'MASTODON_INSTANCE=%s\n' "$MASTODON_INSTANCE" printf 'MASTODON_USER=%s\n' "$MASTODON_USER" printf 'BLUESKY_HANDLE=%s\n' "$BLUESKY_HANDLE" printf 'ACTIVITYPUB_HANDLE=%s\n' "$ACTIVITYPUB_HANDLE" printf 'AUTHOR_AVATAR=%s\n' "$AUTHOR_AVATAR" printf 'AUTHOR_TITLE=%s\n' "$AUTHOR_TITLE" printf 'AUTHOR_PRONOUN=%s\n' "$AUTHOR_PRONOUN" printf 'SITE_LOCALE=%s\n' "$SITE_LOCALE" printf 'OWNYOURSWARM_FEED_URL=%s\n' "$OWNYOURSWARM_FEED_URL" printf 'OWNYOURSWARM_FEED_TOKEN=%s\n' "$OWNYOURSWARM_FEED_TOKEN" printf 'LISTENING_FETCH_CACHE_DURATION=%s\n' "$LISTENING_FETCH_CACHE_DURATION" printf 'FUNKWHALE_FETCH_CACHE_DURATION=%s\n' "$FUNKWHALE_FETCH_CACHE_DURATION" printf 'LASTFM_FETCH_CACHE_DURATION=%s\n' "$LASTFM_FETCH_CACHE_DURATION" } > .env - name: Build site run: npm run build env: SITE_URL: ${{ secrets.SITE_URL }} SITE_NAME: ${{ secrets.SITE_NAME }} SITE_SOCIAL: ${{ secrets.SITE_SOCIAL }} SITE_DESCRIPTION: ${{ secrets.SITE_DESCRIPTION }} AUTHOR_NAME: ${{ secrets.AUTHOR_NAME }} ACTIVITYPUB_HANDLE: ${{ secrets.ACTIVITYPUB_HANDLE }} AUTHOR_AVATAR: ${{ secrets.AUTHOR_AVATAR }} AUTHOR_BIO: ${{ secrets.AUTHOR_BIO }} AUTHOR_EMAIL: ${{ secrets.AUTHOR_EMAIL }} GITHUB_USERNAME: ${{ secrets.GH_USERNAME }} MASTODON_INSTANCE: ${{ secrets.MASTODON_INSTANCE }} MASTODON_USER: ${{ secrets.MASTODON_USER }} BLUESKY_HANDLE: ${{ secrets.BLUESKY_HANDLE }} GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} OWNYOURSWARM_FEED_URL: ${{ secrets.OWNYOURSWARM_FEED_URL }} OWNYOURSWARM_FEED_TOKEN: ${{ secrets.OWNYOURSWARM_FEED_TOKEN }} LISTENING_FETCH_CACHE_DURATION: ${{ secrets.LISTENING_FETCH_CACHE_DURATION }} FUNKWHALE_FETCH_CACHE_DURATION: ${{ secrets.FUNKWHALE_FETCH_CACHE_DURATION }} LASTFM_FETCH_CACHE_DURATION: ${{ secrets.LASTFM_FETCH_CACHE_DURATION }} - name: Deploy via SCP uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.SSH_HOST }} port: 222 username: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "_site/*,.env" target: "/usr/local/bastille/jails/web/root/usr/local/www/blog" strip_components: 1