Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
284e6dc
Add initial theme files.
justintadlock Jan 15, 2026
744bb1b
Add base PHP framework.
justintadlock Jan 15, 2026
e12092d
Update vendor and namespace.
justintadlock Jan 16, 2026
aab829f
Define logo/icon.
justintadlock Jan 16, 2026
b906297
Add site tagline to footer.
justintadlock Jan 16, 2026
598663a
First pass at adding a color reference.
justintadlock Jan 16, 2026
5edbf89
Correct heading level.
justintadlock Jan 16, 2026
7bd27c3
Consistency: Use `accent` and add missing colors.
justintadlock Jan 16, 2026
b9195b6
Add initial font families and faces.
justintadlock Jan 16, 2026
2745a11
Add initial color scheme naming to `theme.json`.
justintadlock Jan 16, 2026
14dc1fd
Add initial single post template.
justintadlock Jan 16, 2026
aba54d6
Add very basic index template.
justintadlock Jan 16, 2026
fdbf779
Better spacing for query and pagination.
justintadlock Jan 16, 2026
3219474
Add basic index/grid query styles.
justintadlock Jan 19, 2026
7b5c182
Add some base site header styles.
justintadlock Jan 19, 2026
445892d
Big structural update getting single post template in line.
justintadlock Jan 19, 2026
a90ad7a
Single post block error fixes.
justintadlock Jan 19, 2026
ad162de
Add basic site footer structure.
justintadlock Jan 19, 2026
2da2923
Add primitive purples and grays to `theme.json`.
justintadlock Jan 19, 2026
49a4f31
Re-update namespace to use `Bifrost`.
justintadlock Jan 20, 2026
a17e80f
Merge branch 'trunk' into feature/theme
justintadlock Jan 21, 2026
ac45b2e
Rename theme to `bifrost-noise`.
justintadlock Jan 21, 2026
61e5558
Base content types.
justintadlock Jan 22, 2026
b6ee395
Make classes final.
justintadlock Jan 22, 2026
fb4384a
Add parent support to Albums and Songs.
justintadlock Jan 22, 2026
c8372da
Add parent columns to CPT management screens.
justintadlock Jan 22, 2026
a8e0211
Merge pull request #14 from wptrainingteam/feature/content-types
justintadlock Jan 28, 2026
1256841
Add mcp.json template that contains the GitHub MCP setup.
ryanwelcher Jan 28, 2026
f675bf3
Merge branch 'trunk' into feature/theme
justintadlock Jan 28, 2026
6f75136
Merge pull request #21 from wptrainingteam/feature/add-mcp-config
ryanwelcher Jan 28, 2026
7540477
Big theme design update, mostly front page.
justintadlock Jan 29, 2026
82bee32
Don't use theme slug in template parts.
justintadlock Jan 30, 2026
d32fbd8
Add text-only social links block style for footer.
justintadlock Jan 30, 2026
0d525f1
Black/white featured images; color on hover.
justintadlock Jan 30, 2026
69938e1
Background overlay refinement.
justintadlock Jan 30, 2026
4c218a1
Show 4 albums front page.
justintadlock Jan 30, 2026
1334b06
Lots more design work.
justintadlock Jan 30, 2026
236e2d9
Loads of design updates.
justintadlock Feb 2, 2026
c6e64d6
Add single album template.
justintadlock Feb 2, 2026
6237bf7
Integrates the Playlist block.
justintadlock Feb 4, 2026
2a0cdea
Move CSS from `theme.json` to stylesheet files.
justintadlock Feb 4, 2026
4fab65b
Add initial block binding for Album Artist.
justintadlock Feb 4, 2026
54bb952
Single artist template design.
justintadlock Feb 5, 2026
d50af2e
Single post sidebar design.
justintadlock Feb 10, 2026
fcdee60
Base archive templates/patterns for home, artist, and album.
justintadlock Feb 10, 2026
0082454
Add build process for assets.
justintadlock Feb 13, 2026
5629c37
Custom artist albums query.
justintadlock Feb 13, 2026
81163c3
Add Cover with video background for front page.
justintadlock Feb 19, 2026
f2d4e81
Add custom cursor.
justintadlock Feb 19, 2026
764ae5f
Big template updates for archives and single pages.
justintadlock Feb 25, 2026
35615b9
Adds block binding for display post type data.
justintadlock Feb 25, 2026
fb1087a
Query the latest album release for cover block on front page.
justintadlock Feb 25, 2026
8d89eea
Fix updates to GB playlist block that broke the design.
justintadlock Feb 25, 2026
cdb387c
Lots of template work, bindings, and more.
justintadlock Feb 26, 2026
8d4ac0c
Creates Artist CPT content template.
justintadlock Feb 27, 2026
39f3411
Loads of updates around various templates.
justintadlock Mar 2, 2026
0549103
Add a composer deploy action for trunk and staging merges.
ryanwelcher Mar 2, 2026
9c26edf
Add manual workflow check.
ryanwelcher Mar 2, 2026
91fb395
Merge pull request #27 from wptrainingteam/feature/composer-vendor-de…
ryanwelcher Mar 2, 2026
1e162ed
Better dry run.
ryanwelcher Mar 2, 2026
4bb65b2
Adding known hosts.
ryanwelcher Mar 2, 2026
0c014d6
Merge pull request #28 from wptrainingteam/feature/composer-vendor-de…
ryanwelcher Mar 2, 2026
5ec12ce
Removes song post type.
justintadlock Mar 2, 2026
039b0eb
Safer checks before deploy.
ryanwelcher Mar 2, 2026
1026027
Add --insecure flag.
ryanwelcher Mar 2, 2026
5aaf7c8
Update paths.
ryanwelcher Mar 2, 2026
64f3d61
Fixes.
ryanwelcher Mar 2, 2026
5923043
remove the git add
ryanwelcher Mar 2, 2026
e0084f5
Addend vendor to paths.
ryanwelcher Mar 2, 2026
be62128
Try making sure the vendor folder exists.
ryanwelcher Mar 2, 2026
d5f1200
Remove last try.
ryanwelcher Mar 2, 2026
f87abed
Add the vendor folder and .gitkeep.
ryanwelcher Mar 2, 2026
2fbf1ee
Merge pull request #29 from wptrainingteam/feature/composer-vendor-de…
ryanwelcher Mar 2, 2026
9b601f7
Move album and genre archive templates to patterns.
justintadlock Mar 2, 2026
22dac1a
Merge branch 'trunk' into feature/theme
justintadlock Mar 2, 2026
ab0b7d0
Create .gitkeep.
justintadlock Mar 2, 2026
a579d77
Moves remaining archive templates to patterns.
justintadlock Mar 3, 2026
fd97ed9
Ensure MP4 files are treated as binary.
justintadlock Mar 3, 2026
5e35ad4
Template and pattern cleanup.
justintadlock Mar 3, 2026
88a8dc3
Simplify header and footer parts.
justintadlock Mar 3, 2026
1536795
Move front page header to pattern.
justintadlock Mar 3, 2026
e4b039f
Make template patterns uninsertable.
justintadlock Mar 3, 2026
055bdec
Update localhost references to images.
justintadlock Mar 3, 2026
eec9b4d
Merge pull request #31 from wptrainingteam/feature/theme
justintadlock Mar 3, 2026
dd8dbb1
Make the vendor deploy run after the site deploy is successful.
ryanwelcher Mar 4, 2026
b7bb95b
Merge pull request #33 from wptrainingteam/fix/deploy-vendors
ryanwelcher Mar 4, 2026
ec15071
Enable experimental Gutenberg blocks.
justintadlock Mar 4, 2026
ae44df1
Merge pull request #34 from wptrainingteam/feature/theme
justintadlock Mar 4, 2026
b5dda86
Adds block binding support for the Cover block.
justintadlock Mar 4, 2026
54b43c4
Organize block styles variations.
justintadlock Mar 5, 2026
3f92c05
Adds author template.
justintadlock Mar 5, 2026
0178b38
Add 404 template.
justintadlock Mar 5, 2026
a56d362
Add search template.
justintadlock Mar 5, 2026
7501143
Change post labels to Article(s).
justintadlock Mar 5, 2026
fd9d977
Generic archive template handling.
justintadlock Mar 5, 2026
7016549
Disable editor settings.
justintadlock Mar 6, 2026
1be130c
Consistent pagination spacing.
justintadlock Mar 6, 2026
a9d7247
Rename `search` binding to `query`.
justintadlock Mar 6, 2026
f5a09ad
Some PHP class booting cleanup.
justintadlock Mar 6, 2026
009e21a
Integrate with term meta for Cover images on term templates.
justintadlock Mar 6, 2026
6a61fbe
Merge pull request #39 from wptrainingteam/feature/theme
justintadlock Mar 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .git-ftp-include
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
!plugins/bifrost-music/vendor/
!themes/bifrost-noise/vendor/
71 changes: 71 additions & 0 deletions .github/workflows/deploy-vendors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: Deploy Vendor Folders

