Skip to content

Commit 408ae83

Browse files
committed
Fix vite assets hashes
1 parent 9ce0501 commit 408ae83

16 files changed

Lines changed: 246 additions & 147 deletions

File tree

services/app/apps/codebattle/assets/css/empty.html.heex

Lines changed: 0 additions & 56 deletions
This file was deleted.

services/app/apps/codebattle/assets/js/app.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@ import 'core-js/stable';
1818
import 'regenerator-runtime/runtime';
1919
import 'phoenix_html';
2020
import './fontawesome';
21-
// import '../css/style.scss';
21+
// ../css/style.scss is imported via vite config entry points
2222
import 'bootstrap';
2323

24+
// Import static assets for cache busting (adds them to Vite manifest)
25+
import './staticAssets';
26+
2427
import { inspect } from '@xstate/inspect';
2528
import NProgress from 'nprogress';
2629
import { Socket } from 'phoenix';
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// This file imports static assets that need cache busting in production.
2+
// By importing them here, Vite will process them and add them to the manifest.
3+
// These can then be referenced in server-rendered templates using the Vite helper.
4+
5+
// Main logo (used in header, og images, etc.)
6+
import '../static/images/logo.svg';
7+
8+
// Fight icon (used in header)
9+
import '../static/images/fight.svg';
10+
11+
// Landing page images
12+
import '../static/images/landing/github.svg';
13+
import '../static/images/landing/flowchart.svg';
14+
import '../static/images/landing/beginner.svg';
15+
import '../static/images/landing/experienced.svg';
16+
import '../static/images/landing/friends.svg';
17+
import '../static/images/landing/enthusiast.svg';
18+
19+
// Landing page photos and comments
20+
import '../static/images/landing/photo1.png';
21+
import '../static/images/landing/photo2.png';
22+
import '../static/images/landing/photo3.png';
23+
import '../static/images/landing/photo4.png';
24+
import '../static/images/landing/comment.png';
25+
import '../static/images/landing/comment2.png';
26+
import '../static/images/landing/comment3.png';
27+
import '../static/images/landing/html.png';
28+
29+
// Landing page language icons
30+
import '../static/images/landing/languages/clojure.svg';
31+
import '../static/images/landing/languages/cpp.svg';
32+
import '../static/images/landing/languages/c-sharp.svg';
33+
import '../static/images/landing/languages/dart.svg';
34+
import '../static/images/landing/languages/elixir.svg';
35+
import '../static/images/landing/languages/go.svg';
36+
import '../static/images/landing/languages/haskell.svg';
37+
import '../static/images/landing/languages/java.svg';
38+
import '../static/images/landing/languages/js.svg';
39+
import '../static/images/landing/languages/kotlin.svg';
40+
import '../static/images/landing/languages/php.svg';
41+
import '../static/images/landing/languages/python.svg';
42+
import '../static/images/landing/languages/ruby.svg';
43+
import '../static/images/landing/languages/rust.svg';
44+
import '../static/images/landing/languages/swift.svg';
45+
import '../static/images/landing/languages/ts.svg';
46+
import '../static/images/landing/languages/zig.svg';
47+
48+
// Note: Favicons are intentionally NOT imported here because:
49+
// 1. They rarely change
50+
// 2. Browsers expect them at fixed paths
51+
// 3. Some tools (like manifest.json) reference them by path

services/app/apps/codebattle/assets/js/widgets/selectors/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import isUndefined from 'lodash/isUndefined';
55
import pick from 'lodash/pick';
66
import moment from 'moment';
77

8+
import logoSvg from '../../../static/images/logo.svg';
89
import i18n from '../../i18n';
910
import BattleRoomViewModes from '../config/battleRoomViewModes';
1011
import editorModes from '../config/editorModes';
@@ -556,7 +557,7 @@ export const reportsSelector = createDraftSafeSelector(
556557
},
557558
);
558559

559-
export const selectDefaultAvatarUrl = () => '/assets/images/logo.svg';
560+
export const selectDefaultAvatarUrl = () => logoSvg;
560561

