7 Commits

Author SHA1 Message Date
5af59863a1 Release v0.4.0, now includes lockfile
All checks were successful
Basic checks / Basic build-and-test supertask (push) Successful in 6m23s
The only real change was the addition of some CSS. I'm recording the
lockfile so that consumers can more reliably build the same binary each
time.
2025-11-08 12:31:29 -06:00
84d93d496a Remove Linux-specific deps from web build
All checks were successful
Basic checks / Basic build-and-test supertask (push) Successful in 6m24s
The Alsa and Udev system dependencies are only required on Linux. The
WASM/WASI build doesn't use them, so they don't need to exist in the
build container.
2025-11-08 12:10:42 -06:00
4a9d252691 Update Dockerfile, copy everything, use makefile
I have figured out the `.dockerignore` file so I don't have to do manual
context size management like before.

The Dockerfile now uses the Makefile to ensure image builds contain the
same thing non-image builds would.
2025-11-08 12:08:45 -06:00
3c9a9a7d9d Add some CSS 2025-11-08 12:07:30 -06:00
010cbd6d4b Add an install target 2025-11-06 14:18:13 -06:00
918992702f Add standalone & bundle-able build variants
All checks were successful
Basic checks / Basic build-and-test supertask (push) Successful in 8m8s
Now there are build targets for producing a version that can be served
as-is, and another that can be included as a page in a larger site.
2025-11-06 10:48:06 -06:00
c8c64e4d22 Place Makefile 'configurables' up top
Variables that a package consumer might want to adjust should be placed
at the top of the file so they are immediately visible. Any constants
shall live below those (just the SRC folder, really).
2025-11-06 10:26:35 -06:00
5 changed files with 6058 additions and 25 deletions

6008
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "asteroids" name = "asteroids"
version = "0.3.0" version = "0.4.0"
edition = "2024" edition = "2024"
license = "AGPL-3.0-only" license = "AGPL-3.0-only"

View File

@@ -1,22 +1,11 @@
FROM rust:1.89 AS builder FROM rust:1.89 AS builder
RUN apt-get update
RUN apt-get install -y --no-install-recommends libasound2-dev libudev-dev
RUN rustup target add wasm32-unknown-unknown RUN rustup target add wasm32-unknown-unknown
RUN cargo install --locked wasm-bindgen-cli RUN cargo install --locked wasm-bindgen-cli
# Copy in only the parts we care about. This is to prevent Docker from re- COPY . .
# running some steps because unimportant files changed (e.g.: the .git/ folder)
COPY src/ ./src
COPY Cargo.toml ./Cargo.toml
# WARN: The lockfile doesn't exist in the repo. You will have to create it
# before building the Docker image (i.e.: run `cargo update` first)
COPY Cargo.lock ./Cargo.lock
COPY www/ ./www
COPY Makefile ./Makefile
# Oops. There's no text output in the Docker build command line (it still works, though) RUN make -j
RUN make
FROM busybox:musl FROM busybox:musl
RUN mkdir -p /var/www RUN mkdir -p /var/www

View File