on:
workflow_run:
workflows:
- "Publish Website"
branches:
- trunk
- staging
types:
- completed
workflow_dispatch:
inputs:
dry_run:
description: 'Dry run — runs composer install but skips all uploads'
type: boolean
default: false

jobs:
deploy-vendors:
name: Build and Deploy Vendor Folders
runs-on: ubuntu-latest
# For workflow_run events, only proceed if the upstream workflow succeeded.
if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
# workflow_run executes in the context of the default branch, so use
# head_branch from the event payload to select the right environment.
environment: ${{ (github.event.workflow_run.head_branch || github.ref_name) == 'trunk' && 'production' || 'staging' }}

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
tools: composer

# ── Plugin ─────────────────────────────────────────────────────────────

- name: Install plugin dependencies (bifrost-music)
working-directory: plugins/bifrost-music
run: composer install --no-dev --optimize-autoloader --no-interaction

- name: Upload plugin vendor folder
if: ${{ inputs.dry_run != true && hashFiles('plugins/bifrost-music/vendor/**') != '' }}
uses: Automattic/FTP-Deploy-Action@3.1.2
with:
ftp-server: sftp://sftp.wp.com/htdocs/wp-content/plugins/bifrost-music/vendor/
ftp-username: ${{ secrets.SFTP_USER }}
ftp-password: ${{ secrets.SFTP_PASSWORD }}
local-dir: plugins/bifrost-music/vendor/
git-ftp-args: --all
known-hosts: ${{ secrets.SFTP_KNOWN_HOSTS }}

