name: Release on: schedule: # 9 AM UTC on every Monday - cron: "0 9 * * Mon" workflow_dispatch: inputs: pre-release: type: boolean description: Mark "Pre-Release" required: false default: true env: X86_64_PC_WINDOWS_MSVC_OPENSSL_LIB_DIR: C:\Program Files\OpenSSL\lib\VC\x64\MD X86_64_PC_WINDOWS_MSVC_OPENSSL_INCLUDE_DIR: C:\Program Files\OpenSSL\include permissions: {} jobs: build: runs-on: ${{ matrix.os }} # Disable this scheduled job when running on a fork. if: ${{ github.repository == 'RustPython/RustPython' || github.event_name != 'schedule' }} permissions: contents: read strategy: matrix: include: - os: ubuntu-latest target: x86_64-unknown-linux-gnu - os: macos-latest target: aarch64-apple-darwin - os: windows-2025 target: x86_64-pc-windows-msvc # - os: ubuntu-latest # target: i686-unknown-linux-gnu # - os: ubuntu-latest # target: aarch64-unknown-linux-gnu # - os: ubuntu-latest # target: armv7-unknown-linux-gnueabi # - os: ubuntu-latest # target: s390x-unknown-linux-gnu # - os: ubuntu-latest # target: powerpc64le-unknown-linux-gnu # - os: macos-latest # target: x86_64-apple-darwin # - os: windows-2025 # target: i686-pc-windows-msvc # - os: windows-2025 # target: aarch64-pc-windows-msvc fail-fast: false steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - uses: dtolnay/rust-toolchain@stable with: target: ${{ matrix.target }} - name: Install macOS dependencies uses: ./.github/actions/install-macos-deps with: autoconf: true automake: true libtool: true - name: Build RustPython run: cargo build --release --target=${{ matrix.target }} --verbose --no-default-features --features stdlib,stdio,importlib,encodings,sqlite,host_env,ssl-rustls-aws-lc,threading,jit - name: Rename Binary run: cp target/${{ matrix.target }}/release/rustpython target/rustpython-release-${{ runner.os }}-${{ matrix.target }} if: runner.os != 'Windows' - name: Rename Binary run: cp target/${{ matrix.target }}/release/rustpython.exe target/rustpython-release-${{ runner.os }}-${{ matrix.target }}.exe if: runner.os == 'Windows' - name: Upload Binary Artifacts uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: rustpython-release-${{ runner.os }}-${{ matrix.target }} path: target/rustpython-release-${{ runner.os }}-${{ matrix.target }}* build-wasm: runs-on: ubuntu-latest # Disable this scheduled job when running on a fork. if: ${{ github.repository == 'RustPython/RustPython' || github.event_name != 'schedule' }} permissions: contents: read steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - uses: dtolnay/rust-toolchain@stable with: targets: wasm32-wasip1 - name: Build RustPython run: cargo build --target wasm32-wasip1 --no-default-features --features freeze-stdlib,stdlib --release - name: Rename Binary run: cp target/wasm32-wasip1/release/rustpython.wasm target/rustpython-release-wasm32-wasip1.wasm - name: Upload Binary Artifacts uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: rustpython-release-wasm32-wasip1 path: target/rustpython-release-wasm32-wasip1.wasm - name: install wasm-pack run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: package-manager-cache: false - uses: mwilliamson/setup-wabt-action@427f2fdd70bc4dbc2e53c2eb4f19f66162d71bd2 # v4.0.0 with: wabt-version: "1.0.30" - name: build demo run: | npm install npm run dist env: NODE_OPTIONS: "--openssl-legacy-provider" working-directory: ./wasm/demo - name: build notebook demo run: | npm install npm run dist mv dist ../demo/dist/notebook env: NODE_OPTIONS: "--openssl-legacy-provider" working-directory: ./wasm/notebook - name: Deploy demo to Github Pages if: ${{ github.repository == 'RustPython/RustPython' }} uses: peaceiris/actions-gh-pages@84c30a85c19949d7eee79c4ff27748b70285e453 # v4.1.0 with: deploy_key: ${{ secrets.ACTIONS_DEMO_DEPLOY_KEY }} publish_dir: ./wasm/demo/dist external_repository: RustPython/demo publish_branch: master release: runs-on: ubuntu-latest # Disable this scheduled job when running on a fork. if: ${{ github.repository == 'RustPython/RustPython' || github.event_name != 'schedule' }} needs: [build, build-wasm] permissions: contents: write # for creating a release steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - name: Download Binary Artifacts uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: path: bin pattern: rustpython-* merge-multiple: true - name: Create Lib Archive run: zip -r bin/rustpython-lib.zip Lib/ - name: List Binaries run: | ls -lah bin/ file bin/* - name: Create Release run: | if [[ "${PRE_RELEASE_INPUT}" == "false" ]]; then RELEASE_TYPE_NAME=Release PRERELEASE_ARG= else RELEASE_TYPE_NAME=Pre-Release PRERELEASE_ARG=--prerelease fi today=$(date '+%Y-%m-%d') gh release create "$today-$tag-$run" \ --repo="$GITHUB_REPOSITORY" \ --title="RustPython $RELEASE_TYPE_NAME $today-$tag #$run" \ --target="$tag" \ --notes "⚠️ **Important**: To run RustPython, you must download both the binary for your platform AND the \`rustpython-lib.zip\` archive. Extract the Lib directory from the archive to the same location as the binary, or set the \`RUSTPYTHONPATH\` environment variable to point to the Lib directory." \ --generate-notes \ $PRERELEASE_ARG \ bin/rustpython-release-* env: GH_TOKEN: ${{ github.token }} tag: ${{ github.ref_name }} run: ${{ github.run_number }} PRE_RELEASE_INPUT: ${{ github.event.inputs.pre-release }}