Guest User

github action workflow

a guest
Aug 3rd, 2025
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.63 KB | None | 0 0
  1. name: Build Delta Compiler
  2.  
  3. on:
  4. push:
  5. branches: [ master ]
  6. pull_request:
  7. branches: [ master ]
  8. release:
  9. types: [ created ]
  10.  
  11. env:
  12. CARGO_TERM_COLOR: always
  13.  
  14. jobs:
  15. build:
  16. name: Build on ${{ matrix.os }}
  17. runs-on: ${{ matrix.os }}
  18. strategy:
  19. matrix:
  20. include:
  21. - os: ubuntu-latest
  22. target: x86_64-unknown-linux-gnu
  23. artifact_name: delta
  24. asset_name: delta-linux-x86_64
  25. - os: windows-latest
  26. target: x86_64-pc-windows-msvc
  27. artifact_name: delta.exe
  28. asset_name: delta-windows-x86_64.exe
  29. - os: macos-latest
  30. target: aarch64-apple-darwin
  31. artifact_name: delta
  32. asset_name: delta-macos-aarch64
  33.  
  34. steps:
  35. - name: Checkout code
  36. uses: actions/checkout@v4
  37.  
  38. - name: Install Rust
  39. uses: dtolnay/rust-toolchain@stable
  40. with:
  41. targets: ${{ matrix.target }}
  42.  
  43. - name: Install LLVM (Ubuntu)
  44. if: matrix.os == 'ubuntu-latest'
  45. run: |
  46. sudo apt-get update
  47. sudo apt-get install -y llvm-17-dev libllvm17 clang-17 libpolly-17-dev
  48. echo "LLVM_SYS_170_PREFIX=/usr/lib/llvm-17" >> $GITHUB_ENV
  49.  
  50. - name: Install LLVM (macOS)
  51. if: matrix.os == 'macos-latest'
  52. run: |
  53. brew install llvm@17
  54. echo "LLVM_SYS_170_PREFIX=$(brew --prefix llvm@17)" >> $GITHUB_ENV
  55.  
  56. - name: Install LLVM (Windows)
  57. if: matrix.os == 'windows-latest'
  58. run: |
  59. choco install llvm --version=17.0.6 --force --no-progress
  60. echo "LLVM_SYS_170_PREFIX=C:\Program Files\LLVM" >> $env:GITHUB_ENV
  61.  
  62. - name: Cache cargo registry
  63. uses: actions/cache@v4
  64. with:
  65. path: ~/.cargo/registry
  66. key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
  67. restore-keys: |
  68. ${{ runner.os }}-cargo-registry-
  69.  
  70. - name: Cache cargo index
  71. uses: actions/cache@v4
  72. with:
  73. path: ~/.cargo/git
  74. key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
  75. restore-keys: |
  76. ${{ runner.os }}-cargo-index-
  77.  
  78. - name: Cache target directory
  79. uses: actions/cache@v4
  80. with:
  81. path: target
  82. key: ${{ runner.os }}-${{ matrix.target }}-target-${{ hashFiles('**/Cargo.lock') }}
  83. restore-keys: |
  84. ${{ runner.os }}-${{ matrix.target }}-target-
  85.  
  86. - name: Build
  87. run: cargo build --release --target ${{ matrix.target }}
  88.  
  89. - name: Run tests
  90. run: cargo test --target ${{ matrix.target }}
  91.  
  92. - name: Prepare artifact (Unix)
  93. if: matrix.os != 'windows-latest'
  94. run: |
  95. mkdir -p artifacts
  96. cp target/${{ matrix.target }}/release/${{ matrix.artifact_name }} artifacts/${{ matrix.asset_name }}
  97. chmod +x artifacts/${{ matrix.asset_name }}
  98.  
  99. - name: Prepare artifact (Windows)
  100. if: matrix.os == 'windows-latest'
  101. run: |
  102. mkdir artifacts
  103. copy target\${{ matrix.target }}\release\${{ matrix.artifact_name }} artifacts\${{ matrix.asset_name }}
  104.  
  105. - name: Upload artifacts
  106. uses: actions/upload-artifact@v4
  107. with:
  108. name: ${{ matrix.asset_name }}
  109. path: artifacts/${{ matrix.asset_name }}
  110. retention-days: 30
  111.  
  112. create-release-artifacts:
  113. name: Create Release Archive
  114. runs-on: ubuntu-latest
  115. needs: build
  116. if: github.event_name == 'release'
  117.  
  118. steps:
  119. - name: Download all artifacts
  120. uses: actions/download-artifact@v4
  121. with:
  122. path: ./artifacts
  123.  
  124. - name: Create release archives
  125. run: |
  126. cd artifacts
  127.  
  128. # Create individual archives for each platform
  129. tar -czf delta-linux-x86_64.tar.gz delta-linux-x86_64/
  130. tar -czf delta-macos-aarch64.tar.gz delta-macos-aarch64/
  131. zip -r delta-windows-x86_64.zip delta-windows-x86_64.exe/
  132.  
  133. # Create a combined archive with all platforms
  134. mkdir -p delta-all-platforms
  135. cp delta-linux-x86_64/delta-linux-x86_64 delta-all-platforms/
  136. cp delta-macos-aarch64/delta-macos-aarch64 delta-all-platforms/
  137. cp delta-windows-x86_64.exe/delta-windows-x86_64.exe delta-all-platforms/
  138. tar -czf delta-all-platforms.tar.gz delta-all-platforms/
  139.  
  140. - name: Upload release assets
  141. uses: softprops/action-gh-release@v2
  142. with:
  143. files: |
  144. artifacts/delta-linux-x86_64.tar.gz
  145. artifacts/delta-macos-aarch64.tar.gz
  146. artifacts/delta-windows-x86_64.zip
  147. artifacts/delta-all-platforms.tar.gz
  148. env:
  149. GITHUB_TOKEN: ${{ secrets.SECRET_TOKEN }}
Advertisement
Add Comment
Please, Sign In to add comment