# ── Theme ───────────────────────────────────────────────────────────────

- name: Install theme dependencies (bifrost-noise)
working-directory: themes/bifrost-noise
run: composer install --no-dev --optimize-autoloader --no-interaction

- name: Upload theme vendor folder
if: ${{ inputs.dry_run != true && hashFiles('themes/bifrost-noise/vendor/**') != '' }}
uses: Automattic/FTP-Deploy-Action@3.1.2
with:
ftp-server: sftp://sftp.wp.com/htdocs/wp-content/themes/bifrost-noise/vendor/
ftp-username: ${{ secrets.SFTP_USER }}
ftp-password: ${{ secrets.SFTP_PASSWORD }}
local-dir: themes/bifrost-noise/vendor/
git-ftp-args: --all
known-hosts: ${{ secrets.SFTP_KNOWN_HOSTS }}
Comment on lines +21 to +71

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 5 days ago

In general, this needs an explicit permissions block to limit the GITHUB_TOKEN to the least privileges required. Since the job only checks out code and interacts with an external SFTP endpoint using secrets, it only needs read access to repository contents. We can safely restrict permissions to contents: read at the workflow root so it applies to all jobs (there is only one job here), and we don’t need any write scopes like issues: write or pull-requests: write.

The best fix is to add a top-level permissions section right after the name (line 1) and before the on: block (line 3). This will explicitly document that this workflow’s GITHUB_TOKEN is limited to reading repository contents, matching CodeQL’s suggested “minimal starting point”. No imports or additional methods are required since this is a pure YAML configuration change. Existing functionality will remain unchanged because the workflow was not relying on elevated token permissions.