561562
// Participant data selector
562563
export const participantDataSelector = state => {

services/app/apps/codebattle/lib/codebattle_web/endpoint.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ defmodule CodebattleWeb.Endpoint do
4545
plug(
4646
Plug.Static,
4747
at: "/assets",
48-
from: "apps/codebattle/assets/static",
48+
from: Path.expand("../../assets/static", __DIR__),
4949
gzip: false
5050
)
5151
end

services/app/apps/codebattle/lib/codebattle_web/html_image.ex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ defmodule CodebattleWeb.HtmlImage do
4646
if logo = Application.get_env(:codebattle, :collab_logo) do
4747
logo
4848
else
49-
"https://codebattle.hexlet.io/assets/images/logo.svg"
49+
endpoint_config = Application.get_env(:codebattle, CodebattleWeb.Endpoint, [])
50+
url_config = Keyword.get(endpoint_config, :url, [])
51+
scheme = Keyword.get(url_config, :scheme, "https")
52+
host = Keyword.get(url_config, :host, "codebattle.hexlet.io")
53+
logo_path = CodebattleWeb.Vite.static_asset_path("images/logo.svg")
54+
"#{scheme}://#{host}#{logo_path}"
5055
end
5156
end
5257
end

services/app/apps/codebattle/lib/codebattle_web/templates/layout/app.html.heex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
<img
101101
alt="Logo"
102102
class="my-auto pt-1 pl-2 pl-md-0 pl-lg-0"
103-
src="/assets/images/logo.svg"
103+
src={static_asset("images/logo.svg")}
104104
/>
105105
<% end %>
106106
<%= if collab_logo_minor(@current_user) do %>
@@ -177,7 +177,7 @@
177177
<div class="btn mx-auto mx-sm-2">
178178
<img
179179
alt="invites"
180-
src="/assets/images/fight.svg"
180+
src={static_asset("images/fight.svg")}
181181
style="width:40px; height:40px"
182182
/>
183183
</div>

services/app/apps/codebattle/lib/codebattle_web/templates/layout/empty.html.heex

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,21 @@
4040
<meta name="csrf-token" content={csrf_token_value()} />
4141
<title>{Application.get_env(:codebattle, :app_title)}</title>
4242
<meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport" />
43-
<link phx-track-static rel="stylesheet" href={Routes.static_path(@conn, "/assets/app.css")} />
44-
<script
45-
defer
46-
phx-track-static
47-
type="module"
48-
src={Routes.static_path(@conn, "/assets/app.js")}
49-
>
50-
</script>
43+
44+
<%= if CodebattleWeb.Vite.dev?() do %>
45+
<script type="module" src="http://localhost:8080/@vite/client">
46+
</script>
47+
<script type="module" src="http://localhost:8080/assets/js/app.js">
48+
</script>
49+
<link rel="stylesheet" href="http://localhost:8080/assets/css/style.scss" />
50+
<% else %>
51+
<link rel="stylesheet" href={CodebattleWeb.Vite.asset_path("app.css")} />
52+
<%= for href <- CodebattleWeb.Vite.css_paths("app.js") do %>
53+
<link rel="stylesheet" href={href} />
54+
<% end %>
55+
<script type="module" src={CodebattleWeb.Vite.asset_path("app.js")}>
56+
</script>
57+
<% end %>
5158
</head>
5259
<body>
5360
{@inner_content}

services/app/apps/codebattle/lib/codebattle_web/templates/layout/external.html.heex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
<img
7373
alt="Logo"
7474
class="my-auto pt-1 pl-2 pl-md-0 pl-lg-0"
75-
src="/assets/images/logo.svg"
75+
src={static_asset("images/logo.svg")}
7676
/>
7777
<% end %>
7878
<%= if collab_logo_minor(@current_user) do %>

services/app/apps/codebattle/lib/codebattle_web/templates/layout/landing.html.heex

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -38,38 +38,19 @@
3838
<meta content="#ffffff" name="theme-color" />
3939
{render_tags_all(assigns[:meta_tags] || %{})}
4040
<meta name="csrf-token" content={csrf_token_value()} />
41-
<link
42-
phx-track-static
43-
rel="stylesheet"
44-
href={Routes.static_path(@conn, "/assets/landing.css")}
45-
/>
46-
<script
47-
defer
48-
phx-track-static
49-
type="module"
50-
src={Routes.static_path(@conn, "/assets/landing.js")}
51-
>
52-
</script>
53-
<script
54-
defer
55-
phx-track-static
56-
type="text/javascript"
57-
src={Routes.static_path(@conn, "/assets/landing.js")}
58-
>
59-
</script>
6041

6142
<%= if CodebattleWeb.Vite.dev?() do %>
62-
<link rel="stylesheet" href="http://localhost:8080/assets/css/landing.scss" />
6343
<script type="module" src="http://localhost:8080/@vite/client">
6444
</script>
6545
<script type="module" src="http://localhost:8080/assets/js/landing.js">
6646
</script>
47+
<link rel="stylesheet" href="http://localhost:8080/assets/css/landing.scss" />
6748
<% else %>
68-
<link rel="stylesheet" href={CodebattleWeb.Vite.asset_path("app.css")} />
69-
<%= for href <- CodebattleWeb.Vite.css_paths("app.js") do %>
49+
<link rel="stylesheet" href={CodebattleWeb.Vite.asset_path("landing.css")} />
50+
<%= for href <- CodebattleWeb.Vite.css_paths("landing.js") do %>
7051
<link rel="stylesheet" href={href} />
7152
<% end %>
72-
<script type="module" src={CodebattleWeb.Vite.asset_path("app.js")}>
53+
<script type="module" src={CodebattleWeb.Vite.asset_path("landing.js")}>
7354
</script>
7455
<% end %>
7556

0 commit comments

Comments
 (0)