Arbeidsflytene var skrevet for beholderkjørere med ubuntu-latest, actions/checkout@v4 og en hemmelighet ved navn GITEA_TOKEN. Byggeserveren kjører i stedet en vertskjører med merkelappen fish, henter handlinger fra gitea.com og gir et innebygd token, slik de andre prosjektene er satt opp. Slik de var ville de ikke ha kjørt i det hele tatt. - fish som skall, og fish-syntaks i stegene - utløses når en utgivelse publiseres, ikke av tagger - release.yml legger enok-binærfilen ved utgivelsen, slik at prosjektlagre med egne bygningsmodeller kan lage energirapporter uten å ha Rust installert Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
This commit is contained in:
@@ -1,108 +1,67 @@
|
||||
name: rapport
|
||||
name: Energirapporter
|
||||
|
||||
# Bygger energirapporter for alle bygningene i `bygninger/` og legger dem ved utgivelsen.
|
||||
#
|
||||
# Legg én fil per bygning i `bygninger/`:
|
||||
# * `bygning.toml` — ferdig bygningsbeskrivelse
|
||||
# * `bygning.ifc` — IFC-eksport fra Vectorworks («Export IFC Project»)
|
||||
# * `bygning.gbxml` — gbXML fra BIM-verktøy som støtter det
|
||||
# * `bygning.csv` — regneark fra Vectorworks («Export Worksheet»)
|
||||
#
|
||||
# IFC-, gbXML- og CSV-filer importeres automatisk til TOML dersom det ikke allerede finnes en
|
||||
# TOML-fil med samme navn. Importerte filer må vanligvis suppleres med ventilasjon,
|
||||
# lekkasjetall og varmekilder før tallene er til å stole på; importen skriver merknader om det.
|
||||
# Lager energirapport for hver bygning i `bygninger/` og legger PDF, JSON og CSV ved
|
||||
# utgivelsen. Se `bygninger/LES-MEG.md` for hvilke filtyper som kan ligge der.
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ['v*', 'rapport-*']
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
rapporter:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: fish
|
||||
defaults:
|
||||
run:
|
||||
shell: fish {0}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Installer Rust og Typst
|
||||
run: |
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
|
||||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||||
TYPST=0.15.1
|
||||
curl -sSL "https://github.com/typst/typst/releases/download/v${TYPST}/typst-x86_64-unknown-linux-musl.tar.xz" \
|
||||
| tar -xJ --strip-components=1 -C /usr/local/bin typst-x86_64-unknown-linux-musl/typst
|
||||
|
||||
- name: Hurtiglager for klimadata og cargo
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry
|
||||
~/.cargo/git
|
||||
~/.cache/enok
|
||||
target
|
||||
key: enok-rapport-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
|
||||
restore-keys: enok-rapport-${{ runner.os }}-
|
||||
- name: Hent koden
|
||||
uses: https://gitea.com/actions/checkout@v6
|
||||
|
||||
- name: Bygg enok
|
||||
run: cargo build --release --locked
|
||||
|
||||
- name: Importer BIM-filer som ikke har en TOML fra før
|
||||
run: |
|
||||
shopt -s nullglob nocaseglob
|
||||
for f in bygninger/*.ifc bygninger/*.gbxml bygninger/*.xml bygninger/*.csv; do
|
||||
toml="${f%.*}.toml"
|
||||
if [ ! -f "$toml" ]; then
|
||||
for f in (find bygninger -type f \( -iname '*.ifc' -o -iname '*.gbxml' -o -iname '*.csv' \) 2>/dev/null)
|
||||
set toml (string replace -r '\.[^.]+$' '.toml' $f)
|
||||
if not test -f $toml
|
||||
echo "Importerer $f"
|
||||
./target/release/enok import "$f" --ut "$toml"
|
||||
fi
|
||||
done
|
||||
./target/release/enok import $f --ut $toml
|
||||
end
|
||||
end
|
||||
|
||||
- name: Beregn og lag rapporter
|
||||
run: |
|
||||
shopt -s nullglob
|
||||
mkdir -p dist
|
||||
feil=0
|
||||
for t in bygninger/*.toml; do
|
||||
navn="$(basename "$t" .toml)"
|
||||
set feil 0
|
||||
for t in (find bygninger -type f -name '*.toml' 2>/dev/null)
|
||||
set navn (basename $t .toml)
|
||||
echo "::group::$navn"
|
||||
if ./target/release/enok beregn "$t" --ut "ut/$navn"; then
|
||||
cp "ut/$navn/rapport.pdf" "dist/$navn-energirapport.pdf"
|
||||
cp "ut/$navn/resultat.json" "dist/$navn-resultat.json"
|
||||
cp "ut/$navn/maaned.csv" "dist/$navn-maaned.csv"
|
||||
gzip -c "ut/$navn/timeserie.csv" > "dist/$navn-timeserie.csv.gz"
|
||||
if ./target/release/enok beregn $t --ut ut/$navn
|
||||
cp ut/$navn/rapport.pdf dist/$navn-energirapport.pdf
|
||||
cp ut/$navn/resultat.json dist/$navn-resultat.json
|
||||
cp ut/$navn/maaned.csv dist/$navn-maaned.csv
|
||||
gzip -c ut/$navn/timeserie.csv > dist/$navn-timeserie.csv.gz
|
||||
else
|
||||
echo "Beregningen av $navn feilet"
|
||||
feil=1
|
||||
fi
|
||||
set feil 1
|
||||
end
|
||||
echo "::endgroup::"
|
||||
done
|
||||
end
|
||||
ls -la dist
|
||||
exit $feil
|
||||
|
||||
- name: Last opp som byggeartefakt
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: energirapporter
|
||||
path: dist/
|
||||
|
||||
- name: Legg ved utgivelsen
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
if: github.event_name == 'release'
|
||||
env:
|
||||
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
SERVER: ${{ github.server_url }}
|
||||
REPO: ${{ github.repository }}
|
||||
TAG: ${{ github.ref_name }}
|
||||
TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
api="$SERVER/api/v1/repos/$REPO/releases"
|
||||
id=$(curl -sS --fail -H "Authorization: token $TOKEN" "$api/tags/$TAG" | jq -r '.id // empty')
|
||||
if [ -z "$id" ]; then
|
||||
id=$(curl -sS --fail -X POST -H "Authorization: token $TOKEN" -H 'Content-Type: application/json' \
|
||||
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":\"Energirapporter generert av enok.\"}" \
|
||||
"$api" | jq -r '.id')
|
||||
fi
|
||||
for f in dist/*; do
|
||||
echo "Laster opp $(basename "$f")"
|
||||
curl -sS --fail -H "Authorization: token $TOKEN" \
|
||||
set REL_ID (curl --silent --fail --header "Authorization: token $TOKEN" \
|
||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases/tags/$GITHUB_REF_NAME" | jq -r '.id')
|
||||
for f in (find dist -type f)
|
||||
echo "Laster opp "(basename $f)
|
||||
curl --silent --show-error --fail --header "Authorization: token $TOKEN" \
|
||||
--form "attachment=@$f" \
|
||||
"$api/$id/assets?name=$(basename "$f")" > /dev/null
|
||||
done
|
||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases/$REL_ID/assets?name="(basename $f)
|
||||
end
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
name: Release enok
|
||||
|
||||
# Bygger enok og legger binærfilen ved utgivelsen, slik at byggeprosjektene kan hente den
|
||||
# og lage energirapporter uten å ha Rust installert.
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
bygg:
|
||||
runs-on: fish
|
||||
defaults:
|
||||
run:
|
||||
shell: fish {0}
|
||||
steps:
|
||||
- name: Hent koden
|
||||
uses: https://gitea.com/actions/checkout@v6
|
||||
|
||||
- name: Bygg
|
||||
run: cargo build --release --locked
|
||||
|
||||
- name: Kontroller
|
||||
run: cargo test --release --locked
|
||||
|
||||
- name: Legg binærfilen ved utgivelsen
|
||||
env:
|
||||
TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
set REL_ID (curl --silent --fail --header "Authorization: token $TOKEN" \
|
||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases/tags/$GITHUB_REF_NAME" | jq -r '.id')
|
||||
curl --silent --show-error --fail --header "Authorization: token $TOKEN" \
|
||||
--form "attachment=@target/release/enok" \
|
||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases/$REL_ID/assets?name=enok"
|
||||
@@ -7,25 +7,14 @@ on:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
# Vertskjører på kasse, samme oppsett som de andre prosjektene.
|
||||
runs-on: fish
|
||||
defaults:
|
||||
run:
|
||||
shell: fish {0}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Installer Rust
|
||||
run: |
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --component rustfmt,clippy
|
||||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- name: Hurtiglager for klimadata og cargo
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry
|
||||
~/.cargo/git
|
||||
~/.cache/enok
|
||||
target
|
||||
key: enok-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
|
||||
restore-keys: enok-${{ runner.os }}-
|
||||
- name: Hent koden
|
||||
uses: https://gitea.com/actions/checkout@v6
|
||||
|
||||
- name: Formatering
|
||||
run: cargo fmt --check
|
||||
@@ -34,4 +23,4 @@ jobs:
|
||||
run: cargo clippy --all-targets -- -D warnings
|
||||
|
||||
- name: Tester
|
||||
run: cargo test --release
|
||||
run: cargo test --release --locked
|
||||
|
||||
Reference in New Issue
Block a user