Suggested changeset 1
.github/workflows/deploy-vendors.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/deploy-vendors.yml b/.github/workflows/deploy-vendors.yml
--- a/.github/workflows/deploy-vendors.yml
+++ b/.github/workflows/deploy-vendors.yml
@@ -1,4 +1,6 @@
 name: Deploy Vendor Folders
+permissions:
+  contents: read
 
 on:
   workflow_run:
EOF
@@ -1,4 +1,6 @@
name: Deploy Vendor Folders
permissions:
contents: read

on:
workflow_run:
Copilot is powered by AI and may make mistakes. Always verify output.
12 changes: 11 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,17 @@
/themes/twenty*
/uploads
/db.php
/plugins/akismet
/plugins/gutenberg
/plugins/icon-block
/plugins/wp-term-images

# Dependencies
node_modules/
vendor/
plugins/**/vendor/*
!plugins/**/vendor/.gitkeep
themes/**/vendor/*
!themes/**/vendor/.gitkeep
composer.lock

# Environment
Expand All @@ -35,3 +42,6 @@ Thumbs.db
# Build artifacts
dist/
build/

# AI
.mcp.json
11 changes: 11 additions & 0 deletions .mcp-example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "YOUR_TOKEN_HERE"
}
}
}
}
50 changes: 50 additions & 0 deletions plugins/bifrost-music/composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
{
"name": "bifrost/music",
"type": "wordpress-plugin",
"license": "GPL-3.0-or-later",
"scripts": {
"build": [
"composer update --no-dev",
"composer dump-autoload -o --no-dev"
],
"dev": [
"composer update",
"composer dump-autoload"
],
"lint:php": "./vendor/bin/phpcs -d error_reporting=E_ALL^E_DEPRECATED -s --colors .",
"zip": "composer archive --file=noise"
},
"autoload": {
"psr-4": {
"Bifrost\\Music\\": "inc/"
},
"files" : [
"inc/functions-helpers.php"
]
},
"require": {
"php": ">=8.1"
},
"require-dev": {
"wp-coding-standards/wpcs": "^3.0",
"phpcompatibility/phpcompatibility-wp": "*",
"symfony/var-dumper": "^6.4",
"dealerdirect/phpcodesniffer-composer-installer": "^1.0"
},
"minimum-stability": "stable",
"prefer-stable": true,
"config": {
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true
},
"archive-dir": "./",
"archive-format": "zip"
},
"archive": {
"exclude": [
"/vendor",
"!/vendor/autoload.php",
"!/vendor/composer/"
]
}
}
52 changes: 52 additions & 0 deletions plugins/bifrost-music/inc/Container/Container.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

/**
* Container interface.
*
* @author Bifrost
* @copyright Copyright (c) 2026, WordPress
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL-3.0-or-later
* @link https://github.com/wptrainingteam/developer-showcase
*/

declare(strict_types=1);

namespace Bifrost\Music\Container;

/**
* Defines the dependency injection container interface, which allows for
* binding concrete implementations to abstracts. The container supports the
* registration of transients, singletons, and instances.
*/
interface Container
{
/**
* Register a transient service (new instance each time).
*/
public function transient(string $abstract, mixed $concrete = null): void;

/**
* Register a singleton service (cached instance).
*/
public function singleton(string $abstract, mixed $concrete = null): void;

/**
* Register an existing instance as a singleton.
*/
public function instance(string $abstract, object $instance): void;

/**
* Resolve a service from the container.
*/
public function get(string $abstract): mixed;

/**
* Resolves a service from the container with parameters.
*/
public function make(string $abstract, array $parameters = []): object;

/**
* Check if a service is registered with the container.
*/
public function has(string $abstract): bool;
}
Loading
Loading