/ .woodpecker / .build.yml
.build.yml
1 when: 2 - event: tag 3 branch: $CI_REPO_DEFAULT_BRANCH 4 5 skip_clone: true 6 7 steps: 8 prepare: 9 image: debian:bookworm 10 secrets: [ SSH_PRIVATE_KEY ] 11 commands: 12 - apt update 13 - apt install ca-certificates curl git -y 14 - export CARGO_HOME=$PWD/.cargo 15 - export RUSTUP_HOME=$PWD/.rustup 16 - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain none -y 17 - . "$PWD/.cargo/env" 18 - rustup toolchain install nightly --allow-downgrade --profile minimal --component clippy 19 - rustup target add x86_64-pc-windows-msvc 20 21 - mkdir -p /root/.ssh 22 - echo "$SSH_PRIVATE_KEY" > /root/.ssh/id_ed25519 23 - chmod 600 /root/.ssh/id_ed25519 24 - ssh-keyscan codeberg.org >> /root/.ssh/known_hosts 25 - git init 26 - git remote add origin $CI_REPO_CLONE_SSH_URL 27 - git config core.sshCommand 'ssh -i /root/.ssh/id_ed25519' 28 - git fetch && git checkout $CI_REPO_DEFAULT_BRANCH 29 - git submodule update --init --recursive 30 31 build: 32 image: debian:bookworm 33 commands: 34 - apt update 35 - apt install ca-certificates wget git gpg lsb-release software-properties-common gnupg gcc -y 36 37 - wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc 38 - echo "deb http://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-18 main" > /etc/apt/sources.list.d/llvm-18.list 39 - echo "deb-src http://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-18 main" >> /etc/apt/sources.list.d/llvm-18.list 40 41 - apt update 42 43 - apt install -y clang-18 lldb-18 lld-18 clangd-18 clang-tidy-18 clang-format-18 clang-tools-18 llvm-18-dev lld-18 lldb-18 llvm-18-tools libomp-18-dev libc++-18-dev libc++abi-18-dev libclang-common-18-dev libclang-18-dev libclang-cpp18-dev libunwind-18-dev 44 45 - update-alternatives --install /usr/bin/clang clang /usr/bin/clang-18 100 46 - update-alternatives --install /usr/bin/llvm-lib llvm-lib /usr/bin/llvm-lib-18 100 47 - update-alternatives --install /usr/bin/lld lld /usr/bin/lld-18 100 48 - update-alternatives --install /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-18 100 49 50 - export CARGO_HOME=$PWD/.cargo 51 - export RUSTUP_HOME=$PWD/.rustup 52 - . "$PWD/.cargo/env" 53 54 - cargo install cargo-xwin --locked 55 - cargo +nightly xwin build -p emtk --release --target x86_64-pc-windows-msvc 56 57 prepare-publish: 58 image: debian:bookworm 59 secrets: [ SSH_PRIVATE_KEY ] 60 commands: 61 - apt update 62 - apt install ca-certificates curl git zip -y 63 # Install git-cliff 64 - curl -LO https://github.com/orhun/git-cliff/releases/download/v2.4.0/git-cliff-2.4.0-aarch64-unknown-linux-gnu.tar.gz 65 - tar -xzf git-cliff-2.4.0-aarch64-unknown-linux-gnu.tar.gz 66 # Set git up 67 - mkdir -p /root/.ssh 68 - echo "$SSH_PRIVATE_KEY" > /root/.ssh/id_ed25519 69 - chmod 600 /root/.ssh/id_ed25519 70 - ssh-keyscan codeberg.org >> /root/.ssh/known_hosts 71 - git fetch 72 - git checkout $CI_REPO_DEFAULT_BRANCH 73 - git pull origin $CI_REPO_DEFAULT_BRANCH 74 # Update CHANGELOG.md and push 75 - ./git-cliff-2.4.0/git-cliff -o CHANGELOG.md --latest 76 - export VERSION="$(git tag | tail -n 1)" 77 - export CHANGELOG="$(./git-cliff-2.4.0/git-cliff --current --strip header)" 78 - git config --global user.email "corro@megu.dev" 79 - git config --global user.name "Corro" 80 - git add CHANGELOG.md 81 - "git commit -m \"chore(release): update changelog for $VERSION\"" 82 - sh -c "git push -u origin $CI_REPO_DEFAULT_BRANCH" 83 # Zip up the build for release 84 - > 85 zip toolkit-$VERSION-x86_64-pc-windows-msvc.zip -j 86 target/x86_64-pc-windows-msvc/release/emtk.exe emtk.exe 87 target/x86_64-pc-windows-msvc/release/deps/emf.dll emf.dll 88 target/x86_64-pc-windows-msvc/release/deps/emf.dll.lib emf.dll.lib 89 90 publish: 91 image: debian:bookworm 92 secrets: [ ACCESS_TOKEN ] 93 commands: 94 - apt update 95 - apt install ca-certificates curl jq git -y 96 # Create the release 97 - VERSION="$(git tag | tail -n 1)" 98 - CHANGELOG="$(./git-cliff-2.4.0/git-cliff --current --strip header | jq -Rs .)" 99 - > 100 RELEASE_ID=$(curl -s -X "POST" 101 "https://codeberg.org/api/v1/repos/ExanimaModding/Toolkit/releases" 102 -H "accept: application/json" 103 -H "Content-Type: application/json" 104 -d "{ 105 \"body\": $CHANGELOG, 106 \"draft\": false, 107 \"name\": \"$VERSION\", 108 \"prerelease\": true, 109 \"tag_name\": \"$VERSION\", 110 \"target_commitish\": \"$CI_REPO_DEFAULT_BRANCH\" 111 }" 112 -H "Authorization: token $ACCESS_TOKEN" | jq '.id') 113 # Upload zip file to the release 114 - > 115 curl -s -X "POST" 116 "https://codeberg.org/api/v1/repos/ExanimaModding/Toolkit/releases/$RELEASE_ID/assets?name=toolkit-$VERSION-x86_64-pc-windows-msvc.zip" 117 -H "accept: application/json" 118 -H "Content-Type: multipart/form-data" 119 -F "attachment=@toolkit-$VERSION-x86_64-pc-windows-msvc.zip;type=application/x-zip-compressed" 120 -H "Authorization: token $ACCESS_TOKEN"