/ .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"