@@ -3,22 +3,32 @@
## Do not use it if that isn't your goal! ## Do not use it if that isn't your goal!
## ##
SRC_DIR = ./src
SRCS := $(wildcard $(SRC_DIR)/**)
# Patch these to select a different build profile or target # Patch these to select a different build profile or target
# The target shouldn't change any time soon. WASM64, I guess. Other targets # The target shouldn't change any time soon. WASM64, I guess. Other targets
# aren't aimed at the web, so you shouldn't be using this makefile. # aren't aimed at the web, so you shouldn't be using this makefile.
CARGO_TARGET := wasm32-unknown-unknown CARGO_TARGET := wasm32-unknown-unknown
CARGO_PROFILE := tiny CARGO_PROFILE := tiny
.PHONY: clean full-clean web tarball SRC_DIR = ./src
SRCS := $(wildcard $(SRC_DIR)/**)
web: out/asteroids.js out/asteroids_bg.wasm out/index.html .PHONY: clean full-clean tarball tarball-standalone web web-standalone
# "Standalone" version. It includes an index.html to serve as-is
web-standalone: out/asteroids.js out/asteroids_bg.wasm out/index.html
# "Bundle-able" version. It has a page, but no index.html. Consumers are
# expected to provide their own index.html and link to this page.
web: out/asteroids.js out/asteroids_bg.wasm out/asteroids.html
tarball: asteroids_web_root.tar tarball: asteroids_web_root.tar
asteroids_web_root.tar: out/asteroids.js out/asteroids_bg.wasm out/index.html tarball_standalone: asteroids_web_root_standalone.tar
asteroids_web_root.tar: out/asteroids.js out/asteroids_bg.wasm out/asteroids.html
tar -caf $@ $^
asteroids_web_root_standalone.tar: out/asteroids.js out/asteroids_bg.wasm out/index.html
tar -caf $@ $^ tar -caf $@ $^
target/$(CARGO_TARGET)/$(CARGO_PROFILE)/asteroids.wasm: $(SRCS) Cargo.lock Cargo.toml target/$(CARGO_TARGET)/$(CARGO_PROFILE)/asteroids.wasm: $(SRCS) Cargo.lock Cargo.toml
@@ -32,15 +42,30 @@ out:
out/asteroids.js out/asteroids_bg.wasm &: target/$(CARGO_TARGET)/$(CARGO_PROFILE)/asteroids.wasm | out out/asteroids.js out/asteroids_bg.wasm &: target/$(CARGO_TARGET)/$(CARGO_PROFILE)/asteroids.wasm | out
wasm-bindgen --no-typescript --target web --out-dir ./out/ --out-name asteroids target/$(CARGO_TARGET)/$(CARGO_PROFILE)/asteroids.wasm wasm-bindgen --no-typescript --target web --out-dir ./out/ --out-name asteroids target/$(CARGO_TARGET)/$(CARGO_PROFILE)/asteroids.wasm
# Copies the index page to the output dir.
out/index.html: www/index.html out/index.html: www/index.html
cp -a $< $@ cp -a $< $@
rm -f out/boids.html
# Like `out/index.html`, but renames the page for use in a larger site.
out/asteroids.html: www/index.html
cp -a $< $@
rm -f out/index.html
# Clean the web build, but not the Cargo cache. Cargo handles it's own caching # Clean the web build, but not the Cargo cache. Cargo handles it's own caching
# and I don't want to obliterate it all the time. # and I don't want to obliterate it all the time.
clean: clean:
rm -rf out/ asteroids_web_root.tar rm -rf out/ asteroids_web_root.tar asteroids_web_root_standalone.tar
# Delete everything, including the Cargo build cache. In case someone needs # Delete everything, including the Cargo build cache. In case someone needs
# this, I guess. # this, I guess.
full-clean: clean full-clean: clean
cargo clean cargo clean
# Installation goal. It's meant to be a helper utility for moving the built
# output into the web root. Only supports the "bundle-able" mode.
install: web
install -dm0755 $(DESTDIR)
install -m0644 out/asteroids.js $(DESTDIR)/
install -m0644 out/asteroids_bg.wasm $(DESTDIR)/
install -m0644 out/asteroids.html $(DESTDIR)/

View File

@@ -2,15 +2,25 @@
<html lang="en"> <html lang="en">
<head> <head>
<style> <style>
body {
background-color: hsl(200, 3%, 65%);
}
h1 { h1 {
color: hsl(200, 3%, 90%);
background-color: hsl(195, 5%, 17%);
text-align: center; text-align: center;
margin: auto;
padding: 0.5em;
} }
canvas { canvas {
padding-left: 0; margin-top: 1em;
padding-right: 0;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
display: block; display: block;
outline-color: hsl(200, 7%, 50%);
outline-style: outset;
border-radius: 8px;
background-color: rgb(40%, 40%, 40%);
} }
main { main {
margin-left: auto; margin-left: auto;
@@ -18,11 +28,12 @@
width: 70%; width: 70%;
} }
table { table {
margin-bottom: 10px;
border-collapse: collapse; border-collapse: collapse;
} }
th, td { th, td {
border: 1px solid; border: 1px solid;
padding: 2px 4px; padding: 0.1em 0.3em;
} }
</style> </style>
</head> </head>
@@ -79,7 +90,7 @@
<tr> <tr>
<td>Program Version</td> <td>Program Version</td>
<!-- This version text is completely unchecked. I'll need to do something about that. --> <!-- This version text is completely unchecked. I'll need to do something about that. -->
<td><code>v0.3.0</code></td> <td><code>v0.4.0</code></td>
</tr> </tr>
</table> </table>
</article> </article>