name: rapport # 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. on: push: tags: ['v*', 'rapport-*'] workflow_dispatch: jobs: rapporter: runs-on: ubuntu-latest 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: 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 echo "Importerer $f" ./target/release/enok import "$f" --ut "$toml" fi done - name: Beregn og lag rapporter run: | shopt -s nullglob mkdir -p dist feil=0 for t in bygninger/*.toml; do 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" else echo "Beregningen av $navn feilet" feil=1 fi echo "::endgroup::" done 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/') env: TOKEN: ${{ secrets.GITEA_TOKEN }} SERVER: ${{ github.server_url }} REPO: ${{ github.repository }} TAG: ${{ github.ref_name }} 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" \ --form "attachment=@$f" \ "$api/$id/assets?name=$(basename "$f")" > /dev/null done