diff --git a/.github/workflows/translation-progress.yml b/.github/workflows/translation-progress.yml index ca2bb87e..1607e918 100644 --- a/.github/workflows/translation-progress.yml +++ b/.github/workflows/translation-progress.yml @@ -6,7 +6,7 @@ on: branches: - main paths: - - "src/translations.php" + - "api/translations.php" - "scripts/translation-progress.php" - ".github/workflows/translation-progress.yml" - "README.md" diff --git a/.vercelignore b/.vercelignore new file mode 100644 index 00000000..e9c5a7aa --- /dev/null +++ b/.vercelignore @@ -0,0 +1,20 @@ +# Generated files +vendor/ +node_modules/ +*.log +composer.phar +yarn.lock +package-lock.json +composer.lock + +# Local Configuration +package.json +.DS_Store + +# Environment +.env +DOCKER_ENV +docker_tag + +# IDE +.vscode/ diff --git a/Procfile b/Procfile index 29bb24c8..7284f824 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: vendor/bin/heroku-php-apache2 src/ +web: vendor/bin/heroku-php-apache2 api/ diff --git a/src/card.php b/api/card.php similarity index 100% rename from src/card.php rename to api/card.php diff --git a/src/colors.php b/api/colors.php similarity index 100% rename from src/colors.php rename to api/colors.php diff --git a/src/demo/apple-touch-icon.png b/api/demo/apple-touch-icon.png similarity index 100% rename from src/demo/apple-touch-icon.png rename to api/demo/apple-touch-icon.png diff --git a/src/demo/css/style.css b/api/demo/css/style.css similarity index 100% rename from src/demo/css/style.css rename to api/demo/css/style.css diff --git a/src/demo/css/toggle-dark.css b/api/demo/css/toggle-dark.css similarity index 100% rename from src/demo/css/toggle-dark.css rename to api/demo/css/toggle-dark.css diff --git a/src/demo/favicon-16x16.png b/api/demo/favicon-16x16.png similarity index 100% rename from src/demo/favicon-16x16.png rename to api/demo/favicon-16x16.png diff --git a/src/demo/favicon-32x32.png b/api/demo/favicon-32x32.png similarity index 100% rename from src/demo/favicon-32x32.png rename to api/demo/favicon-32x32.png diff --git a/src/demo/icon.svg b/api/demo/icon.svg similarity index 100% rename from src/demo/icon.svg rename to api/demo/icon.svg diff --git a/src/demo/index.php b/api/demo/index.php similarity index 94% rename from src/demo/index.php rename to api/demo/index.php index 62f02c4e..daddce8d 100644 --- a/src/demo/index.php +++ b/api/demo/index.php @@ -1,7 +1,7 @@ @@ -47,8 +58,8 @@ function gtag() { GitHub Readme Streak Stats Demo - "> - "> + "> + "> @@ -56,10 +67,10 @@ function gtag() { - - - - + + + + diff --git a/src/demo/js/accordion.js b/api/demo/js/accordion.js similarity index 100% rename from src/demo/js/accordion.js rename to api/demo/js/accordion.js diff --git a/src/demo/js/jscolor.min.js b/api/demo/js/jscolor.min.js similarity index 100% rename from src/demo/js/jscolor.min.js rename to api/demo/js/jscolor.min.js diff --git a/src/demo/js/script.js b/api/demo/js/script.js similarity index 100% rename from src/demo/js/script.js rename to api/demo/js/script.js diff --git a/src/demo/js/toggle-dark.js b/api/demo/js/toggle-dark.js similarity index 100% rename from src/demo/js/toggle-dark.js rename to api/demo/js/toggle-dark.js diff --git a/src/demo/preview.php b/api/demo/preview.php similarity index 93% rename from src/demo/preview.php rename to api/demo/preview.php index 2a43bc64..23c7c8d3 100644 --- a/src/demo/preview.php +++ b/api/demo/preview.php @@ -2,8 +2,8 @@ declare(strict_types=1); -require_once "../card.php"; -require_once "../stats.php"; +require_once dirname(__DIR__, 1) . "/card.php"; +require_once dirname(__DIR__, 1) . "/stats.php"; $mode = $_GET["mode"] ?? "daily"; diff --git a/api/demo/vercel-static.php b/api/demo/vercel-static.php new file mode 100644 index 00000000..fd018b5c --- /dev/null +++ b/api/demo/vercel-static.php @@ -0,0 +1,31 @@ + text/css +// require __DIR__ . "/css/style.css" + +// Remove the "/demo" from the URI and the query string +$path = str_replace("/demo", "", strtok($_SERVER["REQUEST_URI"], "?")); +// Get the file extension +$extension = pathinfo($path, PATHINFO_EXTENSION); + +// Set the content type based on the file extension +switch ($extension) { + case "css": + header("Content-Type: text/css"); + break; + case "js": + header("Content-Type: text/javascript"); + break; + case "svg": + header("Content-Type: image/svg+xml"); + break; + case "png": + header("Content-Type: image/png"); + break; + default: + break; +} + +// Return the contents of the file +require __DIR__ . $path; diff --git a/src/index.php b/api/index.php similarity index 92% rename from src/index.php rename to api/index.php index 610543ad..a7685760 100644 --- a/src/index.php +++ b/api/index.php @@ -3,7 +3,7 @@ declare(strict_types=1); // load functions -require_once "../vendor/autoload.php"; +require_once dirname(__DIR__, 1) . "/vendor/autoload.php"; require_once "stats.php"; require_once "card.php"; @@ -12,8 +12,8 @@ $dotenv->safeLoad(); // if environment variables are not loaded, display error -if (!isset($_SERVER["TOKEN"])) { - $message = file_exists(dirname(__DIR__ . "../.env", 1)) +if (!isset($_ENV["TOKEN"])) { + $message = file_exists(dirname(__DIR__, 1) . "/.env") ? "Missing token in config. Check Contributing.md for details." : ".env was not found. Check Contributing.md for details."; renderOutput($message, 500); diff --git a/src/stats.php b/api/stats.php similarity index 99% rename from src/stats.php rename to api/stats.php index 6511758c..645b5a58 100644 --- a/src/stats.php +++ b/api/stats.php @@ -163,11 +163,11 @@ function getGitHubTokens(): array return $GLOBALS["ALL_TOKENS"]; } // find all tokens in environment variables - $tokens = isset($_SERVER["TOKEN"]) ? [$_SERVER["TOKEN"]] : []; + $tokens = isset($_ENV["TOKEN"]) ? [$_ENV["TOKEN"]] : []; $index = 2; - while (isset($_SERVER["TOKEN{$index}"])) { + while (isset($_ENV["TOKEN{$index}"])) { // add token to list - $tokens[] = $_SERVER["TOKEN{$index}"]; + $tokens[] = $_ENV["TOKEN{$index}"]; $index++; } // store for future use diff --git a/src/themes.php b/api/themes.php similarity index 100% rename from src/themes.php rename to api/themes.php diff --git a/src/translations.php b/api/translations.php similarity index 100% rename from src/translations.php rename to api/translations.php diff --git a/composer.json b/composer.json index 82a95b97..04318a8e 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ "homepage": "https://github.com/DenverCoder1/github-readme-streak-stats", "autoload": { "classmap": [ - "src/" + "api/" ] }, "require": { @@ -28,7 +28,7 @@ "scripts": { "start": [ "Composer\\Config::disableProcessTimeout", - "php -S localhost:8000 -t src" + "php -S localhost:8000 -t api" ], "test": "./vendor/bin/phpunit --testdox tests", "lint": "prettier --check *.md **/*.{php,md,js,css} !**/*.min.js --print-width 120", diff --git a/scripts/translation-progress.php b/scripts/translation-progress.php index 30289d27..5835aad6 100644 --- a/scripts/translation-progress.php +++ b/scripts/translation-progress.php @@ -1,6 +1,6 @@ $phrases) { // skip aliases @@ -77,7 +77,7 @@ function progressToBadges(array $progress): string if ($i % $per_row === 0) { $table .= ""; } - $line_url = "https://github.com/DenverCoder1/github-readme-streak-stats/blob/main/src/translations.php#L{$data["line_number"]}"; + $line_url = "https://github.com/DenverCoder1/github-readme-streak-stats/blob/main/api/translations.php#L{$data["line_number"]}"; $table .= "{$data["locale"]} - {$data["locale_name"]}
\"{$data["locale_name"]}"; $i++; if ($i % $per_row === 0) { @@ -120,7 +120,7 @@ function updateReadme(string $path, string $start, string $end, string $content) $progress = getProgress($GLOBALS["TRANSLATIONS"]); $badges = "\n" . progressToBadges($progress); $update = updateReadme( - __DIR__ . "/../README.md", + dirname(__DIR__, 1) . "/README.md", "", "", $badges diff --git a/tests/OptionsTest.php b/tests/OptionsTest.php index 370ec171..733dda1f 100644 --- a/tests/OptionsTest.php +++ b/tests/OptionsTest.php @@ -5,7 +5,7 @@ use PHPUnit\Framework\TestCase; // load functions -require_once "src/card.php"; +require_once "api/card.php"; final class OptionsTest extends TestCase { @@ -29,7 +29,7 @@ final class OptionsTest extends TestCase public function testThemes(): void { // check that getRequestedTheme returns correct colors for each theme - $themes = include "src/themes.php"; + $themes = include "api/themes.php"; foreach ($themes as $theme => $colors) { $actualColors = getRequestedTheme(["theme" => $theme]); $expectedColors = $colors; @@ -65,7 +65,7 @@ public function testFallbackToDefaultTheme(): void public function testThemesHaveValidParameters(): void { // check that all themes contain all parameters and have valid values - $themes = include "src/themes.php"; + $themes = include "api/themes.php"; $hexPartialRegex = "(?:[A-F0-9]{3}|[A-F0-9]{4}|[A-F0-9]{6}|[A-F0-9]{8})"; $hexRegex = "/^#{$hexPartialRegex}$/"; $backgroundRegex = "/^#{$hexPartialRegex}|-?\d+(?:,{$hexPartialRegex})+$/"; diff --git a/tests/RenderTest.php b/tests/RenderTest.php index a551736a..213d308a 100644 --- a/tests/RenderTest.php +++ b/tests/RenderTest.php @@ -5,7 +5,7 @@ use PHPUnit\Framework\TestCase; // load functions -require_once "src/card.php"; +require_once "api/card.php"; final class RenderTest extends TestCase { diff --git a/tests/StatsTest.php b/tests/StatsTest.php index c05516a7..de14f0a7 100644 --- a/tests/StatsTest.php +++ b/tests/StatsTest.php @@ -6,15 +6,15 @@ // load functions require_once dirname(__DIR__, 1) . "/vendor/autoload.php"; -require_once "src/stats.php"; +require_once "api/stats.php"; // load .env $dotenv = \Dotenv\Dotenv::createImmutable(dirname(__DIR__, 1)); $dotenv->safeLoad(); // if environment variables are not loaded, display error -if (!isset($_SERVER["TOKEN"])) { - $message = file_exists(dirname(__DIR__ . "../.env", 1)) +if (!isset($_ENV["TOKEN"])) { + $message = file_exists(dirname(__DIR__, 1) . "/.env") ? "Missing token in config. Check Contributing.md for details." : ".env was not found. Check Contributing.md for details."; diff --git a/tests/TranslationsTest.php b/tests/TranslationsTest.php index d8937b18..a2b6dbf6 100644 --- a/tests/TranslationsTest.php +++ b/tests/TranslationsTest.php @@ -14,7 +14,7 @@ final class TranslationsTest extends TestCase */ public function testAllPhrasesValid(): void { - $translations = include "src/translations.php"; + $translations = include "api/translations.php"; $locales = array_keys($translations); $valid_phrases = [ "rtl", @@ -47,7 +47,7 @@ public function testAllPhrasesValid(): void */ public function testLocalesSortedAlphabetically(): void { - $translations = include "src/translations.php"; + $translations = include "api/translations.php"; $locales = array_keys($translations); // check that "en" is first $this->assertEquals("en", $locales[0]); @@ -68,7 +68,7 @@ public function testLocalesSortedAlphabetically(): void */ public function testKeysNormalized(): void { - $translations = include "src/translations.php"; + $translations = include "api/translations.php"; $locales = array_keys($translations); foreach ($locales as $locale) { // normalize locale code @@ -83,7 +83,7 @@ public function testKeysNormalized(): void */ public function testGetTranslations(): void { - $translations = include "src/translations.php"; + $translations = include "api/translations.php"; $en = $translations["en"]; // test alias $this->assertEquals($translations["zh_Hans"] + $en, getTranslations("zh"), "Alias not resolved"); diff --git a/vercel.json b/vercel.json new file mode 100644 index 00000000..e8bc8bf7 --- /dev/null +++ b/vercel.json @@ -0,0 +1,13 @@ +{ + "routes": [ + { "handle": "filesystem" }, + { "src": "/demo/?", "dest": "/api/demo/index.php" }, + { "src": "/demo/(.+)", "dest": "/api/demo/vercel-static.php" }, + { "src": "/", "dest": "/api/index.php" } + ], + "functions": { + "api/**/*": { + "runtime": "vercel-php@0.7.3" + } + } +}